catoha Skrevet 10. april 2008 Del Skrevet 10. april 2008 Hei Jeg ønsker å hente ut værdata fra denne xml filen: http://www.yr.no/sted/Norge/Hordaland/Berg...rgen/varsel.xml hvor jeg da henter ut alle værdataene slik at jeg kan søke med frem til en spesifikk dato innenfor disse og vise den frem. Tenker at dette nok henter ut ved hjelp av DOM. Mitt spørsmål er følgende. Er det noen som har dette i fingerspissende og har/eller kan lage et raskt script som gjør nettopp dette? Ellers er alle tips og hint på veien til stor hjelp. Cato Lenke til kommentar
Knut Urdalen Skrevet 10. april 2008 Del Skrevet 10. april 2008 For å gjøre avanserte spørringer i XML bruker du XPath. Se følgende referanser: Hvordan det fungerer: http://www.w3schools.com/Xpath http://en.wikipedia.org/wiki/XPath Hvordan du gjør det i PHP: http://no.php.net/manual/en/function.simpl...ement-xpath.php http://no.php.net/manual/en/function.dom-domxpath-query.php Lenke til kommentar
catoha Skrevet 10. april 2008 Forfatter Del Skrevet 10. april 2008 For å gjøre avanserte spørringer i XML bruker du XPath. Se følgende referanser: Hvordan det fungerer: http://www.w3schools.com/Xpath http://en.wikipedia.org/wiki/XPath Hvordan du gjør det i PHP: http://no.php.net/manual/en/function.simpl...ement-xpath.php http://no.php.net/manual/en/function.dom-domxpath-query.php Takker og bukker. Lenke til kommentar
qualbeen Skrevet 10. april 2008 Del Skrevet 10. april 2008 Du kan også bruke SimpleXML (http://no2.php.net/simplexml) men DOM med XPath er mye kraftigere! Skulle du ha problemer med å få tak i rett node kan jeg sikkert hjelpe deg fra 1. mai og ut.. Lenke til kommentar
Icaro2 Skrevet 11. april 2008 Del Skrevet 11. april 2008 Hei Er ikke helt sikker på hva du er ute etter om du skal ha søkemulighet eller bare liste ut perioden. Har et script her som jeg har funnet på PHP.net sine sider og modifisert det noe til min testing og kan være et utgangspunkt. Skulle det ikke være noe slikt som du var ute etter så se bort fra denne <?php if (!($fp=@fopen("http://www.yr.no/sted/Norge/Hordaland/Bergen/Bergen/varsel.xml", "r"))) die ("Couldn't open XML."); $usercount=0; $userdata=array(); $state=''; $userdataHead = array(); $usercount2=0; function startElementHandler ($parser,$name,$attrib){ global $usercount; global $userdata; global $state; global $value; global $userdataHead; global $usercount2; switch ($name) { case $name=="TIME" : { $userdata[$usercount]["from"] = $attrib["FROM"]; $userdata[$usercount]["to"] = $attrib["TO"]; $userdata[$usercount]["period"] = $attrib["PERIOD"]; break; } case $name=="SYMBOL" : { $userdata[$usercount]["number"] = $attrib["NUMBER"]; $userdata[$usercount]["symname"] = $attrib["NAME"]; break; } case $name=="PRECIPITATION" : { $userdata[$usercount]["prevalue"] = $attrib["VALUE"]; break; } case $name=="WINDDIRECTION" : { $userdata[$usercount]["deg"] = $attrib["DEG"]; break; } case $name=="WINDSPEED" : { $userdata[$usercount]["mps"] = $attrib["MPS"]; $userdata[$usercount]["winname"] = $attrib["NAME"]; break; } case $name=="TEMPERATURE" : { $userdata[$usercount]["temp"] = $attrib["VALUE"]; break; } default : {$state=$name;break;} } } function endElementHandler ($parser,$name){ global $usercount; global $userdata; global $state; $state=''; if($name=="TIME") {$usercount++;} } function characterDataHandler ($parser, $data) { global $usercount; global $userdata; global $state; if (!$state) {return;} if ($state=="TITLE") { $userdata[$usercount]["tittel"] = $data;} if ($state=="BODY") { $userdata[$usercount]["body"] = $data;} } if (!($xml_parser = xml_parser_create())) die("Couldn't create parser."); xml_set_element_handler( $xml_parser, "startElementHandler", "endElementHandler"); xml_set_character_data_handler( $xml_parser, "characterDataHandler"); while( $data = fread($fp, 4096)){ if(!xml_parse($xml_parser, $data, feof($fp))) {break;}} xml_parser_free($xml_parser); ?> <html> <head> <title>Testing PHP XML parser</title> <style type="text/css"> <!-- .style24 {font-size: 12} .style26 {font-size: 12px; font-weight: bold; } --> </style> </head> <body> Test av værdata fra Yr.no - Værdata over Bergen<br /><br /> <?php for ($a=0;$a<$usercount; $a++) { if ($userdata[$a]["tittel"]<>"") { echo "<b>".iso_UTF8($userdata[$a]["tittel"])."</b><br />"; echo iso_UTF8($userdata[$a]["body"])."<br /><br />"; } } echo " <table width=\"600\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"> <tr> <td width=\"150\"><span class=\"style26\">Fra / Til </span></td> <td width=\"38\"><span class=\"style24\"> </span></td> <td width=\"60\"><div align=\"center\"><span class=\"style26\">Nedbør</span></div></td> <td width=\"60\"><div align=\"center\"><span class=\"style26\">Vind retning </span></div></td> <td width=\"60\"><div align=\"center\"><span class=\"style26\">Vind styrke </span></div></td> <td width=\"50\"><div align=\"center\"><span class=\"style26\">Temp</span></div></td> <td><span class=\"style24\"> </span></td> </tr>"; $date; $teller=0; $datakl = explode("T", $userdata[$i]["from"]); $date = $datakl[0]; $arrUkedag = array('Monday' => 'Mandag','Tuesday' => 'Tirsdag', 'Wednesday' => 'Onsdag', 'Thursday' => 'Torsdag', 'Friday' => 'Fredag', 'Saturday' => 'Lørdag', 'Sunday' => 'Søndag'); for ($i=0;$i<$usercount; $i++) { if ($userdata[$i]["period"]<>""){ $datakl = explode("T", $userdata[$i]["from"]); $datakl2 = explode("T", $userdata[$i]["to"]); $str=strftime("%A",date_to_timestamp($datakl[0])); $klfra=explode(":",$datakl[1]); $kltil=explode(":",$datakl2[1]); $fra=$klfra[0].":".$klfra[1]; $til=$kltil[0].":".$kltil[1]; $bilde = $userdata[$i]["number"].".png"; if ($teller == 0){ echo "<tr> <td colspan=\"7\" class=\"style24\"><b>".$arrUkedag[$str]." ".$datakl[0]."</b><br /></td> </tr>"; } if ($datakl[0]<> $date && $teller <>0){ echo "<tr> <td colspan=\"7\" class=\"style24\"><hr /><br /><b>".$arrUkedag[$str]." ".$datakl[0]."</b><br /></td> </tr>"; } echo "<tr> <td width=\"150\" class=\"style24\">".$fra." - ".$til."</td> <td width=\"38\" class=\"style24\"><img src=\"image/sky/$bilde\" Width=\"38px\" height=\"38\" border=\"0\" /></td> <td width=\"60\" class=\"style24\"><div align=\"center\">".$userdata[$i]["prevalue"]." mm"."</div></td> <td width=\"60\" class=\"style24\"><div align=\"center\">".$userdata[$i]["deg"]."</div></td> <td width=\"60\" class=\"style24\"><div align=\"center\">".$userdata[$i]["mps"]."m/s "."</div></td> <td width=\"50\" class=\"style24\"><div align=\"center\">".$userdata[$i]["temp"]."°"."</div></td> <td class=\"style24\">".ucfirst(iso_UTF8($userdata[$i]["symname"]))." - ".ucfirst($userdata[$i]["winname"])." fra ".navigation($userdata[$i]["deg"])."</td> </tr>"; $date = $datakl[0]; $teller++; } } echo "</table>"; function date_to_timestamp($date) { $split_date = split ('-', $date); $split_date[5]='00'; $split_date[4]='00'; $split_date[3]='00'; $timestamp = mktime ($split_date[3], $split_date[4], $split_date[5], $split_date[1], $split_date[2], $split_date[0]); return $timestamp; } function iso_UTF8($UtfIso) { $UtfIso = str_replace("æ", "æ", $UtfIso);//æ $UtfIso = str_replace("Æ", "Æ", $UtfIso);//Æ $UtfIso = str_replace("ø", "ø", $UtfIso);//ø $UtfIso = str_replace("Ø", "Ø", $UtfIso);//Ø $UtfIso = str_replace("Ã¥", "å", $UtfIso);//å $UtfIso = str_replace("Ã…", "Å", $UtfIso);//Å return $UtfIso; } function navigation($grader) { global $navngrader; switch ($grader) { case ($grader <= 33.74 AND $grader >= 0): {$navngrader="nord"; break;} case ($grader <= 78.74 AND $grader >= 33.75): {$navngrader="nord øst"; break;} case ($grader <= 123.74 AND $grader >= 78.75): {$navngrader="øst"; break;} case ($grader <= 168.74 AND $grader >= 123.75): {$navngrader="sør øst"; break;} case ($grader <= 213.74 AND $grader >= 168.75): {$navngrader="sør"; break;} case ($grader <= 258.74 AND $grader >= 213.75): {$navngrader="sør vest"; break;} case ($grader <= 303.74 AND $grader >= 258.75): {$navngrader="vest"; break;} case ($grader <= 348.74 AND $grader >= 303.75): {$navngrader="nord vest"; break;} case ($grader <= 360 AND $grader >= 348.75): {$navngrader="nord"; break;} } return $navngrader; } ?> </table> </body><html> Lenke til kommentar
catoha Skrevet 12. april 2008 Forfatter Del Skrevet 12. april 2008 Supre svar folkens. Er muligens noe slikt jeg er på jakt etter.. Skal dytte den opp på serveren og se hva jeg kan få ut av den. Takker og bukker (igjen) Lenke til kommentar
catoha Skrevet 12. april 2008 Forfatter Del Skrevet 12. april 2008 HeiEr ikke helt sikker på hva du er ute etter om du skal ha søkemulighet eller bare liste ut perioden. Har et script her som jeg har funnet på PHP.net sine sider og modifisert det noe til min testing og kan være et utgangspunkt. Skulle det ikke være noe slikt som du var ute etter så se bort fra denne <?php if (!($fp=@fopen("http://www.yr.no/sted/Norge/Hordaland/Bergen/Bergen/varsel.xml", "r"))) die ("Couldn't open XML."); $usercount=0; $userda...... ................................. case ($grader <= 360 AND $grader >= 348.75): {$navngrader="nord"; break;} } return $navngrader; } ?> </table> </body><html> Strålende! Virker å være et veldig bra utgangspunkt. Du har ikke tilfeldigvis tilgang på de værsymbolene også? eller vet hvor de finnes? Lenke til kommentar
catoha Skrevet 12. april 2008 Forfatter Del Skrevet 12. april 2008 Et lite spørsmål til deg Icaro2 Har sett litt på scriptet ditt og ser veldig bra ut, men tenkte jeg skulle stille deg et raskt spørsmål. Dersom jeg ønsket å KUN vise værdata for eksempelvis 15.april 08 kl 18-00 (eller 18-20). Er det en enkelt sak å tilpasse scriptet ditt til det, og evt. hvordan? Takker uansett så langt for strålende hjelp. Lenke til kommentar
Icaro2 Skrevet 12. april 2008 Del Skrevet 12. april 2008 (endret) Hei Bra du kunne bruke scriptet Har symboler fra YR her som vedlegg Når du skal hente ut bare 1 dato ser jeg for meg en test mot dato og klokkeslett og er det riktig så vis kun denne forekomsten. Har ikke testet noe slik mulighet men det er der jeg ville startet sky.zip Endret 12. april 2008 av Icaro2 Lenke til kommentar
catoha Skrevet 12. april 2008 Forfatter Del Skrevet 12. april 2008 HeiBra du kunne bruke scriptet Har symboler fra YR her som vedlegg Når du skal hente ut bare 1 dato ser jeg for meg en test mot dato og klokkeslett og er det riktig så vis kun denne forekomsten. Har ikke testet noe slik mulighet men det er der jeg ville startet Forsøker meg på det... takker for symbolene Lenke til kommentar
qualbeen Skrevet 12. april 2008 Del Skrevet 12. april 2008 alle symboler ligger på yr sin server. Se api.yr.no. Vil anbefale å hente de ut der, for da får du uansett rett. Værmelding for gitt tidspunkt: xml-filene fra yr (i alle fall de som baserer seg på lengde-/breddegrad) gir det værmelding for alle tidspunkt på aktuelt sted 10 dager frem i tid. Første 3(?) døgn er det timesmelding, så blir det værmelding for 3 og 3 timer. Sjekk "from"-attributtet i xml'en, er lett å finne nærmeste hele time. Om du kan XPath er det en enkel og genial måte å finne frem på, men er ikke noen stor jobb å løse det hele i php heller. Vil anbefale deg å sette deg godt inn i dokumentasjonen, den inneholder egentlig veldig mye fin info http://api.yr.no/weatherapi/documentation Lenke til kommentar
uranus Skrevet 13. april 2008 Del Skrevet 13. april 2008 Hvorfor får jeg ikke sett den når jeg inkluderer fila? http://tgatebil.no/?s=vaer Eller når jeg går direkte til fila med ?s= ? Får kun sett innhold om jeg åpner fila som .php Lenke til kommentar
Peter Skrevet 13. april 2008 Del Skrevet 13. april 2008 Nå er det vel ikke lov til å bruke ikonene fra yr.no da. Anbefaler dessuten folk å se på enten simpleXML eller XSL for å gjøre denne jobbe i PHP. Lenke til kommentar
uranus Skrevet 13. april 2008 Del Skrevet 13. april 2008 Jeg har ikke simpleXML på min konto hos uniweb ser det ut som :/ Lenke til kommentar
Icaro2 Skrevet 13. april 2008 Del Skrevet 13. april 2008 Hei jeg ser at det er noen som mener at hente symboler fra Yr.no ikke er lov... Jo det er lov under visse betingelser. Har du laget en side med data fra YR.no skal du linke til yr på dems egen måte Se på denne http://www.yr.no/verdata/1.3321307 og denne (symboler) http://www.yr.no/om_yrno/1.1940495 ellers en fortsatt hyggelig kveld/natt Lenke til kommentar
qualbeen Skrevet 14. april 2008 Del Skrevet 14. april 2008 Nå er det vel ikke lov til å bruke ikonene fra yr.no da. Anbefaler dessuten folk å se på enten simpleXML eller XSL for å gjøre denne jobbe i PHP. Selvfølgelig er det lov å hente ut ikoner fra yr. Sett deg inn i api'en http://api.yr.no/weatherapi/weathericon/1.0/documentation XSLT er sikkert en grei måte å sortere og hente ut data, selv ville jeg allikevel holdt en knapp på XPath - som jo er omtrent to sider av samme sak --- Forstod ikke helt problemet uranus - url'en ?s=vaer fungerer da fint den! Lenke til kommentar
Peter Skrevet 14. april 2008 Del Skrevet 14. april 2008 Nå er det vel ikke lov til å bruke ikonene fra yr.no da. Anbefaler dessuten folk å se på enten simpleXML eller XSL for å gjøre denne jobbe i PHP. Selvfølgelig er det lov å hente ut ikoner fra yr. Sett deg inn i api'en http://api.yr.no/weatherapi/weathericon/1.0/documentation XSLT er sikkert en grei måte å sortere og hente ut data, selv ville jeg allikevel holdt en knapp på XPath - som jo er omtrent to sider av samme sak --- Forstod ikke helt problemet uranus - url'en ?s=vaer fungerer da fint den! Jeg tok feil ang. ikonene, jeg trodde bare man kunne bruke XML-ene. Jeg har vært inne i de fleste apiene der, dessverre er det ikke alle du har lov til å bruke, f.eks. et geografisk punkt som ikke har en side på yr.no, men heldigvis fant jeg ut at mye av det samme kan hentes fra api.met.no (Ting kan ha endret seg siden jeg fikk mailen fra Erik Bolstad, men den gangen sa han at det apiet var for kommersiell bruk) Lenke til kommentar
qualbeen Skrevet 14. april 2008 Del Skrevet 14. april 2008 Hmm.. okay. Ja, nei, det er nok av lover og regler å sette seg inn i I tilfelle jeg skulle ha sagt noe feil, får jeg oppfordre folk til å lese på http://www.yr.no/verdata/. Må si det er utrolig bra gjort av yr å gjøre tilgjenlig værdataene sine for folk. Håper flere andre selskaper blir inspirert Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå