]> 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"> 9th December 2011</div>
23 <div class="body"><p>For noen måneder siden lanserte Bitfactory en
24 <a href="http://www.bitfactory.no/bensinpris.html">mobilapp for å få
25 tilgang til bensinpriser</a> på landets bensinstasjoner.
26 Informasjonen appens brukere har samlet inn har så langt kun vært
27 tilgjengelig for brukerne av app-ene, og API for å hente ut
28 informasjonen fra andre plattformer har ikke vært publisert. Da
29 løsningen kom spurte jeg utviklerne om de kunne publisere
30 API-dokumentasjon og de skulle se på saken, men det har ikke skjedd så
31 langt.</p>
32
33 <p>Utrolig nok er det i følge
34 <ahref="http://www.dn.no/energi/article2194526.ece">Dagens
35 Næringsliv</a> og
36 <ahref="http://www.finnmarkdagblad.no/nyheter/article5323140.ece">Finnmark
37 Dagbladet</a> bensinstasjoner som nekter å oppgi prisene sine på
38 telefon, slik at det ikke finnes en fornuftig måte å få tak i prisene
39 på uten å samle dem inn på stedet. Flere har dugnader på gang for å
40 samle inn prisinformasjon om bensin, men så vidt jeg kan se er det kun
41 <ahref="http://www.dinside.no/php/oko/bensin/vis_prisliste.php">dinside.no</a>
42 og Bitfactorys App som får regelmessige oppdateringer. Dinsides
43 oversikt er tilgjengelig på web for de som vil følge med, mens
44 bitfactorys informasjon er ikke enkelt tilgjengelig.<p>
45
46 <p>Jeg tok meg derfor litt tid for å revers-utvikle protokollen for
47 Bitfactorys mobilapp for å gjøre den innsamlede informasjonen
48 tilgjengelig for flere. Protokollen bruker HTTP og normal
49 forms-notasjon for POST. Her er API-kallene jeg har identifisert så
50 langt.</p>
51
52 <b>stasjonsDatabaseUpdateStamp</b>
53
54 <p><tt>GET http://www.bitfactory.no/Bensin/ver1.1.stasjonsDatabaseUpdateStamp</tt></p>
55
56 <p>Vet ikke helt hva dette API-kallet gjør, men navnet gjør at jeg
57 tror den rapporterer når listen over stasjoner sist ble endret.
58 Returverdien er et tall som pr. nå er 1319145491. Mitt gjett er at
59 dette er sekunder siden 1. januar 1970 som kan konverteres til en
60 leselig dato med <tt>perl -e 'print scalar(localtime(1319145491)),
61 "\n"'</tt>. Dagens verdi konverterer da til "Thu Oct 20 23:18:11
62 2011".</p>
63
64 <b>GetXMLDatabase</b>
65
66 <p><tt>echo password=X43uP9KS_3ZqR | POST http://www.bitfactory.no/Bensin/GetXMLDatabase.php
67
68 <p>Henter ned listen med stasjoner på XML-format. Argumentet er
69 password som muligens følger med i programpakken og eventuelt
70 genereres av app-en. Nedlasting med samme passord flere ganger ser
71 ikke ut til å fungere. Selve listen ser slik ut (klippet):</p>
72
73 <pre>
74 &lt;?xml version="1.0" encoding="UTF-8"?&gt;
75 &lt;STASJONSDATABASE&gt;
76 &lt;STASJON&gt;
77 &lt;NAME&gt;&lt;/NAME&gt;
78 &lt;ADDRESS&gt;&lt;/ADDRESS&gt;
79 &lt;ID&gt;0&lt;/ID&gt;
80 &lt;LATITUDE&gt;0.000000&lt;/LATITUDE&gt;
81 &lt;LONGITUDE&gt;0.000000&lt;/LONGITUDE&gt;
82 &lt;COMPANY&gt;&lt;/COMPANY&gt;
83 &lt;/STASJON&gt;
84 &lt;STASJON&gt;
85 &lt;NAME&gt;Statoil Best Eidsvoll Verk&lt;/NAME&gt;
86 &lt;ADDRESS&gt;Gamle Trondheimsvei 339 2074 Eidsvoll Verk&lt;/ADDRESS&gt;
87 &lt;ID&gt;1&lt;/ID&gt;
88 &lt;LATITUDE&gt;60.303902&lt;/LATITUDE&gt;
89 &lt;LONGITUDE&gt;11.168100&lt;/LONGITUDE&gt;
90 &lt;COMPANY&gt;Best&lt;/COMPANY&gt;
91 &lt;/STASJON&gt;
92 [...]
93 &lt;STASJON&gt;
94 &lt;NAME&gt;Esso Andenes&lt;/NAME&gt;
95 &lt;ADDRESS&gt;Falcksgate 9, 8480 Andenes&lt;/ADDRESS&gt;
96 &lt;ID&gt;1822&lt;/ID&gt;
97 &lt;LATITUDE&gt;69.320999&lt;/LATITUDE&gt;
98 &lt;LONGITUDE&gt;16.118700&lt;/LONGITUDE&gt;
99 &lt;COMPANY&gt;Esso&lt;/COMPANY&gt;
100 &lt;/STASJON&gt;
101 &lt;/STASJONSDATABASE&gt;
102 </pre>
103
104 <b>GetBanStatus</b>
105
106 <p><tt>echo UDID=Android-123456789012345 | POST http://www.bitfactory.no/Bensin/ver1.1.GetBanStatus.php</tt></p>
107
108 <p>Vet heller ikke helt hva dette API-kallet gjør. Navnet gjør at jeg
109 tror den rapporterer om telefonen med UDID oppgitt som argument er
110 bannlyst fra tjenesten. Bannlysning gjør antagelig at telefonen ikke
111 kan brukes til å registrere bensinpriser, men det er også mulig det
112 blokkerer for å se på priser. Eneste POST-argument er UDID, som ser
113 ut til å være den unike ID-en til en mobil-enhet. Returnverdi er 'NO'
114 for alle UDID-verdier jeg har testet. Gjetter på at alternativ
115 returverdi er 'YES', men har ikke sett en slik verdi så langt.</p>
116
117 <b>PriserVedStasjoner</b>
118
119 <p><tt>echo 'stasjoner=810,364&day=0' | POST http://www.bitfactory.no/Bensin/ver1.1.PriserVedStasjoner.php</tt></p>
120
121 <p>Dette kallet henter ut priser registrert på en eller flere
122 bensinstasjoner. Den tar to POST-argumenter, "stasjoner" som er
123 kommaseparert liste over stasjons-IDer (numeriske), og "day" som bør
124 settes til "0" for å få ut informasjon om priser. Usikker på hva
125 tallet betyr, men mistenker det har med hvor langt tilbake i tid det
126 skal hentes ut informasjon.</p>
127
128 <p>Resultatet som kommer tilbake er en kommaseparert liste for hver
129 enkelt stasjon, med &lt;br&gt; som skillemarkør mellom hver stasjon.
130 Ikke helt sikker på hva alle feltene er. Her er mine gjett:</p>
131
132 <table>
133 <tr><ht>Felt</ht><ht>Beskrivelse</ht></tr>
134 <tr><td>1</td><td>Bensinstasjons-ID</td></tr>
135 <tr><td>2</td><td>Pris for blyfri 95 oktan, flyttall med punktum som desimalskille.</td></tr>
136 <tr><td>3</td><td>Klokkeslett da prisen ble oppdatert, format HH:MM. </td></tr>
137 <tr><td>4</td><td>Telefon-ID på formen Android-123456789012345 eller hex-kodet streng/MD5-sum</td></tr>
138 <tr><td>5</td><td>tall, uviss betydning. muligens relatert til day-verdien.</td></tr>
139 <tr><td>6</td><td>Pris for blyfri 98-oktan?</td></tr>
140 <tr><td>7</td><td>samme som felt 3</td></tr>
141 <tr><td>8</td><td>samme som felt 4</td></tr>
142 <tr><td>9</td><td>samme som felt 5</td></tr>
143 <tr><td>10</td><td>Pris for disel</td></tr>
144 <tr><td>11</td><td>Samme som felt 3</td></tr>
145 <tr><td>12</td><td>Samme som felt 4</td></tr>
146 <tr><td>13</td><td>Samme som felt 5</td></tr>
147 </table>
148
149 <p>En stasjonsoppføring består dermed av av bensinstasjons-ID og
150 deretter tre blokker for 95-oktan bensin, 98-oktan bensin og
151 disel.</p>
152
153 <b>PriserVedStasjon</b>
154
155 <p><tt>echo 'id=736&day=0' | POST http://www.bitfactory.no/Bensin/ver1.1.PriserVedStasjon.php</tt></p>
156
157 <p>Ser ut til å returnere informasjon for en enkelt bensinstasjon.
158 Formatet er dato på formen "08_12_2011" for 2011-12-08, og noe som ser
159 ut som samme format som fra PriserVedStasjoner. For stasjoner der
160 intet er registrert returnerer den "NO RESULTS".</p>
161
162 <b>AllePriser</b>
163
164 <p><tt>echo day=0 | POST http://www.bitfactory.no/Bensin/ver1.1.AllePriser.php</tt></p>
165
166 <p>Returnere liste med av alle stasjoner det er registrert oppdaterte
167 priser på siste 24 timer. Returnerer "NO RESULTS" når listen er tom.
168 Ellers returnerer den en dato på formen "Thursday_08_12_2011" skilt
169 med &lt;br&gt; og deretter en liste med stasjoner på samme format som
170 PriserVedStasjoner.</p>
171
172 <!--
173
174 Ide til SQL-skjema for å ta vare på informasjonen.
175 CREATE TABLE station (
176 integer id,
177 text name,
178 text group,
179 text address,
180 text homepageurl,
181 gpscoord location,
182 );
183
184 CREATE TABLE types (
185 INTEGER id,
186 INTEGER name,
187 );
188
189 CREATE TABLE pris (
190 INTEGER station_id REFERENCES station(id),
191 INTEGER type,
192 DATETIME when_collected,
193 FLOAT price,
194 )
195
196 INSERT INTO types (id, name) VALUES (1, 'Blyfri95');
197 INSERT INTO types (id, name) VALUES (2, 'Disel');
198 -->
199 </div>
200
201 <div class="tags">Tags: <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>.</div>
202
203
204 </div>
205
206
207
208
209 <div id="sidebar">
210
211
212
213 <h2>Archive</h2>
214 <ul>
215
216 <li>2011
217 <ul>
218
219 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
220
221 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
222
223 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
224
225 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
226
227 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
228
229 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
230
231 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
232
233 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
234
235 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
236
237 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
238
239 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
240
241 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
242
243 </ul></li>
244
245 <li>2010
246 <ul>
247
248 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
249
250 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
251
252 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
253
254 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
255
256 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
257
258 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
259
260 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
261
262 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
263
264 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
265
266 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
267
268 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
269
270 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
271
272 </ul></li>
273
274 <li>2009
275 <ul>
276
277 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
278
279 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
280
281 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
282
283 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
284
285 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
286
287 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
288
289 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
290
291 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
292
293 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
294
295 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
296
297 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
298
299 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
300
301 </ul></li>
302
303 <li>2008
304 <ul>
305
306 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
307
308 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
309
310 </ul></li>
311
312 </ul>
313
314
315
316 <h2>Tags</h2>
317 <ul>
318
319 <li><a href="http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (13)</a></li>
320
321 <li><a href="http://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
322
323 <li><a href="http://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
324
325 <li><a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (2)</a></li>
326
327 <li><a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (12)</a></li>
328
329 <li><a href="http://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
330
331 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian">debian (54)</a></li>
332
333 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (63)</a></li>
334
335 <li><a href="http://people.skolelinux.org/pere/blog/tags/digistan">digistan (7)</a></li>
336
337 <li><a href="http://people.skolelinux.org/pere/blog/tags/english">english (98)</a></li>
338
339 <li><a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (13)</a></li>
340
341 <li><a href="http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (12)</a></li>
342
343 <li><a href="http://people.skolelinux.org/pere/blog/tags/intervju">intervju (10)</a></li>
344
345 <li><a href="http://people.skolelinux.org/pere/blog/tags/kart">kart (15)</a></li>
346
347 <li><a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap (8)</a></li>
348
349 <li><a href="http://people.skolelinux.org/pere/blog/tags/lenker">lenker (4)</a></li>
350
351 <li><a href="http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
352
353 <li><a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (14)</a></li>
354
355 <li><a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk (141)</a></li>
356
357 <li><a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug (119)</a></li>
358
359 <li><a href="http://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
360
361 <li><a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (24)</a></li>
362
363 <li><a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern (46)</a></li>
364
365 <li><a href="http://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
366
367 <li><a href="http://people.skolelinux.org/pere/blog/tags/rfid">rfid (2)</a></li>
368
369 <li><a href="http://people.skolelinux.org/pere/blog/tags/robot">robot (4)</a></li>
370
371 <li><a href="http://people.skolelinux.org/pere/blog/tags/rss">rss (1)</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 (3)</a></li>
376
377 <li><a href="http://people.skolelinux.org/pere/blog/tags/standard">standard (24)</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 (2)</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 (22)</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 (17)</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>