Arduino - Anropa hemsida

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Mickecarlsson
EF Sponsor
Inlägg: 3743
Blev medlem: 15 april 2017, 18:06:15
Ort: Malmö
Kontakt:

Re: Arduino - Anropa hemsida

Inlägg av Mickecarlsson »

Detta är nog vad du vill ha. Modifiera efter behov.
Jag har blandat php och html, inte snyggt, men otroligt funktionellt :D

Kod: Markera allt

<!--
/*
* 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
* Version 0.4 - hack med html :-)
*/

-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Din titel här</title>
<style>
td{font-family: verdana; font-size: 12px; color: #FFFFFF}   
</style>
</head>
<body bcolor="#FFFFFF" leftmargin="1" topmargin="1">
<table border="0" cellspacing="1" cellpadding="1">

<?php
   
   // 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);
      // Antal meddelanden
      $antal_meddelanden = count($trafik["messages"]);
      // Rubrikerna i tabellen
      echo '<tr bgcolor="#444444">';
      echo '<td>' . $antal_meddelanden . " " . $orter[$o] . '</td>';
      echo '<td>Titel</td>';
      echo '<td>Beskrivning</td>';
      echo '<td>Sub</td>';
      echo '<td>Kategori</td>';
      echo '<td>Prioritet</td>';
      echo '</tr>';
     
      // Loopa igenom alla meddelanden
      for ($i =0; $i < $antal_meddelanden; $i++)
         {
         echo '<tr bgcolor="#222222">';
         // 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 '<td style="width: 90px" valign="top">' . date( "d M H:i", $tiden[1] ) . '</td>';
         // Skriv ut titeln
         echo '<td style="width: 300px" valign="top">' . $trafik["messages"][$i]["title"] . '</td>';
         // Skriv ut trafikstörningen
         echo '<td style="width: 700px" valign="top">' . $trafik["messages"][$i]["description"] . '</td>';
         // Här kommer vad som orsakar störningen
         echo '<td style="width: 90px" valign="top">' . $trafik["messages"][$i]["subcategory"] . '</td>';
         // Skriv ut vilken kategori det är (i klartext)
         echo '<td style="width: 90px" valign="top">' . $kategorier[$trafik["messages"][$i]["category"]] . '</td>';
         // Prioritet
         echo '<td style="width: 90px" valign="top">' . $kategorier[$trafik["messages"][$i]["ptiority"]] . '</td>';
         echo '</tr>';
      } // for $antal_meddelanden
   } // for antal_orter
echo '</html>';
?>
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino - Anropa hemsida

Inlägg av GeekJoan »

Jag får ett fel på rad 71

Kod: Markera allt

70         // Prioritet
71         echo '<td style="width: 90px" valign="top">' . $kategorier[$trafik["messages"][$i]["ptiority"]] . '</td>';
72         echo '</tr>';

Jag gjorde så här själv men det funkade si så där, fattar inte riktigt varför. Borde den inte gå igenom varje rad för varje meddelande?

Kod: Markera allt

<?php
	$orter = array("stockholm", "uppland");
	$kategorier = array("Vägtrafik", "Kollektivtrafik", "Planerad störning", "Övrigt");
	$prioritet = array("Mycket allvarlig händelse", "Stor händelse", "Störning", "Information", "Mindre störning");
	$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&pagination=false&trafficareaname=' . $orter[$o]);
		$trafik = json_decode($json,true);		
		$antal_meddelanden = count($trafik["messages"]);
?>

<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Trafik</title>
<style>
td{font-family:verdana;font-size:12px;color:#FFFFFF;}
</style>
</head>
<body bgcolor="#FFFFFF" leftmargin="1" topmargin="1">
<table border="0" cellspacing="1" cellpadding="1">
<tr bgcolor="#444444">
    <td>
<?php
		echo " " . $antal_meddelanden . " ";
		echo " " . $orter[$o] . " ";
		for ($i =0; $i < $antal_meddelanden; $i++)
		{
		preg_match( "#/Date\((\d{10})\d{3}(.*?)\)/#", $trafik["messages"][$i]["createddate"], $tiden );
?>
		</td>
		<td>Titel</td>
	    <td>Beskrivning</td>
	    <td>Sub</td>
	    <td>Kategori</td>
	    <td>Prioritet</td>
		</tr>
  		<tr bgcolor="#222222">
		<td style="width: 90px" valign="top">				
		<?php	echo " " . date( "d M H:i", $tiden[1] ) . " "; ?>
		</td>
		<td style="width: 300px" valign="top">
		<?php	echo "<b>" . $trafik["messages"][$i]["title"] . "</b>"; ?>
		</td>
		<td style="width: 700px" valign="top">
		<?php	echo " " . $trafik["messages"][$i]["description"] . " "; ?>
		</td>
		<td style="width: 90px" valign="top">
		<?php	echo " " . $trafik["messages"][$i]["subcategory"] . " "; ?>
		</td>
		<td style="width: 90px" valign="top">
		<?php	echo " " . $kategorier[$trafik["messages"][$i]["category"]] . " "; ?>
		</td>
		<td style="width: 90px" valign="top">
		<?php	echo " " . $prioritet[$trafik["messages"][$i]["priority"]] . " "; ?>
		</td>
		</tr>
		</table>
<?php
		}
	}
?>
</body>
</html>
Ger mig detta:
fel.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino - Anropa hemsida

Inlägg av GeekJoan »

Såg ditt stavfel.
["ptiority"]
ändrade det, men får ändå fel. Dock inte lika många...
Notice: Undefined offset: 4 in /.../trafik_tmp4.php on line 71
Kulla
Inlägg: 1264
Blev medlem: 7 januari 2010, 10:06:11
Ort: Sandared
Kontakt:

Re: Arduino - Anropa hemsida

Inlägg av Kulla »

Du anropar <html> i loop när du borde inte göra.

Sen du har loop i vilken är en del av både <td> och <tr>

Det du vill göra är det här

Kod: Markera allt

<html>
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <title>Trafik</title>
    <style>
        td{font-family:verdana;font-size:12px;color:#FFFFFF;}
    </style>
</head>
<body bgcolor="#FFFFFF" leftmargin="1" topmargin="1">
<?php
$orter = array("stockholm", "uppland");
$kategorier = array("Vägtrafik", "Kollektivtrafik", "Planerad störning", "Övrigt");
$prioritet = array("Mycket allvarlig händelse", "Stor händelse", "Störning", "Information", "Mindre störning");
$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&pagination=false&trafficareaname=' . $orter[$o]);
    $trafik = json_decode($json,true);
    $antal_meddelanden = count($trafik["messages"]);
?>
    <table border="0" cellspacing="1" cellpadding="1">
        <tr bgcolor="#444444">
            <td>
                <?php
                echo " " . $antal_meddelanden . " ";
                echo " " . $orter[$o] . " ";
                    ?>
            </td>
            <td>Titel</td>
            <td>Beskrivning</td>
            <td>Sub</td>
            <td>Kategori</td>
            <td>Prioritet</td>
        </tr>
        <?php
        for ($i =0; $i < $antal_meddelanden; $i++) {
        preg_match( "#/Date\((\d{10})\d{3}(.*?)\)/#", $trafik["messages"][$i]["createddate"], $tiden ); ?>
        <tr bgcolor="#222222">
            <td style="width: 90px" valign="top">
                <?php   echo " " . date( "d M H:i", $tiden[1] ) . " "; ?>
            </td>
            <td style="width: 300px" valign="top">
                <?php   echo "<b>" . $trafik["messages"][$i]["title"] . "</b>"; ?>
            </td>
            <td style="width: 700px" valign="top">
                <?php   echo " " . $trafik["messages"][$i]["description"] . " "; ?>
            </td>
            <td style="width: 90px" valign="top">
                <?php   echo " " . $trafik["messages"][$i]["subcategory"] . " "; ?>
            </td>
            <td style="width: 90px" valign="top">
                <?php   echo " " . $kategorier[$trafik["messages"][$i]["category"]] . " "; ?>
            </td>
            <td style="width: 90px" valign="top">
                <?php   echo " " . $prioritet[$trafik["messages"][$i]["priority"]] . " "; ?>
            </td>
        </tr>
<?php
}?>
    </table>
<?php
}
    ?>
    </body>
    </html>

Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino - Anropa hemsida

Inlägg av GeekJoan »

Aha, så det var bara lite omkastning som behövdes. Jag börjar bli gammal eller nått.
Kulla
Inlägg: 1264
Blev medlem: 7 januari 2010, 10:06:11
Ort: Sandared
Kontakt:

Re: Arduino - Anropa hemsida

Inlägg av Kulla »

Nått måste det va :wink:

Enklaste när man leker med blandning som denna är göra det först i html hur skulle den se ut och sen lägga i php kod där det behövs, så om det är tabellen i frågan då inuti själva <table>taggen men efter <tr> med kolumn namn, osv.

Då brukar man lösa det ganska fort och sen rätt indent hjälper också att hitta felet.
Användarvisningsbild
Mickecarlsson
EF Sponsor
Inlägg: 3743
Blev medlem: 15 april 2017, 18:06:15
Ort: Malmö
Kontakt:

Re: Arduino - Anropa hemsida

Inlägg av Mickecarlsson »

:tumupp:
Med gemensama krafter och kodsnuttar fixar vi det mesta :D
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino - Anropa hemsida

Inlägg av GeekJoan »

Jepp, stort tack för all hjälp! :tumupp:
Jag kommer säkert på något mer dumt snart.
Kulla
Inlägg: 1264
Blev medlem: 7 januari 2010, 10:06:11
Ort: Sandared
Kontakt:

Re: Arduino - Anropa hemsida

Inlägg av Kulla »

Det finns inga dumma frågor ;)
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino - Anropa hemsida

Inlägg av GeekJoan »

Utan att skriva om allt för mycket är det lätt att lägga till en sorterings funktionen i php?

typ efter dessa två rader?

Kod: Markera allt

$json = file_get_contents('http://api.sr.se/api/v2/traffic/messages?format=json&pagination=false&trafficareaname=' . $orter[$o]);
    $trafik = json_decode($json,true);
Skulle ju vara smidigt om man lätt kunde sortera på kategori. Typ:

Kod: Markera allt

$trafik = $trafik asort($kategorier[$trafik["messages"][all]["category"]])
Så kunde resten vara som det är. Har nämligen petat in färgkodning på olika kategorier och prioritet redan...
Kulla
Inlägg: 1264
Blev medlem: 7 januari 2010, 10:06:11
Ort: Sandared
Kontakt:

Re: Arduino - Anropa hemsida

Inlägg av Kulla »

Kopiera denna efter $trafik raden så du har den så här:

Kod: Markera allt

    $trafik = json_decode($json,true);

    usort($trafik["messages"],function($firstObject, $secondObject){
        return $firstObject["category"] > $secondObject["category"];
    });
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino - Anropa hemsida

Inlägg av GeekJoan »

Att det ska vara så lätt när man vet hur man gör. :bravo:
Användarvisningsbild
GeekJoan
Admin
Inlägg: 10642
Blev medlem: 26 maj 2003, 15:59:27
Ort: Solna

Re: Arduino - Anropa hemsida

Inlägg av GeekJoan »

Börjar blir riktigt bra det här:
list.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Kulla
Inlägg: 1264
Blev medlem: 7 januari 2010, 10:06:11
Ort: Sandared
Kontakt:

Re: Arduino - Anropa hemsida

Inlägg av Kulla »

Ser bra ut det där :tumupp: :bravo:
Användarvisningsbild
Mickecarlsson
EF Sponsor
Inlägg: 3743
Blev medlem: 15 april 2017, 18:06:15
Ort: Malmö
Kontakt:

Re: Arduino - Anropa hemsida

Inlägg av Mickecarlsson »

:tumupp:
Skriv svar