Re: Arduino - Anropa hemsida
Postat: 7 april 2018, 02:30:10
Funkar bra! 

Svenskt forum för elektroniksnack.
https://elektronikforumet.com/forum/
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"] . " ";
}
?>
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";
}
?>
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?
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>";
}
?>
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>";
}
?>
Kod: Markera allt
preg_match( "#/Date\((\d{10})\d{3}(.*?)\)/#", $trafik["messages"][$i]["createddate"], $tiden );
echo "Datum: " . date( "r", $tiden[1] ) . " ";
Kod: Markera allt
echo "Datum: " . date( "d/m H:i", $tiden[1] ) . " ";