X-Git-Url: https://pere.pagekite.me/gitweb/homepage.git/blobdiff_plain/e6544e4c7228ba38913cb79443c20b068370ca28..5cf94c4e4cba84010edcd37c8c15da61af807aa6:/blog/archive/2012/05/05.rss diff --git a/blog/archive/2012/05/05.rss b/blog/archive/2012/05/05.rss index 29c74576c6..b125e4ed3f 100644 --- a/blog/archive/2012/05/05.rss +++ b/blog/archive/2012/05/05.rss @@ -613,5 +613,170 @@ keep sending documents in ODF formats.</li> + + Litt informasjon om Bitfactors Bensinpris-API + http://people.skolelinux.org/pere/blog/Litt_informasjon_om_Bitfactors_Bensinpris_API.html + http://people.skolelinux.org/pere/blog/Litt_informasjon_om_Bitfactors_Bensinpris_API.html + Mon, 28 May 2012 23:55:00 +0200 + <p>I fjor siden lanserte Bitfactory en +<a href="http://www.bitfactory.no/bensinpris.html">mobilapp for å få +tilgang til bensinpriser</a> på landets bensinstasjoner ved å samle +inn prisene på dugnad ved hjelp av mobilapp-ens brukere. +Informasjonen app-ens brukere har samlet inn har så langt kun vært +tilgjengelig for brukerne av app-ene, og API for å hente ut +informasjonen fra andre plattformer har ikke vært publisert. Da +løsningen kom spurte jeg utviklerne om de kunne publisere +API-dokumentasjon og de skulle se på saken, men det har ikke skjedd så +langt. Jeg antar de har vært for travelt opptatt til å publisere +API-dokumentasjon.</p> + +<p>Utrolig nok er det i følge +<a href="http://www.dn.no/energi/article2194526.ece">Dagens +Næringsliv</a> og +<a href="http://www.finnmarkdagblad.no/nyheter/article5323140.ece">Finnmark +Dagbladet</a> bensinstasjoner som nekter å oppgi prisene sine på +telefon, slik at det ikke finnes en fornuftig måte å få tak i prisene +på uten å samle dem inn på stedet. Flere har dugnader på gang for å +samle inn prisinformasjon om bensin, men så vidt jeg kan se er det kun +<a href="http://www.dinside.no/php/oko/bensin/vis_prisliste.php">dinside.no</a> +og Bitfactorys App som får regelmessige oppdateringer. Dinsides +oversikt er tilgjengelig på web for de som vil følge med, mens +bitfactorys informasjon ikke er like enkelt tilgjengelig.<p> + +<p>Jeg tok meg derfor litt tid for å revers-utvikle protokollen for +Bitfactorys mobilapp for å gjøre den innsamlede informasjonen mer +tilgjengelig for flere. Protokollen bruker HTTP og normal +forms-notasjon for POST. Jeg lot en telefon koble seg til mitt +trådløsnett, og satte opp tcpdump til å samle all trafikken mot +www.bitfactory.no, og deretter tittet på alle HTTP-kallene ved hjelp +av wireshark. Her er API-kallene jeg har identifisert så langt.</p> + +<p><b>stasjonsDatabaseUpdateStamp</b></p> + +<p><tt>GET http://www.bitfactory.no/Bensin/ver1.1.stasjonsDatabaseUpdateStamp</tt></p> + +<p>Vet ikke helt hva dette API-kallet gjør, men navnet gjør at jeg +tror den rapporterer når listen over stasjoner sist ble endret. +Returverdien er et tall som pr. 2011-12-09 er 1319145491 og +pr. 2012-05-28 er 1336420693. Mitt gjett er at dette er sekunder +siden 1. januar 1970 ala det en finner på Linux, som kan konverteres +til en leselig dato med <tt>perl -e 'print +scalar(localtime(1319145491)), "\n"'</tt>. Den første verdien +konverterer da til "Thu Oct 20 23:18:11 2011", mens den andre +konverteres til "Mon May 7 21:58:13 2012".</p> + +<p><b>GetXMLDatabase</b></p> + +<p><tt>echo password=X43uP9KS_3ZqR | POST http://www.bitfactory.no/Bensin/GetXMLDatabase.php +<p><tt>echo password=XYZXYZXYZXYZX | POST http://www.bitfactory.no/Bensin/GetXMLDatabase.php + +<p>Henter ned listen med stasjoner på XML-format. Argumentet er +password som muligens følger med i programpakken og eventuelt +genereres av app-en. Nedlasting med samme passord flere ganger ser +ikke ut til å fungere. Innholdet er ca. 1600 stasjoner, men manglet +bensinstasjonen i min hjemkommune Ballangen da jeg sjekket, så den er +ikke komplett. Formatet på selve listen ser slik ut (klippet):</p> + +<pre> +&lt;?xml version="1.0" encoding="UTF-8"?&gt; +&lt;STASJONSDATABASE&gt; +&lt;STASJON&gt; +&lt;NAME&gt;&lt;/NAME&gt; +&lt;ADDRESS&gt;&lt;/ADDRESS&gt; +&lt;ID&gt;0&lt;/ID&gt; +&lt;LATITUDE&gt;0.000000&lt;/LATITUDE&gt; +&lt;LONGITUDE&gt;0.000000&lt;/LONGITUDE&gt; +&lt;COMPANY&gt;&lt;/COMPANY&gt; +&lt;/STASJON&gt; +&lt;STASJON&gt; +&lt;NAME&gt;Statoil Best Eidsvoll Verk&lt;/NAME&gt; +&lt;ADDRESS&gt;Gamle Trondheimsvei 339 2074 Eidsvoll Verk&lt;/ADDRESS&gt; +&lt;ID&gt;1&lt;/ID&gt; +&lt;LATITUDE&gt;60.303902&lt;/LATITUDE&gt; +&lt;LONGITUDE&gt;11.168100&lt;/LONGITUDE&gt; +&lt;COMPANY&gt;Best&lt;/COMPANY&gt; +&lt;/STASJON&gt; +[...] +&lt;STASJON&gt; +&lt;NAME&gt;Esso Andenes&lt;/NAME&gt; +&lt;ADDRESS&gt;Falcksgate 9, 8480 Andenes&lt;/ADDRESS&gt; +&lt;ID&gt;1822&lt;/ID&gt; +&lt;LATITUDE&gt;69.320999&lt;/LATITUDE&gt; +&lt;LONGITUDE&gt;16.118700&lt;/LONGITUDE&gt; +&lt;COMPANY&gt;Esso&lt;/COMPANY&gt; +&lt;/STASJON&gt; +&lt;/STASJONSDATABASE&gt; +</pre> + +<p><b>GetBanStatus</b></p> + +<p><tt>echo UDID=Android-123456789012345 | POST http://www.bitfactory.no/Bensin/ver1.1.GetBanStatus.php</tt></p> + +<p>Vet heller ikke helt hva dette API-kallet gjør. Navnet gjør at jeg +tror den rapporterer om telefonen med UDID oppgitt som argument er +bannlyst fra tjenesten. Bannlysning gjør antagelig at telefonen ikke +kan brukes til å registrere bensinpriser, men det er også mulig det +blokkerer for å se på priser. Eneste POST-argument er UDID, som ser +ut til å være den unike ID-en til en mobil-enhet. Returnverdi er 'NO' +for alle UDID-verdier jeg har testet. Gjetter på at alternativ +returverdi er 'YES', men har ikke sett en slik verdi så langt.</p> + +<p><b>PriserVedStasjoner</b></p> + +<p><tt>echo 'stasjoner=810,364&day=0' | POST http://www.bitfactory.no/Bensin/ver1.1.PriserVedStasjoner.php</tt></p> + +<p>Dette kallet henter ut priser registrert på en eller flere +bensinstasjoner. Den tar to POST-argumenter, "stasjoner" som er +kommaseparert liste over stasjons-IDer (numeriske), og "day" som bør +settes til "0" for å få ut informasjon om priser. Usikker på hva +day-tallet betyr, men mistenker det har med hvor langt tilbake i tid +det skal hentes ut informasjon.</p> + +<p>Resultatet som kommer tilbake er en kommaseparert liste for hver +enkelt stasjon, med &lt;br&gt; som skillemarkør mellom hver stasjon. +Ikke helt sikker på hva alle feltene er. Her er mine gjett:</p> + +<table> +<tr><ht>Felt</ht><ht>Beskrivelse</ht></tr> +<tr><td>1</td><td>Bensinstasjons-ID</td></tr> +<tr><td>2</td><td>Pris for blyfri 95 oktan, flyttall med punktum som desimalskille.</td></tr> +<tr><td>3</td><td>Klokkeslett da prisen ble oppdatert, format HH:MM. </td></tr> +<tr><td>4</td><td>Telefon-ID på formen Android-123456789012345 eller hex-kodet streng/MD5-sum</td></tr> +<tr><td>5</td><td>tall, uviss betydning. muligens relatert til day-verdien.</td></tr> +<tr><td>6</td><td>Pris for blyfri 98-oktan?</td></tr> +<tr><td>7</td><td>samme som felt 3</td></tr> +<tr><td>8</td><td>samme som felt 4</td></tr> +<tr><td>9</td><td>samme som felt 5</td></tr> +<tr><td>10</td><td>Pris for disel</td></tr> +<tr><td>11</td><td>Samme som felt 3</td></tr> +<tr><td>12</td><td>Samme som felt 4</td></tr> +<tr><td>13</td><td>Samme som felt 5</td></tr> +</table> + +<p>En stasjonsoppføring består dermed av av bensinstasjons-ID og +deretter tre blokker for 95-oktan bensin, 98-oktan bensin og +disel.</p> + +<p><b>PriserVedStasjon</b></p> + +<p><tt>echo 'id=736&day=0' | POST http://www.bitfactory.no/Bensin/ver1.1.PriserVedStasjon.php</tt></p> + +<p>Ser ut til å returnere informasjon for en enkelt bensinstasjon. +Formatet er dato på formen "08_12_2011" for 2011-12-08, og noe som ser +ut som samme format som fra PriserVedStasjoner. For stasjoner der +intet er registrert returnerer den "NO RESULTS".</p> + +<p><b>AllePriser</b></p> + +<p><tt>echo day=0 | POST http://www.bitfactory.no/Bensin/ver1.1.AllePriser.php</tt></p> + +<p>Returnere liste med av alle stasjoner det er registrert oppdaterte +priser på siste 24 timer (eller er det fra ca. midnatt dagen før?). +Returnerer "NO RESULTS" når listen er tom. Ellers returnerer den en +dato på formen "Thursday_09_12_2011" fulgt av &lt;br&gt; og deretter +en liste med stasjoner på samme format som PriserVedStasjoner.</p> + + +