Arduino - Anropa hemsida
Re: Arduino - Anropa hemsida
Snabbis fråga:
Försöker modifiera din kod för att passa ett annat json anrop, men jag får inte ut ett skit. Har jag inte med [0] så blir det massa errors. Men antar att det är där felet är. ?
http://api.sr.se/api/v2/traffic/message ... me=uppland
Försöker modifiera din kod för att passa ett annat json anrop, men jag får inte ut ett skit. Har jag inte med [0] så blir det massa errors. Men antar att det är där felet är. ?
http://api.sr.se/api/v2/traffic/message ... me=uppland
Kod: Markera allt
<?php
$json = file_get_contents('http://api.sr.se/api/v2/traffic/messages?format=json&trafficareaname=uppland');
$bussar = json_decode($json,true);
$antal_bussar = count($bussar["messages"][0]["id"]);
for ($i =0; $i < $antal_bussar; $i++)
{
echo " " . $bussar["messages"][0]["id"][$i]["title"] . " ";
echo " " . $bussar["messages"][0]["id"][$i]["description"] . " ";
}
?>
- Mickecarlsson
- EF Sponsor
- Inlägg: 4289
- Blev medlem: 15 april 2017, 18:06:15
- Ort: Malmö
- Kontakt:
Re: Arduino - Anropa hemsida
Den sidan på SR var så bra att jag skrev om koden, om du studerar den kan du se hur det parsas.
Kod: Markera allt
<?php
/*
* Exempelkod skriven av Mikael Carlsson för att parsa JSON från API levererad av Sveriges Radio
* Jag skrev denna kod till geekjoan på Elektronikforumet och insåg att den fungerar så bra att
* jag kommer att använda den i min egen miljö här hemma för att se trafiken innan jag kör till jobb
* Licens: public domain
*/
// Kategorierna och prioriteterna kommer från SR's hemsida:
// http://sverigesradio.se/api/documentation/v2/metoder/trafik.html
$kategorier = array("Vägtrafik", "Kollektivtrafik", "Planerad störning", "Övrigt");
$prioritet = array("Mycket allvarlig händelse", "Stor händelse", "Störning", "Information", "Mindre störning");
// Hämta trafikinformation från Sveriges Radio API-sida
$json = file_get_contents('http://api.sr.se/api/v2/traffic/messages?format=json&trafficareaname=uppland');
// Dekoda det som en array
$trafik = json_decode($json,true);
// Ta bort denna remark för att dumpa ut det i råformat, hjälper vid debug
//var_dump($trafik);
// Det är SR som har Copyrighten, visa den
echo $trafik["copyright"] . "\n\n";
// Leta upp hur många meddelanden det finns i strängen från SR
$antal_meddelanden = count($trafik["messages"]);
echo "Antal meddelanden: " . $antal_meddelanden . "\n";
// Loopa igenom alla meddelanden
for ($i =0; $i < $antal_meddelanden; $i++)
{
// Skriv ut id
echo "ID: " . $trafik["messages"][$i]["id"] . "\n";
// Skriv ut prioriteten i klartext
echo "Prioritet: " . $prioritet[$trafik["messages"][$i]["priority"]] . "\n";
// Skriv ut titeln, är synonymt med orten i anropet ovan
echo "Titel: " . $trafik["messages"][$i]["title"] . "\n";
// Bearbeta datumsträngen för att rätta till formatet, därav preg_match
preg_match( "#/Date\((\d{10})\d{3}(.*?)\)/#", $trafik["messages"][$i]["createddate"], $tiden );
// Skriv ut datum och tid i RFC 2822 format, ändra enligt php date() för att få annat format
echo "Datum: " . date( "r", $tiden[1] ) . "\n";
// Skriv ut koordinaterna, jag hade en färdig rutin för detta, ser snyggare ut :-)
echo "Koordinater: ";
print_DDDMMMMM($trafik["messages"][$i]["latitude"], $trafik["messages"][$i]["longitude"]);
// Skriv ut trafikstörningen
echo "Beskrivning: " . $trafik["messages"][$i]["description"] . "\n";
// Skriv ut vilken kategori det är (i klartext)
echo "Kategori: " . $kategorier[$trafik["messages"][$i]["category"]] . "\n";
// Här kommer vad som orsakar störningen
echo "Orsak: " . $trafik["messages"][$i]["subcategory"] . "\n";
echo "\n";
}
/*************************************************************************
* Function name: print_DDDMMMMM() *
* Purpose: Convert and print DDD MM.MMM coordinates *
* Parameters: lat and lon *
* Returns: Nothing *
*************************************************************************/
function print_DDDMMMMM($lat, $lon) {
$dec_degrees_lat = intval($lat);
$dec_degrees_lon = intval($lon);
$dec_minutes_lat = $lat - $dec_degrees_lat;
$dec_minutes_lon = $lon - $dec_degrees_lon;
$minutes_lat = $dec_minutes_lat * 60;
$minutes_lon = $dec_minutes_lon * 60;
echo "N".$dec_degrees_lat;
echo " ";
printf ("%2.3f",$minutes_lat);
echo " ";
echo "E".$dec_degrees_lon;
echo " ";
printf ("%2.3f",$minutes_lon);
echo "\n";
}
?>
Senast redigerad av Mickecarlsson 7 april 2018, 10:16:11, redigerad totalt 1 gång.
- Mickecarlsson
- EF Sponsor
- Inlägg: 4289
- Blev medlem: 15 april 2017, 18:06:15
- Ort: Malmö
- Kontakt:
Re: Arduino - Anropa hemsida
Och givetvis stöds inte skåne
http://api.sr.se/api/v2/traffic/areas
Norrbotten
Västerbotten
Västernorrland
Jämtland
Gävleborg
Dalarna
Uppland
Västmanland
Örebro
Värmland
http://api.sr.se/api/v2/traffic/areas
Norrbotten
Västerbotten
Västernorrland
Jämtland
Gävleborg
Dalarna
Uppland
Västmanland
Örebro
Värmland
Re: Arduino - Anropa hemsida
Funderar på en grej. Du använder /n som jag använder <br>. Men på min server så blir det inga radbrytningar. Har det med någon inställning att göra eller tänker jag fel?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Arduino - Anropa hemsida
Tyckte det var konstigt att det inte var mer info om Stockholm än det var. Så såg jag i botten att det är flera sidor. Fick lägga till pagination=false för att få allt på samma sida:
http://api.sr.se/api/v2/traffic/message ... tion=false
http://api.sr.se/api/v2/traffic/message ... tion=false
Re: Arduino - Anropa hemsida
Går det att skriva flera trafficareaname=Stockholm i samma sökning? Typ:
trafficareaname=Stockholm,Uppland eller
trafficareaname=Stockholm&trafficareaname=Uppland?
trafficareaname=Stockholm,Uppland eller
trafficareaname=Stockholm&trafficareaname=Uppland?
Re: Arduino - Anropa hemsida
Han kanske kör scriptet direkt från kommandoraden, medan du kör det från en webläsare.GeekJoan skrev:Funderar på en grej. Du använder /n som jag använder <br>. Men på min server så blir det inga radbrytningar. Har det med någon inställning att göra eller tänker jag fel?
Radmatningar filtreras bort i webläsarens presentation, så du måste använda <br> istället, eller så wrappar du hela din output inom <pre> och </pre>, då kommer din webläsare att släppa igenom radmatningarna.
- Mickecarlsson
- EF Sponsor
- Inlägg: 4289
- Blev medlem: 15 april 2017, 18:06:15
- Ort: Malmö
- Kontakt:
Re: Arduino - Anropa hemsida
Stämmer, jag kör skriptet i shell, går snabbare att testa då
Här är koden omgjord för html, jag har testat från en webserver att det funkar.
Här är koden omgjord för html, jag har testat från en webserver att det funkar.
Kod: Markera allt
<?php
/*
* Exempelkod skriven av Mikael Carlsson för att parsa JSON från API levererad av Sveriges Radio
* Jag skrev denna kod till geekjoan på Elektronikforumet och insåg att den fungerar så bra att
* jag kommer att använda den i min egen miljö här hemma för att se trafiken innan jag kör till jobb
* Licens: public domain
* Version 0.1 - första release
* Version 0.2 - gjorde om till html
*/
// Sätt UTF-8 som teckentabell sidan ska presenteras, fixar till åäö
// OBS! Måste skickas först, annars skickar webservern ut egna headers
header('Content-Type: text/html; charset=utf-8');
// Kategorierna och prioriteterna kommer från SR's hemsida:
// http://sverigesradio.se/api/documentation/v2/metoder/trafik.html
$kategorier = array("Vägtrafik", "Kollektivtrafik", "Planerad störning", "Övrigt");
$prioritet = array("Mycket allvarlig händelse", "Stor händelse", "Störning", "Information", "Mindre störning");
// Hämta trafikinformation från Sveriges Radio API-sida
$json = file_get_contents('http://api.sr.se/api/v2/traffic/messages?format=json&trafficareaname=uppland');
// Dekoda det som en array
$trafik = json_decode($json,true);
// Ta bort denna remark för att dumpa ut det i råformat, hjälper vid debug
//var_dump($trafik);
// Det är SR som har Copyrighten, visa den
echo "<h4>" . $trafik["copyright"] . "</h4></br></br>";
// Leta upp hur många meddelanden det finns i strängen från SR
$antal_meddelanden = count($trafik["messages"]);
echo "<b>Antal meddelanden: </b>" . $antal_meddelanden . "</br>";
// Loopa igenom alla meddelanden
for ($i =0; $i < $antal_meddelanden; $i++)
{
// Skriv ut id
echo "<b>ID: </b>" . $trafik["messages"][$i]["id"] . "</br>";
// Skriv ut prioriteten i klartext
echo "<b>Prioritet: </b>" . $prioritet[$trafik["messages"][$i]["priority"]] . "</br>";
// Skriv ut titeln, är synonymt med orten i anropet ovan
echo "<b>Titel: </b>" . $trafik["messages"][$i]["title"] . "</br>";
// Bearbeta datumsträngen för att rätta till formatet, därav preg_match
preg_match( "#/Date\((\d{10})\d{3}(.*?)\)/#", $trafik["messages"][$i]["createddate"], $tiden );
// Skriv ut datum och tid i RFC 2822 format, ändra enligt php date() för att få annat format
echo "<b>Datum: </b>" . date( "r", $tiden[1] ) . "</br>";
// Skriv ut koordinaterna, jag hade en färdig rutin för detta, ser snyggare ut :-)
echo "<b>Koordinater: </b>";
print_DDDMMMMM($trafik["messages"][$i]["latitude"], $trafik["messages"][$i]["longitude"]);
// Skriv ut trafikstörningen
echo "<b>Beskrivning: </b>" . $trafik["messages"][$i]["description"] . "</br>";
// Skriv ut vilken kategori det är (i klartext)
echo "<b>Kategori: </b>" . $kategorier[$trafik["messages"][$i]["category"]] . "</br>";
// Här kommer vad som orsakar störningen
echo "<b>Orsak: </b>" . $trafik["messages"][$i]["subcategory"] . "</br>";
echo "</br>";
}
/******************************************************
* Function name: print_DDDMMMMM() *
* Purpose: Convert and print DDD MM.MMM coordinates *
* Parameters: lat and lon *
* Returns: Nothing *
*******************************************************/
function print_DDDMMMMM($lat, $lon) {
$dec_degrees_lat = intval($lat);
$dec_degrees_lon = intval($lon);
$dec_minutes_lat = $lat - $dec_degrees_lat;
$dec_minutes_lon = $lon - $dec_degrees_lon;
$minutes_lat = $dec_minutes_lat * 60;
$minutes_lon = $dec_minutes_lon * 60;
echo "N".$dec_degrees_lat;
echo " ";
printf ("%2.3f",$minutes_lat);
echo " ";
echo "E".$dec_degrees_lon;
echo " ";
printf ("%2.3f",$minutes_lon);
echo "</br>";
}
?>
Senast redigerad av Mickecarlsson 9 april 2018, 06:41:47, redigerad totalt 1 gång.
- Mickecarlsson
- EF Sponsor
- Inlägg: 4289
- Blev medlem: 15 april 2017, 18:06:15
- Ort: Malmö
- Kontakt:
Re: Arduino - Anropa hemsida
Jodå, fixade till det, du lägger bara in de orter du vill kolla i arrayn $orterGeekJoan skrev:Går det att skriva flera trafficareaname=Stockholm i samma sökning? Typ:
trafficareaname=Stockholm,Uppland eller
trafficareaname=Stockholm&trafficareaname=Uppland?
Kod: Markera allt
<?php
/*
* Exempelkod skriven av Mikael Carlsson för att parsa JSON från API levererad av Sveriges Radio
* Jag skrev denna kod till geekjoan på Elektronikforumet och insåg att den fungerar så bra att
* jag kommer att använda den i min egen miljö här hemma för att se trafiken innan jag kör till jobb
* Licens: public domain
* Version 0.1 - första release
* Version 0.2 - gjorde om till html
* version 0.3 - fler orter
*/
// Sätt UTF-8 som teckentabell sidan ska presenteras, fixar till åäö
// OBS! Måste skickas först, annars skickar webservern ut egna headers
header('Content-Type: text/html; charset=utf-8');
// Orter som ska kollas
$orter = array("uppland", "stockholm");
// Kategorierna och prioriteterna kommer från SR's hemsida:
// http://sverigesradio.se/api/documentation/v2/metoder/trafik.html
$kategorier = array("Vägtrafik", "Kollektivtrafik", "Planerad störning", "Övrigt");
$prioritet = array("Mycket allvarlig händelse", "Stor händelse", "Störning", "Information", "Mindre störning");
// Hämta trafikinformation från Sveriges Radio API-sida
$antal_orter = count($orter);
for ($o = 0; $o < $antal_orter; $o++)
{
$json = file_get_contents('http://api.sr.se/api/v2/traffic/messages?format=json&trafficareaname=' . $orter[$o]);
// Dekoda det som en array
$trafik = json_decode($json,true);
// Ta bort denna remark för att dumpa ut det i råformat, hjälper vid debug
//var_dump($trafik);
// Det är SR som har Copyrighten, visa den
echo "<h4>" . $trafik["copyright"] . "</h4>";
// Skriv ut orten
echo "<b>Ort: </b>" . $orter[$o] . "</br>";
// Leta upp hur många meddelanden det finns i strängen från SR
$antal_meddelanden = count($trafik["messages"]);
echo "<b>Antal meddelanden: </b>" . $antal_meddelanden . "</br>";
// Loopa igenom alla meddelanden
for ($i =0; $i < $antal_meddelanden; $i++)
{
// Skriv ut id
echo "<b>ID: </b>" . $trafik["messages"][$i]["id"] . "</br>";
// Skriv ut prioriteten i klartext
echo "<b>Prioritet: </b>" . $prioritet[$trafik["messages"][$i]["priority"]] . "</br>";
// Skriv ut titeln, är synonymt med orten i anropet ovan
echo "<b>Titel: </b>" . $trafik["messages"][$i]["title"] . "</br>";
// Bearbeta datumsträngen för att rätta till formatet, därav preg_match
preg_match( "#/Date\((\d{10})\d{3}(.*?)\)/#", $trafik["messages"][$i]["createddate"], $tiden );
// Skriv ut datum och tid i RFC 2822 format, ändra enligt php date() för att få annat format
echo "<b>Datum: </b>" . date( "r", $tiden[1] ) . "</br>";
// Skriv ut koordinaterna, jag hade en färdig rutin för detta, ser snyggare ut :-)
echo "<b>Koordinater: </b>";
print_DDDMMMMM($trafik["messages"][$i]["latitude"], $trafik["messages"][$i]["longitude"]);
// Skriv ut trafikstörningen
echo "<b>Beskrivning: </b>" . $trafik["messages"][$i]["description"] . "</br>";
// Skriv ut vilken kategori det är (i klartext)
echo "<b>Kategori: </b>" . $kategorier[$trafik["messages"][$i]["category"]] . "</br>";
// Här kommer vad som orsakar störningen
echo "<b>Orsak: </b>" . $trafik["messages"][$i]["subcategory"] . "</br>";
echo "</br>";
} // for $antal_meddelanden
} // for antal_orter
/******************************************************
* Function name: print_DDDMMMMM() *
* Purpose: Convert and print DDD MM.MMM coordinates *
* Parameters: lat and lon *
* Returns: Nothing *
*******************************************************/
function print_DDDMMMMM($lat, $lon) {
$dec_degrees_lat = intval($lat);
$dec_degrees_lon = intval($lon);
$dec_minutes_lat = $lat - $dec_degrees_lat;
$dec_minutes_lon = $lon - $dec_degrees_lon;
$minutes_lat = $dec_minutes_lat * 60;
$minutes_lon = $dec_minutes_lon * 60;
echo "N".$dec_degrees_lat;
echo " ";
printf ("%2.3f",$minutes_lat);
echo " ";
echo "E".$dec_degrees_lon;
echo " ";
printf ("%2.3f",$minutes_lon);
echo "</br>";
}
?>
Senast redigerad av Mickecarlsson 9 april 2018, 06:42:14, redigerad totalt 1 gång.
Re: Arduino - Anropa hemsida
Funkar fint.
Fråga: Hur formateras tiden med denna:
Resultat:
Datum: Wed, 24 Jan 2018 15:15:06 +0100
Känns som man skulle vilja ha den lite kortare typ:
Datum: 24 Jan 15:15
Eller
Datum: 24/01 15:15
Fråga: Hur formateras tiden med denna:
Kod: Markera allt
preg_match( "#/Date\((\d{10})\d{3}(.*?)\)/#", $trafik["messages"][$i]["createddate"], $tiden );
echo "Datum: " . date( "r", $tiden[1] ) . " ";
Datum: Wed, 24 Jan 2018 15:15:06 +0100
Känns som man skulle vilja ha den lite kortare typ:
Datum: 24 Jan 15:15
Eller
Datum: 24/01 15:15
Re: Arduino - Anropa hemsida
Du skulle kunna skriva så här kanske
Kod: Markera allt
echo "Datum: " . date( "d/m H:i", $tiden[1] ) . " ";
Re: Arduino - Anropa hemsida
Det duger.
Jag hade ju tänkt att använda den data som kommer ut till Arduinon, men jag inser att det är för mycket text för att kunna presentera det på ett snyggt sätt. Så jag får göra det till en websida istället och använda en raspberry pi för att presentera resultatet på en vanlig skärm.
MEN.... Då kommer ju ett problem som jag inser att jag inte fixar.
Hur skriver man in phpkoden i html blocken? Dom ingår ju i en loop.
Eller är det lättare att få phpkoden att skriva ut html blocken runt den redan existerande koden?
Jag hade ju tänkt att använda den data som kommer ut till Arduinon, men jag inser att det är för mycket text för att kunna presentera det på ett snyggt sätt. Så jag får göra det till en websida istället och använda en raspberry pi för att presentera resultatet på en vanlig skärm.
MEN.... Då kommer ju ett problem som jag inser att jag inte fixar.
Hur skriver man in phpkoden i html blocken? Dom ingår ju i en loop.
Eller är det lättare att få phpkoden att skriva ut html blocken runt den redan existerande koden?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Arduino - Anropa hemsida
Inget stoppar dig att göra blandning av den, men fil måste vara .php för att den ska parsas av servern och inte webbläsare
Du kan skriva den echo delen ner i html koden, bara anropa den med <?php echo '<td>något här</td>'; ?> så du kan göra blandning på rätt sätt.
Du kan också använda php loop där, osv.
Du kan skriva den echo delen ner i html koden, bara anropa den med <?php echo '<td>något här</td>'; ?> så du kan göra blandning på rätt sätt.
Du kan också använda php loop där, osv.