{"id":378,"date":"2011-02-01T17:07:59","date_gmt":"2011-02-01T16:07:59","guid":{"rendered":"https:\/\/www.giannifavilli.it\/blog\/?p=378"},"modified":"2022-02-22T16:07:42","modified_gmt":"2022-02-22T15:07:42","slug":"parser-xml-asp-googlemeteo","status":"publish","type":"post","link":"https:\/\/www.giannifavilli.it\/blog\/parser-xml-asp-googlemeteo\/","title":{"rendered":"Parser da XML a ASP del File Meteo (Yahoo! Weather, Weather.com)"},"content":{"rendered":"<p><a href=\"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2011\/01\/meteo_icon_set.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft\" title=\"meteo_icon_set\" src=\"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2011\/01\/meteo_icon_set-225x300.jpg\" alt=\"Set di Icone Meteo\" width=\"135\" height=\"180\"><\/a>Google fornisce un ottimo servizio GRATUITO di informazioni meteo e rende queste informazioni disponibili a tutti in un file XML consultabile gratuitamente e aggiornato di ora in ora.<\/p>\n<p>Dato che esistono molti servizi che forniscono plugin o iframe da aggiungere a siti web ma la maggior parte sono a pagamento, se non vogliamo spendere un euro e divertirci a scriptare, per avere sul nostro bel sito informazioni sulle condizioni meteo della nostra localit\u00e0, dobbiamo fare un PARSER del file XML fornito da google e farlo scrivere ad una pagina ASP. Il risultato lo potete vedere su questo sito <a href=\"http:\/\/www.carbonifera.it\" target=\"_blank\" rel=\"noopener noreferrer\">www.carbonifera.it<\/a><\/p>\n<p><!--more--><\/p>\n<div class=\"alert alert-error fade in\" style=\"text-align: center;\"><strong>Attenzione questo articolo non \u00e8 pi\u00f9 valido!<br \/>\n<\/strong>I servizi che offrivano le previsioni sono stati chiusi ma puoi prendere spunto su come funziona il parsing per fartene uno tutto tuo o provare ad utilizzare <a href=\"https:\/\/openweathermap.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Open Weather Map.<\/a><br \/>\nTutto l&#8217;articolo che segue \u00e8 da leggera a solo scopo didattico o per prendere spunto. gli esempi che seguono non funzioneranno.<\/div>\n<p>Adesso prover\u00f2 a spiegare come ho fatto, non sono operazioni per principianti ma ho cercato di commetare i codici il pi\u00f9 possile e se uno persona principiante \u00e8 dotata di tanta pazienza e una buona predisposizione alla ricerca in google potr\u00e0 sicuramente ottenere il risultato atteso.<\/p>\n<p>Presupponiamo che voglia integrare informazioni meteo riguardanti Roma sul proprio sito in ASP, dovro utilizzare il seguente link che punta al famoso file XML fornito da Google.<\/p>\n<p><strong>http:\/\/www.google.com\/ig\/api?weather=Roma,italy&amp;hl=it<\/strong><\/p>\n<p>Se notate bene, all&#8217;interno della stringa \u00e8 riportata la citt\u00e0, esso funziona con tutte le localit\u00e0 italiane, baster\u00e0 sostituire nella stringa <em><strong>weather=Roma,italy<\/strong><\/em> con <em><strong>weather=TUACITTA,italy<\/strong><\/em><\/p>\n<h4>Analizziamo il file XML di Google<\/h4>\n<pre class=\"brush:xml  \">&lt;weather module_id=\"0\" tab_id=\"0\" mobile_row=\"0\" mobile_zipped=\"1\" row=\"0\" section=\"0\"&gt;\n&lt;!--informazioni sulla localit\u00e0 e la data di aggiornamento del file--&gt;\n&lt;forecast_information&gt;\n&lt;city data=\"Rome, Lazio\"\/&gt;\n&lt;postal_code data=\"Roma,italy\"\/&gt;\n&lt;latitude_e6 data=\"\"\/&gt;\n&lt;longitude_e6 data=\"\"\/&gt;\n&lt;forecast_date data=\"2011-01-27\"\/&gt;\n&lt;current_date_time data=\"2011-01-27 15:15:00 +0000\"\/&gt;\n&lt;unit_system data=\"SI\"\/&gt;\n&lt;\/forecast_information&gt;\n&lt;!--informazioni condizioni attuali--&gt;\n&lt;current_conditions&gt;\n&lt;condition data=\"Per lo pi\u00f9 nuvoloso\"\/&gt; &lt;!--descrizione meteorologica--&gt;\n&lt;temp_f data=\"52\"\/&gt; &lt;!--temperarura in gradi Fahrenheit--&gt;\n&lt;temp_c data=\"11\"\/&gt; &lt;!--temperatura in gradi Celsius --&gt;\n&lt;humidity data=\"Umidit\u00e0: 54%\"\/&gt; &lt;!--umidita'--&gt;\n&lt;icon data=\"\/ig\/images\/weather\/mostly_cloudy.gif\"\/&gt;&lt;!--icona gif meteorlogica--&gt;\n&lt;wind_condition data=\"Vento: N a 6 km\/h\"\/&gt; &lt;!--vento direzione e velocita'--&gt;\n&lt;\/current_conditions&gt;\n&lt;!--informazioni generali giorno attuale--&gt;\n&lt;forecast_conditions&gt;\n&lt;day_of_week data=\"gio\"\/&gt; &lt;!--iniziale giorno della settimana--&gt;\n&lt;low data=\"1\"\/&gt; &lt;!--temperatura minima in celsisus--&gt;\n&lt;high data=\"12\"\/&gt; &lt;!--temperatura massima in celsisus--&gt;\n&lt;icon data=\"\/ig\/images\/weather\/mostly_sunny.gif\"\/&gt; &lt;!--icona gif meteorlogica--&gt;\n&lt;condition data=\"Parzialmente soleggiato\"\/&gt; &lt;!--descrizione meteorologica--&gt;\n&lt;\/forecast_conditions&gt;\n&lt;!--informazioni primo giorno successivo all'attuale--&gt;\n&lt;forecast_conditions&gt;\n&lt;day_of_week data=\"ven\"\/&gt;\n&lt;low data=\"4\"\/&gt;\n&lt;high data=\"12\"\/&gt;\n&lt;icon data=\"\/ig\/images\/weather\/chance_of_rain.gif\"\/&gt;\n&lt;condition data=\"Possibilit\u00e0 di pioggia\"\/&gt;\n&lt;\/forecast_conditions&gt;\n&lt;!--informazioni secondo giorno successivo all'attuale--&gt;\n&lt;forecast_conditions&gt;\n&lt;day_of_week data=\"sab\"\/&gt;\n&lt;low data=\"5\"\/&gt;\n&lt;high data=\"13\"\/&gt;\n&lt;icon data=\"\/ig\/images\/weather\/mostly_sunny.gif\"\/&gt;\n&lt;condition data=\"Parzialmente soleggiato\"\/&gt;\n&lt;\/forecast_conditions&gt;\n&lt;!--informazioni terzo giorno successivo all'attuale--&gt;\n&lt;forecast_conditions&gt;\n&lt;day_of_week data=\"dom\"\/&gt;\n&lt;low data=\"1\"\/&gt;\n&lt;high data=\"12\"\/&gt;\n&lt;icon data=\"\/ig\/images\/weather\/chance_of_rain.gif\"\/&gt;\n&lt;condition data=\"Possibilit\u00e0 di pioggia\"\/&gt;\n&lt;\/forecast_conditions&gt;\n&lt;\/weather&gt;\n&lt;\/xml_api_reply&gt;<\/pre>\n<h4>Scriviamo il file ASP che <em>parser\u00e0<\/em> i dati XML<\/h4>\n<p>Dopo aver analizzato l&#8217;XML e come Goggole invia le informazioni incomiciamo a scrivere il file in ASP<\/p>\n<div class=\"clear-block\"><div class=\"ad alignnone\">\n\t\t\t\t<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n\t\t\t\t<!-- GianniFavilli - Responsive -->\n\t\t\t\t<ins class=\"adsbygoogle\"\n\t\t\t\t     style=\"display:block\"\n\t\t\t\t     data-ad-client=\"ca-pub-1205156047762515\"\n\t\t\t\t     data-ad-slot=\"6873384605\"\n\t\t\t\t     data-ad-format=\"auto\"><\/ins>\n\t\t\t\t<script>\n\t\t\t\t(adsbygoogle = window.adsbygoogle || []).push({});\n\t\t\t\t<\/script>\n\t\t\t\t<\/div><\/div>\n<pre class=\"brush:vb\">&lt;%\n' Inizializzazione\nSet objXML = Server.CreateObject(\"Microsoft.XMLDOM\")\nobjXML.setProperty \"ServerHTTPRequest\", true\nobjXML.async = False\n\n' Preleva e Carica il file XML\nstrFile= \"http:\/\/www.google.com\/ig\/api?weather=Roma,italy&amp;hl=it\"\nobjXML.Load (strFile)\n\n' Scrive il giorno attuale\n' apro un paragrafo e recupero da google l'icona meteo\nResponse.Write(\"&lt;p&gt;&lt;img src='http:\/\/www.google.com\/ig\/images\/weather\/\" &amp; objXML.selectSingleNode(\"\/\/current_conditions\/icon\").Attributes.GetNamedItem(\"data\").Text &amp; \"' alt='\" &amp; objXML.selectSingleNode(\"\/\/current_conditions\/icon\").Attributes.GetNamedItem(\"data\").Text &amp; \"' \/&gt;\")\n' scrivo condizioni attuali da \"current_conditions\" dell'XML prendo il nodo \"condition\"\nResponse.Write(\"&lt;METEO Condizioni attuali\")\nResponse.Write(\"&lt;br\/&gt;\" &amp; objXML.selectSingleNode(\"\/\/current_conditions\/condition\").Attributes.GetNamedItem(\"data\").Text &amp; \"\")\n\n' scrivo la temperatura da \"current_conditions\" dell'XML prendo il nodo \"temp_c\"\nResponse.Write(\"&lt;br\/&gt;Temperatura: \" &amp; objXML.selectSingleNode(\"\/\/current_conditions\/temp_c\").Attributes.GetNamedItem(\"data\").Text &amp; \"\u00b0C\")\n' scrivo umidita' da \"current_conditions\" dell'XML prendo il nodo \"humidity\"\nResponse.Write(\"&lt;br\/&gt;\" &amp; objXML.selectSingleNode(\"\/\/current_conditions\/humidity\").Attributes.GetNamedItem(\"data\").Text &amp; \"\")\n\n' scrivo condizioni del vento da \"current_conditions\" dell'XML prendo il nodo \"wind_condition\"\nResponse.Write(\"&lt;br\/&gt;\" &amp; objXML.selectSingleNode(\"\/\/current_conditions\/wind_condition\").Attributes.GetNamedItem(\"data\").Text &amp; \"&lt;\/p&gt;\")\n'chiudo il paragrafo\n\n' Cicla e Scrive gli altri giorni della settimana\n'imposto il ciclo su TUTTI i nodi \"forecast_conditions\" che riguuardano i giorni successivi\nSet AllItems = objXML.selectNodes(\"\/\/forecast_conditions\")\nFor v = 0 to (AllItems.Length - 1)\nSet Giorno = AllItems(v).selectNodes(\"day_of_week\") ' imposto tutti i day_of_week come Giorno\nSet Cond = AllItems(v).selectNodes(\"condition\") ' imposto tutti i condition come Cond\nSet Icon = AllItems(v).selectNodes(\"icon\") ' imposto tutti i icon come Icon\nSet Low = AllItems(v).selectNodes(\"low\") ' imposto tutti i low temperatura minima come Low\nSet High = AllItems(v).selectNodes(\"high\") ' imposto tutti i high temperatura massima come High\nFor u = 0 To Giorno.length - 1\n\n'apro un paragrafo e recupero da google l'icona meteo\nResponse.Write(\"&lt;p&gt;&lt;img src='http:\/\/www.google.com\/ig\/images\/weather\/\" &amp; Icon(u).GetAttribute(\"data\") &amp; \"' alt='\" &amp; Icon(u).GetAttribute(\"data\") &amp; \"' \/&gt;\")\n\nResponse.Write(\"&lt;strong&gt;METEO&lt;\/strong&gt;&lt;br\/&gt;\")\n' dato che l'xml di google fornisce solo le inizali dei giorni della settimana\n' ma al sottoscritto piace avere il giorno scritto per intero creo una select case che\n' al dato valore corrispondente all'iniziale del giorno in questione scrivo \"Previsione di GIORNO_TALE\"\nselect case Giorno(u).GetAttribute(\"data\")\ncase \"lun\"\nResponse.Write(\"Previsione di lunedi'&lt;br\/&gt;\")\ncase \"mar\"\nResponse.Write(\"Previsione di martedi'&lt;br\/&gt;\")\ncase \"mer\"\nResponse.Write(\"Previsione di mercoledi'&lt;br\/&gt;\")\ncase \"gio\"\nResponse.Write(\"Previsione di giovedi'&lt;br\/&gt;\")\ncase \"ven\"\nResponse.Write(\"Previsione di venerdi'&lt;br\/&gt;\")\ncase \"sab\"\nResponse.Write(\"Previsione di sabato&lt;br\/&gt;\")\ncase \"dom\"\nResponse.Write(\"Previsione di domenica&lt;br\/&gt;\")\nend select\n\n' scrivo le condizioni attuali\nResponse.Write(\"&lt;br\/&gt;\" &amp; Cond(u).GetAttribute(\"data\") &amp; \"&lt;br\/&gt;\")\n\n' scrivo la temperatura minima\nResponse.Write(\"&lt;br\/&gt;Temperatura min: \" &amp; Low(u).GetAttribute(\"data\") &amp; \"\u00b0C\")\n\n' scrivo la temperatura massima\nResponse.Write(\"&lt;br\/&gt;Temperatura MAX: \" &amp; High(u).GetAttribute(\"data\") &amp; \"\u00b0C\")\nResponse.Write(\"&lt;\/p&gt;\")\n' chiudo il paragrafo\n\n'cicla per tutti gli altri nodi di forecast_conditions\nnext\nSet Giorno = nothing\nSet Cond = nothing\nSet Icon = nothing\nSet Low = nothing\nSet High = nothing\nNext\nSet AllItems = nothing\n%&gt;<\/pre>\n<h4>Aggiungiamo un effetto cool al nostro parser<\/h4>\n<p>Dato che cos\u00ec come \u00e8 il file ASP scrive una serie di paragrafi uno sotto l&#8217;altro tipo lista, aggiungiamo un effetto rotativo ai nostri dati parsati.<\/p>\n<p>Per aggiungere tale effetto rotante possiamo usare <a href=\"http:\/\/jquery.malsup.com\/cycle\/\" target=\"_blank\" rel=\"noopener noreferrer\">jQuery Cycle Plugin<\/a> una fantastica libreria jQuery che crea degli effetti nei tag HTML (DIV, PARAGRAFI, etc.) che hanno determinati <em>class<\/em> o <em>id<\/em><\/p>\n<p>Nel mio caso ho inserito un div prima del codice ASP con classe <em>pippo (class=&#8221;pippo&#8221;<\/em>)<\/p>\n<p>Ho inserito il seguente sjavascript nel body a monte del codice ASP e del DIV<\/p>\n<div class=\"clear-block\"><div class=\"ad alignnone\">\n\t\t\t\t<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n\t\t\t\t<!-- GianniFavilli - Responsive -->\n\t\t\t\t<ins class=\"adsbygoogle\"\n\t\t\t\t     style=\"display:block\"\n\t\t\t\t     data-ad-client=\"ca-pub-1205156047762515\"\n\t\t\t\t     data-ad-slot=\"6873384605\"\n\t\t\t\t     data-ad-format=\"auto\"><\/ins>\n\t\t\t\t<script>\n\t\t\t\t(adsbygoogle = window.adsbygoogle || []).push({});\n\t\t\t\t<\/script>\n\t\t\t\t<\/div><\/div>\n<pre class=\"brush:js\">&lt;script type=\"text\/javascript\"&gt;\n$(document).ready(function() {\n    $('.pippo').cycle({ \/*con . \u00e8 la class con # \u00e8 un id del tag html a cui volete applicare l'effetto*\/\n\t\tfx: 'turnDown', \/*tipo di effetto, guardare la documentazione del plugin*\/\n\t\tspeed:  1500, \/*velocit\u00e0 di rotazione*\/\n\t\ttimeout: 10000, \/*tempo di ritardo*\/\n\t});\n});\n&lt;\/script&gt;<\/pre>\n<p><strong>Un esempio visibile \u00e8 disponibile su questo sito: <a href=\"http:\/\/www.carbonifera.it\" target=\"_blank\" rel=\"noopener noreferrer\">www.carbonifera.it<\/a><\/strong><\/p>\n<p>Spero che tutto ci\u00f2 vi sia utile.<\/p>\n<p>Buone previsioni a tutti!!!<br \/>\n\t<!--\n\t<div class=\"paga_box_sandbox\"><h4>In questo momento non fare donazioni, sto testando il sistema. Grazie!<\/h4>\t<p>Donazione per il mantenimento del blog<\/p>\n\t<form method=\"post\" name=\"paypal_form_donag_767\" action=\"https:\/\/www.sandbox.paypal.com\/cgi-bin\/webscr\">\n\t\t<input type=\"hidden\" name=\"business\" value=\"info@giannifavilli.it\" \/>\n\t\t<input type=\"hidden\" name=\"cmd\" value=\"_donations\" \/>\n\t\t<input type=\"hidden\" name=\"return\" value=\"http:\/\/www.giannifavilli.it\/blog\/grazie\/\" \/>\n\t\t<input type=\"hidden\" name=\"cancel_return\" value=\"http:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/posts\/378\" \/>\n\t\t<input type=\"hidden\" name=\"notify_url\" value=\"http:\/\/www.giannifavilli.it\/listen\/donazione_pp_ipn.php\" \/>\n\t\t<input type=\"hidden\" name=\"rm\" value=\"2\" \/>\n\t\t<input type=\"hidden\" name=\"currency_code\" value=\"EUR\" \/>\n\t\t<input type=\"hidden\" name=\"lc\" value=\"IT\" \/>\n\t\t<input type=\"hidden\" name=\"cbt\" value=\"Grazie! Premi qui per torna sul blog\" \/>\n\t\t<input type=\"hidden\" name=\"item_name\" value=\"Donazione per il mantenimento del blog Gianni Favilli\" \/>\n\t\t<div style=\"text-align:center; width:100%; margin: auto;\">\n\t\t<select class=\"\" name=\"amount\" id=\"amount\" style=\"margin: auto;\">\n\t\t\t<option value=\"1\">Offrimi un Caff\u00e8 - 1 Euro<\/option>\n\t\t\t<option value=\"3\">Offrimi un Aperitivo - 3 Euro<\/option>\n\t\t\t<option value=\"5\">Offrimi una Birra - 5 Euro<\/option>\n\t\t\t<option value=\"15\">Offrimi una Pizza - 15 Euro<\/option>\n\t\t\t<option value=\"25\">Offrimi una Cena - 25 Euro<\/option>\n\t\t<\/select>\n\t\t<\/div>\n\t\t<!\/\/\/\/--<input type=\"hidden\" name=\"custom\" value=\"\" \/>-\/\/\/\/->\n\t\t<input type=\"hidden\" name=\"custom\" value=\"DonazioneGenericaGF\" \/>\n\t\t<input type=\"hidden\" name=\"no_note\" value=\"1\" \/>\n\t\t<input class=\"pulsantepp\" type=\"image\" src=\"https:\/\/www.paypalobjects.com\/it_IT\/IT\/i\/btn\/btn_donateCC_LG.gif\" name=\"submit\" alt=\"PayPal - Il metodo rapido, sicuro e affidabile per fare donazioni.\" \/>\n\t<\/form>\n\t<\/div>\n\t-->\n\t<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Google fornisce un ottimo servizio GRATUITO di informazioni meteo e rende queste informazioni disponibili a tutti in un file XML consultabile gratuitamente e aggiornato di ora in ora. Dato che esistono molti servizi che forniscono plugin o iframe da aggiungere a siti web ma la maggior parte sono a pagamento, se non vogliamo spendere un euro e divertirci a scriptare, per avere sul nostro bel sito informazioni sulle condizioni meteo della nostra localit\u00e0, dobbiamo fare un PARSER del file XML fornito da google e farlo scrivere ad una pagina ASP. Il risultato lo potete vedere su questo sito www.carbonifera.it<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[17],"tags":[27,29,23,22,21,28,26],"class_list":["post-378","post","type-post","status-publish","format-standard","hentry","category-programmazione","tag-asp","tag-google","tag-html","tag-javascript","tag-jquery","tag-parse","tag-xml"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4SGGs-66","_links":{"self":[{"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/posts\/378","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/comments?post=378"}],"version-history":[{"count":0,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/posts\/378\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/media?parent=378"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/categories?post=378"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/tags?post=378"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}