]> pere.pagekite.me Git - homepage.git/blob - blog/Litt_informasjon_om_Bitfactorys_Bensinpris_API.html
New post.
[homepage.git] / blog / Litt_informasjon_om_Bitfactorys_Bensinpris_API.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
4 <head>
5 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
6 <title>Petter Reinholdtsen: Litt informasjon om Bitfactorys Bensinpris-API</title>
7 <link rel="stylesheet" type="text/css" media="screen" href="http://people.skolelinux.org/pere/blog/style.css" />
8 <link rel="stylesheet" type="text/css" media="screen" href="http://people.skolelinux.org/pere/blog/vim.css" />
9 </head>
10 <body>
11 <div class="title">
12 <h1>
13 <a href="http://people.skolelinux.org/pere/blog/">Petter Reinholdtsen</a>
14
15 </h1>
16
17 </div>
18
19
20 <div class="entry">
21 <div class="title">Litt informasjon om Bitfactorys Bensinpris-API</div>
22 <div class="date">28th May 2012</div>
23 <div class="body"><p>I fjor lanserte Bitfactory en
24 <a href="http://www.bitfactory.no/bensinpris.html">mobilapp for å få
25 tilgang til bensinpriser</a> på landets bensinstasjoner ved å samle
26 inn prisene på dugnad ved hjelp av mobilapp-ens brukere.
27 Informasjonen app-ens brukere har samlet inn har så langt kun vært
28 tilgjengelig for brukerne av app-ene, og API for å hente ut
29 informasjonen fra andre plattformer har ikke vært publisert. Da
30 løsningen kom spurte jeg utviklerne om de kunne publisere
31 API-dokumentasjon og de skulle se på saken, men det har ikke skjedd så
32 langt. Jeg antar de har vært for travelt opptatt til å publisere
33 API-dokumentasjon.</p>
34
35 <p>Utrolig nok er det i følge
36 <a href="http://www.dn.no/energi/article2194526.ece">Dagens
37 Næringsliv</a> og
38 <a href="http://www.finnmarkdagblad.no/nyheter/article5323140.ece">Finnmark
39 Dagblad</a> bensinstasjoner som nekter å oppgi prisene sine på
40 telefon, slik at det ikke finnes en fornuftig måte å få tak i prisene
41 på uten å samle dem inn på stedet. Flere har dugnader på gang for å
42 samle inn prisinformasjon om bensin, men så vidt jeg kan se er det kun
43 <a href="http://www.dinside.no/php/oko/bensin/vis_prisliste.php">dinside.no</a>
44 og Bitfactorys App som får regelmessige oppdateringer. Dinsides
45 oversikt er tilgjengelig på web for de som vil følge med, mens
46 bitfactorys informasjon ikke er like enkelt tilgjengelig.<p>
47
48 <p>Jeg tok meg derfor litt tid for å revers-utvikle protokollen for
49 Bitfactorys mobilapp for å gjøre den innsamlede informasjonen mer
50 tilgjengelig for flere. Protokollen bruker HTTP og normal
51 forms-notasjon for POST. Jeg lot en telefon koble seg til mitt
52 trådløsnett, og satte opp tcpdump til å samle all trafikken mot
53 www.bitfactory.no, og deretter tittet på alle HTTP-kallene ved hjelp
54 av wireshark. Her er API-kallene jeg har identifisert så langt.</p>
55
56 <p><b>stasjonsDatabaseUpdateStamp</b></p>
57
58 <p><tt>GET http://www.bitfactory.no/Bensin/ver1.1.stasjonsDatabaseUpdateStamp</tt></p>
59
60 <p>Vet ikke helt hva dette API-kallet gjør, men navnet gjør at jeg
61 tror den rapporterer når listen over stasjoner sist ble endret.
62 Returverdien er et tall som pr. 2011-12-09 er 1319145491 og
63 pr. 2012-05-28 er 1336420693. Mitt gjett er at dette er sekunder
64 siden 1. januar 1970 ala det en finner på Linux, som kan konverteres
65 til en leselig dato med <tt>perl -e 'print
66 scalar(localtime(1319145491)), "\n"'</tt>. Den første verdien
67 konverterer da til "Thu Oct 20 23:18:11 2011", mens den andre
68 konverteres til "Mon May 7 21:58:13 2012".</p>
69
70 <p><b>GetXMLDatabase</b></p>
71
72 <p><tt>echo password=XYZXYZXYZXYZX | POST http://www.bitfactory.no/Bensin/GetXMLDatabase.php</tt></p>
73
74 <p>Henter ned listen med stasjoner på XML-format. Argumentet er
75 password som muligens følger med i programpakken og eventuelt
76 genereres av app-en. Nedlasting med samme passord flere ganger ser
77 ikke ut til å fungere. Innholdet er ca. 1600 stasjoner, men manglet
78 bensinstasjonen i min hjemkommune Ballangen da jeg sjekket, så den er
79 ikke komplett. Formatet på selve listen ser slik ut (klippet):</p>
80
81 <p><pre>
82 &lt;?xml version="1.0" encoding="UTF-8"?&gt;
83 &lt;STASJONSDATABASE&gt;
84 &lt;STASJON&gt;
85 &lt;NAME&gt;&lt;/NAME&gt;
86 &lt;ADDRESS&gt;&lt;/ADDRESS&gt;
87 &lt;ID&gt;0&lt;/ID&gt;
88 &lt;LATITUDE&gt;0.000000&lt;/LATITUDE&gt;
89 &lt;LONGITUDE&gt;0.000000&lt;/LONGITUDE&gt;
90 &lt;COMPANY&gt;&lt;/COMPANY&gt;
91 &lt;/STASJON&gt;
92 &lt;STASJON&gt;
93 &lt;NAME&gt;Statoil Best Eidsvoll Verk&lt;/NAME&gt;
94 &lt;ADDRESS&gt;Gamle Trondheimsvei 339 2074 Eidsvoll Verk&lt;/ADDRESS&gt;
95 &lt;ID&gt;1&lt;/ID&gt;
96 &lt;LATITUDE&gt;60.303902&lt;/LATITUDE&gt;
97 &lt;LONGITUDE&gt;11.168100&lt;/LONGITUDE&gt;
98 &lt;COMPANY&gt;Best&lt;/COMPANY&gt;
99 &lt;/STASJON&gt;
100 [...]
101 &lt;STASJON&gt;
102 &lt;NAME&gt;Esso Andenes&lt;/NAME&gt;
103 &lt;ADDRESS&gt;Falcksgate 9, 8480 Andenes&lt;/ADDRESS&gt;
104 &lt;ID&gt;1822&lt;/ID&gt;
105 &lt;LATITUDE&gt;69.320999&lt;/LATITUDE&gt;
106 &lt;LONGITUDE&gt;16.118700&lt;/LONGITUDE&gt;
107 &lt;COMPANY&gt;Esso&lt;/COMPANY&gt;
108 &lt;/STASJON&gt;
109 &lt;/STASJONSDATABASE&gt;
110 </pre></p>
111
112 <p><b>GetBanStatus</b></p>
113
114 <p><tt>echo UDID=Android-123456789012345 | POST http://www.bitfactory.no/Bensin/ver1.1.GetBanStatus.php</tt></p>
115
116 <p>Vet heller ikke helt hva dette API-kallet gjør. Navnet gjør at jeg
117 tror den rapporterer om telefonen med UDID oppgitt som argument er
118 bannlyst fra tjenesten. Bannlysning gjør antagelig at telefonen ikke
119 kan brukes til å registrere bensinpriser, men det er også mulig det
120 blokkerer for å se på priser. Eneste POST-argument er UDID, som ser
121 ut til å være den unike ID-en til en mobil-enhet. Returnverdi er 'NO'
122 for alle UDID-verdier jeg har testet. Gjetter på at alternativ
123 returverdi er 'YES', men har ikke sett en slik verdi så langt.</p>
124
125 <p><b>PriserVedStasjoner</b></p>
126
127 <p><tt>echo 'stasjoner=810,364&day=0' | POST http://www.bitfactory.no/Bensin/ver1.1.PriserVedStasjoner.php</tt></p>
128
129 <p>Dette kallet henter ut priser registrert på en eller flere
130 bensinstasjoner. Den tar to POST-argumenter, "stasjoner" som er
131 kommaseparert liste over stasjons-IDer (numeriske), og "day" som bør
132 settes til "0" for å få ut informasjon om priser. Usikker på hva
133 day-tallet betyr, men mistenker det har med hvor langt tilbake i tid
134 det skal hentes ut informasjon.</p>
135
136 <p>Resultatet som kommer tilbake er en kommaseparert liste for hver
137 enkelt stasjon, med &lt;br&gt; som skillemarkør mellom hver stasjon.
138 Ikke helt sikker på hva alle feltene er. Her er mine gjett:</p>
139
140 <p><table>
141 <tr><ht>Felt</ht><ht>Beskrivelse</ht></tr>
142 <tr><td>1</td><td>Bensinstasjons-ID</td></tr>
143 <tr><td>2</td><td>Pris for blyfri 95 oktan, flyttall med punktum som desimalskille.</td></tr>
144 <tr><td>3</td><td>Klokkeslett da prisen ble oppdatert, format HH:MM. </td></tr>
145 <tr><td>4</td><td>Telefon-ID på formen Android-123456789012345 eller hex-kodet streng/MD5-sum</td></tr>
146 <tr><td>5</td><td>tall, uviss betydning. muligens relatert til day-verdien. <b>Oppdatering 2012-06-02: Denne verdien er antall bekreftelser en gitt pris har fått.</td></tr>
147 <tr><td>6</td><td>Pris for blyfri 98-oktan?</td></tr>
148 <tr><td>7</td><td>samme som felt 3</td></tr>
149 <tr><td>8</td><td>samme som felt 4</td></tr>
150 <tr><td>9</td><td>samme som felt 5</td></tr>
151 <tr><td>10</td><td>Pris for disel</td></tr>
152 <tr><td>11</td><td>Samme som felt 3</td></tr>
153 <tr><td>12</td><td>Samme som felt 4</td></tr>
154 <tr><td>13</td><td>Samme som felt 5</td></tr>
155 </table></p>
156
157 <p>En stasjonsoppføring består dermed av av bensinstasjons-ID og
158 deretter tre blokker for 95-oktan bensin, 98-oktan bensin og
159 disel.</p>
160
161 <p><b>PriserVedStasjon</b></p>
162
163 <p><tt>echo 'id=736&day=0' | POST http://www.bitfactory.no/Bensin/ver1.1.PriserVedStasjon.php</tt></p>
164
165 <p>Ser ut til å returnere informasjon for en enkelt bensinstasjon.
166 Formatet er dato på formen "08_12_2011" for 2011-12-08, og noe som ser
167 ut som samme format som fra PriserVedStasjoner. For stasjoner der
168 intet er registrert returnerer den "NO RESULTS".</p>
169
170 <p><b>AllePriser</b></p>
171
172 <p><tt>echo day=0 | POST http://www.bitfactory.no/Bensin/ver1.1.AllePriser.php</tt></p>
173
174 <p>Returnere liste med av alle stasjoner det er registrert oppdaterte
175 priser på siste 24 timer (eller er det fra ca. midnatt dagen før?).
176 Returnerer "NO RESULTS" når listen er tom. Ellers returnerer den en
177 dato på formen "Thursday_09_12_2011" fulgt av &lt;br&gt; og deretter
178 en liste med stasjoner på samme format som PriserVedStasjoner.</p>
179 </div>
180
181 <div class="tags">Tags: <a href="http://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser</a>, <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>.</div>
182
183
184 </div>
185
186
187
188
189 <div id="sidebar">
190
191
192
193 <h2>Archive</h2>
194 <ul>
195
196 <li>2012
197 <ul>
198
199 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/01/">January (7)</a></li>
200
201 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/02/">February (10)</a></li>
202
203 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/03/">March (17)</a></li>
204
205 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/04/">April (12)</a></li>
206
207 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/05/">May (12)</a></li>
208
209 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/06/">June (20)</a></li>
210
211 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/07/">July (16)</a></li>
212
213 </ul></li>
214
215 <li>2011
216 <ul>
217
218 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
219
220 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
221
222 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
223
224 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
225
226 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
227
228 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
229
230 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
231
232 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
233
234 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
235
236 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
237
238 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
239
240 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
241
242 </ul></li>
243
244 <li>2010
245 <ul>
246
247 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
248
249 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
250
251 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
252
253 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
254
255 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
256
257 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
258
259 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
260
261 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
262
263 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
264
265 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
266
267 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
268
269 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
270
271 </ul></li>
272
273 <li>2009
274 <ul>
275
276 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
277
278 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
279
280 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
281
282 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
283
284 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
285
286 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
287
288 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
289
290 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
291
292 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
293
294 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
295
296 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
297
298 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
299
300 </ul></li>
301
302 <li>2008
303 <ul>
304
305 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
306
307 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
308
309 </ul></li>
310
311 </ul>
312
313
314
315 <h2>Tags</h2>
316 <ul>
317
318 <li><a href="http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (13)</a></li>
319
320 <li><a href="http://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
321
322 <li><a href="http://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
323
324 <li><a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (2)</a></li>
325
326 <li><a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (12)</a></li>
327
328 <li><a href="http://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
329
330 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian">debian (55)</a></li>
331
332 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (110)</a></li>
333
334 <li><a href="http://people.skolelinux.org/pere/blog/tags/digistan">digistan (9)</a></li>
335
336 <li><a href="http://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
337
338 <li><a href="http://people.skolelinux.org/pere/blog/tags/english">english (143)</a></li>
339
340 <li><a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (17)</a></li>
341
342 <li><a href="http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (12)</a></li>
343
344 <li><a href="http://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (6)</a></li>
345
346 <li><a href="http://people.skolelinux.org/pere/blog/tags/intervju">intervju (30)</a></li>
347
348 <li><a href="http://people.skolelinux.org/pere/blog/tags/kart">kart (16)</a></li>
349
350 <li><a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap (8)</a></li>
351
352 <li><a href="http://people.skolelinux.org/pere/blog/tags/lenker">lenker (4)</a></li>
353
354 <li><a href="http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
355
356 <li><a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (22)</a></li>
357
358 <li><a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk (190)</a></li>
359
360 <li><a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug (142)</a></li>
361
362 <li><a href="http://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (4)</a></li>
363
364 <li><a href="http://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
365
366 <li><a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (34)</a></li>
367
368 <li><a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern (48)</a></li>
369
370 <li><a href="http://people.skolelinux.org/pere/blog/tags/raid">raid (1)</a></li>
371
372 <li><a href="http://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
373
374 <li><a href="http://people.skolelinux.org/pere/blog/tags/rfid">rfid (2)</a></li>
375
376 <li><a href="http://people.skolelinux.org/pere/blog/tags/robot">robot (4)</a></li>
377
378 <li><a href="http://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
379
380 <li><a href="http://people.skolelinux.org/pere/blog/tags/ruter">ruter (4)</a></li>
381
382 <li><a href="http://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
383
384 <li><a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (23)</a></li>
385
386 <li><a href="http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
387
388 <li><a href="http://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (1)</a></li>
389
390 <li><a href="http://people.skolelinux.org/pere/blog/tags/standard">standard (36)</a></li>
391
392 <li><a href="http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (1)</a></li>
393
394 <li><a href="http://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (4)</a></li>
395
396 <li><a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (10)</a></li>
397
398 <li><a href="http://people.skolelinux.org/pere/blog/tags/valg">valg (6)</a></li>
399
400 <li><a href="http://people.skolelinux.org/pere/blog/tags/video">video (32)</a></li>
401
402 <li><a href="http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (1)</a></li>
403
404 <li><a href="http://people.skolelinux.org/pere/blog/tags/web">web (25)</a></li>
405
406 </ul>
407
408
409 </div>
410 <p style="text-align: right">
411 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.4</a>
412 </p>
413
414 </body>
415 </html>