]> pere.pagekite.me Git - homepage.git/blob - blog/Litt_informasjon_om_Bitfactors_Bensinpris_API.html
Generated.
[homepage.git] / blog / Litt_informasjon_om_Bitfactors_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 Bitfactors 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 Bitfactors Bensinpris-API</div>
22 <div class="date">28th May 2012</div>
23 <div class="body"><p>I fjor siden 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 Dagbladet</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=X43uP9KS_3ZqR | POST http://www.bitfactory.no/Bensin/GetXMLDatabase.php
73 <p><tt>echo password=XYZXYZXYZXYZX | POST http://www.bitfactory.no/Bensin/GetXMLDatabase.php
74
75 <p>Henter ned listen med stasjoner på XML-format. Argumentet er
76 password som muligens følger med i programpakken og eventuelt
77 genereres av app-en. Nedlasting med samme passord flere ganger ser
78 ikke ut til å fungere. Innholdet er ca. 1600 stasjoner, men manglet
79 bensinstasjonen i min hjemkommune Ballangen da jeg sjekket, så den er
80 ikke komplett. Formatet på selve listen ser slik ut (klippet):</p>
81
82 <pre>
83 &lt;?xml version="1.0" encoding="UTF-8"?&gt;
84 &lt;STASJONSDATABASE&gt;
85 &lt;STASJON&gt;
86 &lt;NAME&gt;&lt;/NAME&gt;
87 &lt;ADDRESS&gt;&lt;/ADDRESS&gt;
88 &lt;ID&gt;0&lt;/ID&gt;
89 &lt;LATITUDE&gt;0.000000&lt;/LATITUDE&gt;
90 &lt;LONGITUDE&gt;0.000000&lt;/LONGITUDE&gt;
91 &lt;COMPANY&gt;&lt;/COMPANY&gt;
92 &lt;/STASJON&gt;
93 &lt;STASJON&gt;
94 &lt;NAME&gt;Statoil Best Eidsvoll Verk&lt;/NAME&gt;
95 &lt;ADDRESS&gt;Gamle Trondheimsvei 339 2074 Eidsvoll Verk&lt;/ADDRESS&gt;
96 &lt;ID&gt;1&lt;/ID&gt;
97 &lt;LATITUDE&gt;60.303902&lt;/LATITUDE&gt;
98 &lt;LONGITUDE&gt;11.168100&lt;/LONGITUDE&gt;
99 &lt;COMPANY&gt;Best&lt;/COMPANY&gt;
100 &lt;/STASJON&gt;
101 [...]
102 &lt;STASJON&gt;
103 &lt;NAME&gt;Esso Andenes&lt;/NAME&gt;
104 &lt;ADDRESS&gt;Falcksgate 9, 8480 Andenes&lt;/ADDRESS&gt;
105 &lt;ID&gt;1822&lt;/ID&gt;
106 &lt;LATITUDE&gt;69.320999&lt;/LATITUDE&gt;
107 &lt;LONGITUDE&gt;16.118700&lt;/LONGITUDE&gt;
108 &lt;COMPANY&gt;Esso&lt;/COMPANY&gt;
109 &lt;/STASJON&gt;
110 &lt;/STASJONSDATABASE&gt;
111 </pre>
112
113 <p><b>GetBanStatus</b></p>
114
115 <p><tt>echo UDID=Android-123456789012345 | POST http://www.bitfactory.no/Bensin/ver1.1.GetBanStatus.php</tt></p>
116
117 <p>Vet heller ikke helt hva dette API-kallet gjør. Navnet gjør at jeg
118 tror den rapporterer om telefonen med UDID oppgitt som argument er
119 bannlyst fra tjenesten. Bannlysning gjør antagelig at telefonen ikke
120 kan brukes til å registrere bensinpriser, men det er også mulig det
121 blokkerer for å se på priser. Eneste POST-argument er UDID, som ser
122 ut til å være den unike ID-en til en mobil-enhet. Returnverdi er 'NO'
123 for alle UDID-verdier jeg har testet. Gjetter på at alternativ
124 returverdi er 'YES', men har ikke sett en slik verdi så langt.</p>
125
126 <p><b>PriserVedStasjoner</b></p>
127
128 <p><tt>echo 'stasjoner=810,364&day=0' | POST http://www.bitfactory.no/Bensin/ver1.1.PriserVedStasjoner.php</tt></p>
129
130 <p>Dette kallet henter ut priser registrert på en eller flere
131 bensinstasjoner. Den tar to POST-argumenter, "stasjoner" som er
132 kommaseparert liste over stasjons-IDer (numeriske), og "day" som bør
133 settes til "0" for å få ut informasjon om priser. Usikker på hva
134 day-tallet betyr, men mistenker det har med hvor langt tilbake i tid
135 det skal hentes ut informasjon.</p>
136
137 <p>Resultatet som kommer tilbake er en kommaseparert liste for hver
138 enkelt stasjon, med &lt;br&gt; som skillemarkør mellom hver stasjon.
139 Ikke helt sikker på hva alle feltene er. Her er mine gjett:</p>
140
141 <table>
142 <tr><ht>Felt</ht><ht>Beskrivelse</ht></tr>
143 <tr><td>1</td><td>Bensinstasjons-ID</td></tr>
144 <tr><td>2</td><td>Pris for blyfri 95 oktan, flyttall med punktum som desimalskille.</td></tr>
145 <tr><td>3</td><td>Klokkeslett da prisen ble oppdatert, format HH:MM. </td></tr>
146 <tr><td>4</td><td>Telefon-ID på formen Android-123456789012345 eller hex-kodet streng/MD5-sum</td></tr>
147 <tr><td>5</td><td>tall, uviss betydning. muligens relatert til day-verdien.</td></tr>
148 <tr><td>6</td><td>Pris for blyfri 98-oktan?</td></tr>
149 <tr><td>7</td><td>samme som felt 3</td></tr>
150 <tr><td>8</td><td>samme som felt 4</td></tr>
151 <tr><td>9</td><td>samme som felt 5</td></tr>
152 <tr><td>10</td><td>Pris for disel</td></tr>
153 <tr><td>11</td><td>Samme som felt 3</td></tr>
154 <tr><td>12</td><td>Samme som felt 4</td></tr>
155 <tr><td>13</td><td>Samme som felt 5</td></tr>
156 </table>
157
158 <p>En stasjonsoppføring består dermed av av bensinstasjons-ID og
159 deretter tre blokker for 95-oktan bensin, 98-oktan bensin og
160 disel.</p>
161
162 <p><b>PriserVedStasjon</b></p>
163
164 <p><tt>echo 'id=736&day=0' | POST http://www.bitfactory.no/Bensin/ver1.1.PriserVedStasjon.php</tt></p>
165
166 <p>Ser ut til å returnere informasjon for en enkelt bensinstasjon.
167 Formatet er dato på formen "08_12_2011" for 2011-12-08, og noe som ser
168 ut som samme format som fra PriserVedStasjoner. For stasjoner der
169 intet er registrert returnerer den "NO RESULTS".</p>
170
171 <p><b>AllePriser</b></p>
172
173 <p><tt>echo day=0 | POST http://www.bitfactory.no/Bensin/ver1.1.AllePriser.php</tt></p>
174
175 <p>Returnere liste med av alle stasjoner det er registrert oppdaterte
176 priser på siste 24 timer (eller er det fra ca. midnatt dagen før?).
177 Returnerer "NO RESULTS" når listen er tom. Ellers returnerer den en
178 dato på formen "Thursday_09_12_2011" fulgt av &lt;br&gt; og deretter
179 en liste med stasjoner på samme format som PriserVedStasjoner.</p>
180 </div>
181
182 <div class="tags">Tags: <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>.</div>
183
184
185 </div>
186
187
188
189
190 <div id="sidebar">
191
192
193
194 <h2>Archive</h2>
195 <ul>
196
197 <li>2012
198 <ul>
199
200 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/01/">January (7)</a></li>
201
202 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/02/">February (10)</a></li>
203
204 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/03/">March (17)</a></li>
205
206 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/04/">April (12)</a></li>
207
208 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/05/">May (9)</a></li>
209
210 </ul></li>
211
212 <li>2011
213 <ul>
214
215 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
216
217 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
218
219 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
220
221 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
222
223 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
224
225 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
226
227 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
228
229 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
230
231 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
232
233 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
234
235 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
236
237 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
238
239 </ul></li>
240
241 <li>2010
242 <ul>
243
244 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
245
246 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
247
248 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
249
250 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
251
252 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
253
254 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
255
256 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
257
258 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
259
260 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
261
262 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
263
264 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
265
266 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
267
268 </ul></li>
269
270 <li>2009
271 <ul>
272
273 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
274
275 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
276
277 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
278
279 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
280
281 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
282
283 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
284
285 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
286
287 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
288
289 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
290
291 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
292
293 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
294
295 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
296
297 </ul></li>
298
299 <li>2008
300 <ul>
301
302 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
303
304 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
305
306 </ul></li>
307
308 </ul>
309
310
311
312 <h2>Tags</h2>
313 <ul>
314
315 <li><a href="http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (13)</a></li>
316
317 <li><a href="http://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
318
319 <li><a href="http://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
320
321 <li><a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (2)</a></li>
322
323 <li><a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (12)</a></li>
324
325 <li><a href="http://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
326
327 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian">debian (54)</a></li>
328
329 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (102)</a></li>
330
331 <li><a href="http://people.skolelinux.org/pere/blog/tags/digistan">digistan (8)</a></li>
332
333 <li><a href="http://people.skolelinux.org/pere/blog/tags/english">english (129)</a></li>
334
335 <li><a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (15)</a></li>
336
337 <li><a href="http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (12)</a></li>
338
339 <li><a href="http://people.skolelinux.org/pere/blog/tags/intervju">intervju (26)</a></li>
340
341 <li><a href="http://people.skolelinux.org/pere/blog/tags/kart">kart (16)</a></li>
342
343 <li><a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap (8)</a></li>
344
345 <li><a href="http://people.skolelinux.org/pere/blog/tags/lenker">lenker (4)</a></li>
346
347 <li><a href="http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
348
349 <li><a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (16)</a></li>
350
351 <li><a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk (165)</a></li>
352
353 <li><a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug (127)</a></li>
354
355 <li><a href="http://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
356
357 <li><a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (24)</a></li>
358
359 <li><a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern (47)</a></li>
360
361 <li><a href="http://people.skolelinux.org/pere/blog/tags/raid">raid (1)</a></li>
362
363 <li><a href="http://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
364
365 <li><a href="http://people.skolelinux.org/pere/blog/tags/rfid">rfid (2)</a></li>
366
367 <li><a href="http://people.skolelinux.org/pere/blog/tags/robot">robot (4)</a></li>
368
369 <li><a href="http://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
370
371 <li><a href="http://people.skolelinux.org/pere/blog/tags/ruter">ruter (4)</a></li>
372
373 <li><a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (23)</a></li>
374
375 <li><a href="http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
376
377 <li><a href="http://people.skolelinux.org/pere/blog/tags/standard">standard (29)</a></li>
378
379 <li><a href="http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (1)</a></li>
380
381 <li><a href="http://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (4)</a></li>
382
383 <li><a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (9)</a></li>
384
385 <li><a href="http://people.skolelinux.org/pere/blog/tags/valg">valg (6)</a></li>
386
387 <li><a href="http://people.skolelinux.org/pere/blog/tags/video">video (25)</a></li>
388
389 <li><a href="http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (1)</a></li>
390
391 <li><a href="http://people.skolelinux.org/pere/blog/tags/web">web (19)</a></li>
392
393 </ul>
394
395
396 </div>
397 <p style="text-align: right">
398 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.4</a>
399 </p>
400
401 </body>
402 </html>