Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  34 3522
Heisann. Ønsker å hente ut data fra trafikanten, da dem ikke har en XML som jeg kan parse blir jeg nødt til å bruke JSON. Problemet ligger i at jeg aner hvordan jeg skal gjøre forespørseler til Trafikaten med JSON. Har URLen til nettsiden som jeg skal gjøre forespørseler mot. Problemet er oppsettet, hvordan skal jeg gjør denne forespørselen? Nettsiden til trafikanten er litt til hjelp, men ikke mye

Hvordan bruke JSON - Trafikaten

Noen som kunne hjulpet meg, vennligst ikke kom med "google it" o.l for det har jeg allerede gjort.
<?php echo 'VIF'; ?>
datagutten's Avatar
Jeg har drevet litt med det selv, og det er vanskelig å finne frem der.
Du må prøve å gjette deg til hva du trenger utifra eksemplene på siden du linker til.
Er det noe konkret du er ute etter kan jeg prøve å finne riktig adresse.
Trådstarter
Ønsker å hente stoppestedet visperud til Oslo bussterminal Lenken til trafikaten er:

Trafikanten.no
Sitat av Opous Vis innlegg
Problemet ligger i at jeg aner hvordan jeg skal gjøre forespørseler til Trafikaten med JSON. Har URLen til nettsiden som jeg skal gjøre forespørseler mot. Problemet er oppsettet, hvordan skal jeg gjør denne forespørselen? Nettsiden til trafikanten er litt til hjelp, men ikke mye
Vis hele sitatet...
Du gjør ikke forespørsler med JSON, JSON er formatet du får tilbake. Fremgangsmåten for å hente data vil derfor være lik hva den ville vært om du skulle hentet XML (det er hvordan du behandler dataene når du har mottatt de som er forskjellen).

Utifra det lille de har av info på nettsidene sine så vil jeg anta det fungerer å sende en GET-request til http://<whatever url-en til trafikanten sitt API er>/RealTime/FindMatches/Visperud så vil du få data tilbake
<?php echo 'VIF'; ?>
datagutten's Avatar
For å finne en reiserute må du først finne id på holdeplassene. Det gjør du med Place/FindMatches:

Kode

/Place/FindMatches/Visperud (i Solheimvn)
Når du id på begge holdeplassene kan du spørre etter reiserute, ditt tilfelle blir det:

Kode

/Travel/GetTravelsAfter?time=130320122016&from=2300500&to=3010619
Trådstarter
Takk for det! Tester dette i nettleseren og får tilbake rådata, som jeg kan jobbe videre med! Men det virker ikke som jeg får tilbake når neste buss går, altså klokkeslettet?
<?php echo 'VIF'; ?>
datagutten's Avatar
Det er et felt som heter DepartureTime hvor tidspunktet er oppgitt som mikrosekunder siden 1.1.1970 (måtte sjekke et par ganger at jeg hadde lest riktig når jeg først så det).
Trådstarter
Ja, det var en flott måte å presentere det på! Hvordan i alle dager skal jeg komme frem til et klokkeslett, f.eks "14:35 i dag"?
Sitat av Opous Vis innlegg
Ja, det var en flott måte å presentere det på! Hvordan i alle dager skal jeg komme frem til et klokkeslett, f.eks "14:35 i dag"?
Vis hele sitatet...
Du kan bruke javascripts date objekt

new Date(milliseconds) //milliseconds since 1970/01/01
http://www.w3schools.com/jsref/jsref_obj_date.asp
Sist endret av Dominic; 13. mars 2012 kl. 22:05.
Kult! dette hadde vært snasent å ha på veggen ved siden av ytterdøra!
Har en gammel mobiltelefon som såvidt kan vise nettsider og koble til wifi...
Om jeg skrur den opp på veggen, med en permanent løsning for strøm, har jeg en fin liten samtidsinformasjons-box som viser når neste transport går mot byen!

Det forutsetter at dette er mulig å gjennomføre, selvsagt.
med fruktkjøtt.
Tias's Avatar
Crew
Sitat av datagutten Vis innlegg
Det er et felt som heter DepartureTime hvor tidspunktet er oppgitt som mikrosekunder siden 1.1.1970 (måtte sjekke et par ganger at jeg hadde lest riktig når jeg først så det).
Vis hele sitatet...
Er du sikker på at du leste riktig? labs.trafikanten.no sier "Tidsangivelse: millisekunder siden unix-epoch (1970)". Det er to veldig forskjellige ting.

Sitat av Opous Vis innlegg
Ja, det var en flott måte å presentere det på!
Vis hele sitatet...
Hvis millisekunder (mikrosekunder?) siden 1970 er så kjipt, hvordan ville du ha gjort det?
Sitat av frankthetank Vis innlegg
Hvis millisekunder (mikrosekunder?) siden 1970 er så kjipt, hvordan ville du ha gjort det?
Vis hele sitatet...
Sekunder slik mesteparten av verden gjør det, hadde nok vært en god start.
Trådstarter
Sitat av Turbolego Vis innlegg
Kult! dette hadde vært snasent å ha på veggen ved siden av ytterdøra!
Har en gammel mobiltelefon som såvidt kan vise nettsider og koble til wifi...
Om jeg skrur den opp på veggen, med en permanent løsning for strøm, har jeg en fin liten samtidsinformasjons-box som viser når neste transport går mot byen!

Det forutsetter at dette er mulig å gjennomføre, selvsagt.
Vis hele sitatet...
Akkurat dette jeg har tenkt! Har meldt interesse for Raspberry PI og kjører denne "tjenesten" opp i gangen
med fruktkjøtt.
Tias's Avatar
Crew
Sitat av fuzzy76 Vis innlegg
Sekunder slik mesteparten av verden gjør det, hadde nok vært en god start.
Vis hele sitatet...
Å konvertere mellom millisekunder og sekunder er en triviell sak. Det som er interessant her er hvordan man skal representere tid, ikke hvilken granularitet som brukes.
Sitat av Opous Vis innlegg
Akkurat dette jeg har tenkt! Har meldt interesse for Raspberry PI og kjører denne "tjenesten" opp i gangen
Vis hele sitatet...
*highfive*

sweet! Kunne du delt kildekode med oss når/hvis då får dette til?

btw.om jeg var deg, hadde jeg prøvd å sende teksten videre til en LED-matrix slik som denne: link til led-matrix
blir som å ha holdeplassen i gangen!
Sist endret av Turbolego; 14. mars 2012 kl. 10:21.
Trådstarter
Sitat av Turbolego Vis innlegg
*highfive*

sweet! Kunne du delt kildekode med oss når/hvis då får dette til?

btw.om jeg var deg, hadde jeg prøvd å sende teksten videre til en LED-matrix slik som denne: link til led-matrix
blir som å ha holdeplassen i gangen!
Vis hele sitatet...
Kan selvfølgelig dele kildekoden, men blir dog et hobbyprosjekt, så jeg vet ikke når jeg blir ferdig. Har tenkt å ha innhold som data fra yr og RSS fra nettaviser
Sitat av Turbolego Vis innlegg
Kult! dette hadde vært snasent å ha på veggen ved siden av ytterdøra!
Har en gammel mobiltelefon som såvidt kan vise nettsider og koble til wifi...
Om jeg skrur den opp på veggen, med en permanent løsning for strøm, har jeg en fin liten samtidsinformasjons-box som viser når neste transport går mot byen!

Det forutsetter at dette er mulig å gjennomføre, selvsagt.
Vis hele sitatet...
Jeg har vurdert det samme. Men siden de ikke har et åpen API(?) har jeg ikke tatt meg bryet med å lage en løsning.
Trådstarter
Sitat av tore- Vis innlegg
Jeg har vurdert det samme. Men siden de ikke har et åpen API(?) har jeg ikke tatt meg bryet med å lage en løsning.
Vis hele sitatet...
Må sende dem en mail for å få tak i URLen du kan sende forespørsler mot.

LINK
Sitat av Opous Vis innlegg
Må sende dem en mail for å få tak i URLen du kan sende forespørsler mot.

LINK
Vis hele sitatet...
Forespørsel sendt! Takk for info
<?php echo 'VIF'; ?>
datagutten's Avatar
Sitat av frankthetank Vis innlegg
Er du sikker på at du leste riktig? labs.trafikanten.no sier "Tidsangivelse: millisekunder siden unix-epoch (1970)". Det er to veldig forskjellige ting.
Vis hele sitatet...
Du har rett. Gikk litt fort når jeg skrev posten. Skulle vært millisekunder.

Sitat av Opous Vis innlegg
Akkurat dette jeg har tenkt! Har meldt interesse for Raspberry PI og kjører denne "tjenesten" opp i gangen
Vis hele sitatet...
Høres moro ut. Hvordan har du tenkt å gjøre det med skjerm?
Sist endret av datagutten; 15. mars 2012 kl. 19:50.
Trådstarter
Sitat av datagutten Vis innlegg
Høres moro ut. Hvordan har du tenkt å gjøre det med skjerm?
Vis hele sitatet...
Raspberry PI har en HDMI utgang, så tenker å kjøpe en 20" skjerm, kanskje mindre og henge den på veggen, over "telefonbordet".

Hadde vært kult hvis noen hadde kunne fått til å hente tidspunkter fra trafikanten og delt kildekoden. Har aldri vært borti JS, jQuery eller JSON, men prøver selvfølgelig. "Forum-samarbeidsprosjekt anyone?"
<?php echo 'VIF'; ?>
datagutten's Avatar
Laget en liten sak nå som viser sanntid:
http://host.datagutten.net/trafikant...eplass=2300500
Tallene bakerst i adressen er id for en holdeplass. Det er også mulig å skrive navnet på en holdeplass, men foreløpig fungerer det bare for navn uten parenteser.
Kildekode:

Kode

<?Php
$url='http://api';
if(!isset($_GET['holdeplass']))
	die('Navn eller id på holdeplass må oppgis');
$holdeplass=$_GET['holdeplass'];
function cleandate($date) //Gjør om datofelt til unix timestamp
{
return substr($date,6,10);
}

function showtime($seconds) //Vis tid i henhold til http://labs.trafikanten.no/ofte-stilte-spoersmaal.aspx#98
{
	if ($seconds<45)
		$time='Nå';
	elseif ($seconds>=45 && $seconds<=104)
		$time=1;
	elseif ($seconds>=105 && $seconds<=164)
		$time=2;
	elseif ($seconds>=165 && $seconds<=224)
		$time=3;
	elseif ($seconds>=225 && $seconds<=284)
		$time=4;
	elseif ($seconds>=285 && $seconds<=344)
		$time=5;
	elseif ($seconds>=345 && $seconds<=404)
		$time=6;
	elseif ($seconds>=405 && $seconds<=464)
		$time=7;
	elseif ($seconds>=465 && $seconds<=524)
		$time=8;
	elseif ($seconds>=525 && $seconds<=584)
		$time=9;
	elseif ($seconds>=585)
		$time=false;
if(is_numeric($time))
	$time=$time.' min';

return $time;

}

if(!is_numeric($holdeplass)) //Sjekk om det er oppgitt navn eller id på holdeplass
{
	$holdeplassdata=json_decode($data=file_get_contents($q=$url.'/Place/FindMatches/'.$holdeplass),true);
	$holdeplassid=$holdeplassdata[0]['ID'];

	var_dump($holdeplassdata.$q);
}
else
	$holdeplassid=$holdeplass;

$json=file_get_contents($url.'/RealTime/GetRealTimeData/'.$holdeplassid);
$realtime=json_decode($json,true);
//print_r($realtime);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Sanntid for <?php echo $holdeplass ?></title>
</head>


<body>
<?Php

foreach ($realtime as $arrival)
{
	$arrivaltime=cleandate($arrival['AimedArrivalTime']);
	echo $arrival['LineRef'].' '.$arrival['DestinationDisplay'].': ';
	$now=cleandate($arrival['RecordedAtTime']);
	$time=showtime($arrivaltime-$now);
	if($time===false)
		$time=date('H:i',$arrivaltime);
	//$time=(int)date('i',$arrivaltime-$now);
	
	echo "$time<br>\n";
	
}
?>
</body>
</html>
Trådstarter
Sitat av datagutten Vis innlegg
Laget en liten sak nå som viser sanntid:
http://host.datagutten.net/trafikant...eplass=2300500
Tallene bakerst i adressen er id for en holdeplass. Det er også mulig å skrive navnet på en holdeplass, men foreløpig fungerer det bare for navn uten parenteser.
Kildekode:

Kode

<?Php
$url='http://api';
if(!isset($_GET['holdeplass']))
	die('Navn eller id på holdeplass må oppgis');
$holdeplass=$_GET['holdeplass'];
function cleandate($date) //Gjør om datofelt til unix timestamp
{
return substr($date,6,10);
}

function showtime($seconds) //Vis tid i henhold til http://labs.trafikanten.no/ofte-stilte-spoersmaal.aspx#98
{
	if ($seconds<45)
		$time='Nå';
	elseif ($seconds>=45 && $seconds<=104)
		$time=1;
	elseif ($seconds>=105 && $seconds<=164)
		$time=2;
	elseif ($seconds>=165 && $seconds<=224)
		$time=3;
	elseif ($seconds>=225 && $seconds<=284)
		$time=4;
	elseif ($seconds>=285 && $seconds<=344)
		$time=5;
	elseif ($seconds>=345 && $seconds<=404)
		$time=6;
	elseif ($seconds>=405 && $seconds<=464)
		$time=7;
	elseif ($seconds>=465 && $seconds<=524)
		$time=8;
	elseif ($seconds>=525 && $seconds<=584)
		$time=9;
	elseif ($seconds>=585)
		$time=false;
if(is_numeric($time))
	$time=$time.' min';

return $time;

}

if(!is_numeric($holdeplass)) //Sjekk om det er oppgitt navn eller id på holdeplass
{
	$holdeplassdata=json_decode($data=file_get_contents($q=$url.'/Place/FindMatches/'.$holdeplass),true);
	$holdeplassid=$holdeplassdata[0]['ID'];

	var_dump($holdeplassdata.$q);
}
else
	$holdeplassid=$holdeplass;

$json=file_get_contents($url.'/RealTime/GetRealTimeData/'.$holdeplassid);
$realtime=json_decode($json,true);
//print_r($realtime);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Sanntid for <?php echo $holdeplass ?></title>
</head>


<body>
<?Php

foreach ($realtime as $arrival)
{
	$arrivaltime=cleandate($arrival['AimedArrivalTime']);
	echo $arrival['LineRef'].' '.$arrival['DestinationDisplay'].': ';
	$now=cleandate($arrival['RecordedAtTime']);
	$time=showtime($arrivaltime-$now);
	if($time===false)
		$time=date('H:i',$arrivaltime);
	//$time=(int)date('i',$arrivaltime-$now);
	
	echo "$time<br>\n";
	
}
?>
</body>
</html>
Vis hele sitatet...
Utrolig stilig Men om jeg limer inn IDen til holdeplassen visperud, som er

Kode

 "Zone": "1",
          "X": 608133,
          "Y": 6645768,
          "ID": 2300500,
          "Name": "Visperud (i Solheimvn)",
          "District": "Lørenskog",
          "Type": 0,
          "Stops": [],
          "ShortName": "VIS"
Så får jeg opp disse dataene

Kode

411 Lillestrøm: Nå
411 Oslo Bussterminal: 23:08
401 Kjeller: 23:12
401 Oslo Bussterminal: 23:14
411 Lillestrøm: 23:17
411 Oslo Bussterminal: 23:38
401 Kjeller: 23:42
401 Oslo Bussterminal: 23:44
Hvordan kan koden konfigureres slik at visperud holdeplass dukker opp istede for Lillestrøm? Slik at jeg vet når bussen går fra denne holdeplassen?
Sist endret av Opous; 16. mars 2012 kl. 22:52.
<?php echo 'VIF'; ?>
datagutten's Avatar
Den viser hvilke avganger som går fra den holdeplassen, akkurat som på trafikanten.
Trådstarter
Sitat av datagutten Vis innlegg
Den viser hvilke avganger som går fra den holdeplassen, akkurat som på trafikanten.
Vis hele sitatet...
aha, my bad!
Sitat av datagutten Vis innlegg
Den viser hvilke avganger som går fra den holdeplassen, akkurat som på trafikanten.
Vis hele sitatet...
Jeg prøvde å laste opp koden til min egen host, men jeg får bare en hvit nettside?

Er det noe jeg mangler? o.O

http://turbolego.com/trafikanten.php?holdeplass=2300500
Sitat av Turbolego Vis innlegg
Jeg prøvde å laste opp koden til min egen host, men jeg får bare en hvit nettside?

Er det noe jeg mangler? o.O

http://turbolego.com/trafikanten.php?holdeplass=2300500
Vis hele sitatet...
Api'et? titegn
Sitat av sh0rtie Vis innlegg
Api'et? titegn
Vis hele sitatet...
Doh'... mail sendt til trafikanten...

Er det mulig å laste ned en del av databasen, f.eks. for ett trikkestopp, og få varsel på mail dersom databasen har blitt oppdatert?

En offline løsning til å ha på veggen hadde vært best.
<?php echo 'VIF'; ?>
datagutten's Avatar
Det går sikkert an å få lagret rutetidene offline, men jeg ser ikke helt poenget i å ha noe på veggen uten sanntidsinformasjon.
Sitat av datagutten Vis innlegg
Det går sikkert an å få lagret rutetidene offline, men jeg ser ikke helt poenget i å ha noe på veggen uten sanntidsinformasjon.
Vis hele sitatet...
dersom nettet/api'et er nede, kan man bruke offline data som "nødsalternativ"?
<?php echo 'VIF'; ?>
datagutten's Avatar
De har ikke noe støtte for det, men så vidt jeg vet er det ikke noe i vilkårene som hindrer deg i å lagre det offline.
Laget en veeeldig simpel extension i Google som henter ut data i en iframe fra datagutten's nettside. Legger med dokumentasjon og readme, slik at det blir enkelt å forstå hva som skal gjøres.

Jeg tar ingen credits for selve uthentingen av informasjonen, så dersom datagutten ønsker at den fjernes, så sender du bare meg en PM

versjon null dot en


EDIT: Og ja, jeg kommer til å jobbe videre på denne
Sist endret av sh0rtie; 18. mars 2012 kl. 22:43.
<?php echo 'VIF'; ?>
datagutten's Avatar
Den var fin.
Her er en trafikantenlogo du kan bruke i stedet for standardikonet: http://host.datagutten.net/trafikanten/trafikanten.png
Sitat av datagutten Vis innlegg
Den var fin.
Her er en trafikantenlogo du kan bruke i stedet for standardikonet: http://host.datagutten.net/trafikanten/trafikanten.png
Vis hele sitatet...
Takk

Vet du om en måte jeg kan få appen/scriptet til å legge på 18 min/en predefinert verdi mellom holdeplass en og holdeplass to?


eksempel ifra appen:

Bussen starter fra Hosle Senter 20:02. 16 minutter senere er den på Bekkestua, og derifra vil jeg ta t-banen videre, rute 6 ringen. (den eneste t-banen fra bekkestua.). I tillegg tar det minimum to minutter å gå fra buss til t-bane. Jeg vil få appen til å kun vise de t-banene som går etter 16 min + evt. gåtid. (mellom 2-5 min.)
▼ ... noen uker senere ... ▼
Jeg tok og endret scriptet litt slik at det passet mine behov. Takk for eksempelkode

Scriptet viser realtime data for vestgående (angitt med $avgang['DirectionRef']) T-baner fra holdeplass ID angitt i $holdeplasser.

Kode
http://pastebin.com/63u1dMwB

Kjører man koden slik det står i linken får man:
Ensjø [T-bane]
2 Stortinget - Nå
3 Stortinget - 6 min

Tøyen [T-bane]
2 Stortinget - 2 min
3 Stortinget - 8 min
Vis hele sitatet...

-----------


Sitat av sh0rtie Vis innlegg
Takk

Vet du om en måte jeg kan få appen/scriptet til å legge på 18 min/en predefinert verdi mellom holdeplass en og holdeplass to?


eksempel ifra appen:

Bussen starter fra Hosle Senter 20:02. 16 minutter senere er den på Bekkestua, og derifra vil jeg ta t-banen videre, rute 6 ringen. (den eneste t-banen fra bekkestua.). I tillegg tar det minimum to minutter å gå fra buss til t-bane. Jeg vil få appen til å kun vise de t-banene som går etter 16 min + evt. gåtid. (mellom 2-5 min.)
Vis hele sitatet...
Hvor vil du gå av ? Du kan bruke APIet for å vite hvilken buss og bane du kan ta.
Sist endret av tore-; 4. april 2012 kl. 00:52.