Autor Zpráva
Jr6ous
Profil *
Chtěl bych vytahnout data z konkrétní stránky, ale jsou v dost komplikovaném zdrojaku, pomohl by mi někdo?


$web = file_get_contents("http://pocasi.chmi.cz/data/data.html","r");


ze zdroje např.:
<tr>
<td id="yellow">(J) Kraj Vysočina</td>
<td>
<div id="yellow">
<table>
<tr>
<td>
<div>Siln&eacute; bouřky</div>
                            od  15.07.2010 11:00
                            do  15.07.2010 22:00</td>
<td>
<img height="40px" src="./images/V_1.gif"/>
</td>
</tr>
</table>
</div>
<div id="yellow">
<table>
<tr>
<td>
<div>Nebezpeč&iacute; pož&aacute;rů</div>
                            od  14.07.2010 10:30
                            do odvol&aacute;n&iacute;</td>
<td>
<img height="40px" src="./images/I_1.gif"/>
</td>
</tr>
</table>
</div>
<div id="yellow">
<table>
<tr>
<td>
<div>Vysok&eacute; teploty</div>
                            od  14.07.2010 10:30
                            do  17.07.2010 18:00</td>
<td>
<img height="40px" src="./images/I_1.gif"/>
</td>
</tr>
</table>
</div>
</td>
</tr>

Chtěl bych dostat ifnormace o konkrétním kraji a to:
Silné bouřky od xx, do xxx
Vysoké teploty od xx, do xx


Moderátor Joker: Upřesnil jsem titulek
Hologos
Profil
Pokud je ten formát pořád stejný, tak na to využij regulární výrazy.
__construct
Profil
Hologos:
Som zvedavý akým regexpom by si to chcel vytiahnuť ..
Jr6ous:
Ak by to bolo nomálne napísané tak by sa na to dalo použiť v php DOMDocument, lenže s tak prasácky napísaným kódom to nepôjde. Skús si nájsť iného poskytovateľa napr. Google, Yahoo Weather, meteocentrum.cz,in-pocasi.cz atď
Chro
Profil
Jr6ous:
$data = explode('bouřky</div>', $web);
list($bourky) = explode('</td>', $data[1]);
$data = explode('teploty</div>', $web);
list($teploty) = explode('</td>', $data[1]);
echo 'Silné bouřky '.$bourky.'<br>Vysoké teploty '.$teploty;
Jr6ous
Profil *
Těžko použít jinou stránku pro data, nikde jinde jsem nezískal tyto meteo výstrahy.

Jde mi hlavně o to získat aktuální vystrahy v konkrétním kraji.
panther
Profil
Chro:
tohle by možná mohlo fungovat pro tento případ, ale ne, až se jednoho dne data změní (a že se počasí mění denně).
__construct
Profil
Jr6ous:
Ospravedlňujem sa - až teraz som si pozrel celý zdroják. Obsahuje XML časť ktorá sa dá parsovať - ako zistíš ľahko keď sa pozrieš na JS funkciu init() ale ty nemusíš prejsť celým poľom - stačí si načítať iba región s kódom ktorý chceš
<region .. code="T" .. end-time="2010-07-18T08:00:00" .. start-time="2010-07-15T10:30:00 .. >
Jr6ous
Profil *
To je pravda, můžete mi prosím pomoc se syntaxi, nedám to dohromady sám.

Výsledkem by mělo být např za Prahu
code="A"
toto:

Velmi vysoké teploty
od 16.07.2010 10:30 do 16.07.2010 18:00

Velmi silné bouřky
od 17.07.2010 10:00 do 18.07.2010 08:00

Silné bouřky
od 16.07.2010 11:00 do 17.07.2010 10:00

Nebezpečí požárů
od 15.07.2010 10:30 do 17.07.2010 23:59

Děkuju
Jr6ous
Profil *
Nebo alespoň funkci, která by vracela hodnotu Ano Ne podle toho zda by pro konkrétni kraj byla / nebyla vydána výstraha, jakákoliv.
Prosím

function zjistivystrahu($zkratkakraje) {

return A/N;
}


Děkuju za jakoukoli pomoc, sám to dohromady nedám :-(
Str4wberry
Profil
__construct: „lenže s tak prasácky napísaným kódom to nepôjde
Proč by to nemělo jít? Zase tak zlé to není.


Jr6ous:
V zásadě na to můžeš použít regulární výrazy nebo funkce DOMu a jednodušší regulární výrazy. Problém může být, pokud to nezvládneš sám, že ti to nikdo nebude ochotný zdarma napsat. Potom můžeš využít sekci Práce a zakázky.
xmark
Profil
Jr6ous:
Zkusil bych http://simplehtmldom.sourceforge.net, možná pomůže.
Jr6ous
Profil *
$html = file_get_html('http://pocasi.chmi.cz/data/data.html');


chyba:
Fatal error: Call to undefined function file_get_html() in /home.....

PHPinfo:
PHP Version 5.2.6-0.dotdeb.1
xmark
Profil
Jr6ous:
Nebude to také ľahké. Nejdřív musíš stáhnout ten http://sourceforge.net/project/showfiles.php?group_id=218559 a taky trochu nastudovat, jak to funguje.
Jr6ous
Profil *
include "./simple_html_dom.php";
$html = file_get_html('http://pocasi.chmi.cz/data/data.html');


foreach($html->find('region') as $element) {
        if ($element->code == 'A') {
            echo "Sledovaný region: ". $element->name;
            
        }
    }


Jak vypíšu jednotlivé jevy (awareness-type)?
Toto nefunguje:
echo "Sledovaný region: ". $element->awareness-type;

Zdroj:
<region awareness-level="yellow" awareness-level-code="1" code="A" end-day="soboty" end-time="2010-07-24T12:00:00" name="Praha" start-day="čtvrtka" start-time="2010-07-22T10:30:00">
 
<situation awareness-class="PVI_2010/55" awareness-level="yellow" awareness-level-code="1" awareness-type="Vydatn&yacute; d&eacute;šť" awareness-type-code="VI.1" awareness-type-group="Dešťov&eacute; sr&aacute;žky" end-day="soboty" end-elevation="1700" end-time="2010-07-24T12:00:00" start-day="p&aacute;tku" start-elevation="0" start-time="2010-07-23T08:00:00">
 
<critical-parameters>
 
<critical-parameter parameter-area=">30%" parameter-interval="6 hodin" parameter-type="sr&aacute;žky" parameter-units="mm" parameter-value=">30"></critical-parameter>
 
<critical-parameter parameter-area=">30%" parameter-interval="12 hodin" parameter-type="sr&aacute;žky" parameter-units="mm" parameter-value=">35"></critical-parameter>
 
<critical-parameter parameter-area=">30%" parameter-interval="24 hodin" parameter-type="sr&aacute;žky" parameter-units="mm" parameter-value=">40"></critical-parameter>
 
</critical-parameters>
 
</situation>
 
<situation awareness-class="PVI_2010/55" awareness-level="yellow" awareness-level-code="1" awareness-type="Vysok&eacute; teploty" awareness-type-code="I.1" awareness-type-group="Teplotn&iacute; a vlhkostn&iacute; podm&iacute;nky" end-day="čtvrtka" end-elevation="600" end-time="2010-07-22T21:00:00" start-day="čtvrtka" start-elevation="0" start-time="2010-07-22T10:30:00">
 
<critical-parameters>
 
<critical-parameter parameter-area=">50%" parameter-interval=">=2 dn&iacute;" parameter-type="maxim&aacute;ln&iacute; teplota" parameter-units="&deg;C" parameter-value=">30"></critical-parameter>
 
</critical-parameters>
 
</situation>
 
<situation awareness-class="PVI_2010/55" awareness-level="yellow" awareness-level-code="1" awareness-type="Siln&eacute; bouřky" awareness-type-code="V.1" awareness-type-group="Bouřky s doprovodn&yacute;mi jevy" end-day="p&aacute;tku" end-elevation="1700" end-time="2010-07-23T08:00:00" start-day="čtvrtka" start-elevation="0" start-time="2010-07-22T17:00:00">
 
<critical-parameters>
 
<critical-parameter parameter-area="5 až 30%" parameter-type="bouře nebo siln&eacute; bouře">     
<critical-parameter comparsion-operator="lt" parameter-type="průměr krup" parameter-units="cm" parameter-value="2"></critical-parameter>     
<critical-parameter parameter-interval="1 hod" parameter-type="množstv&iacute; sr&aacute;žek" parameter-units="mm" parameter-value=">30"></critical-parameter>     
<critical-parameter parameter-type="n&aacute;razy větru" parameter-units="m/s" parameter-value=">20"></critical-parameter>  
</critical-parameter>
 
<critical-parameter comparsion-operator="lt" parameter-type="průměr krup" parameter-units="cm" parameter-value="2"></critical-parameter>
 
<critical-parameter parameter-interval="1 hod" parameter-type="množstv&iacute; sr&aacute;žek" parameter-units="mm" parameter-value=">30"></critical-parameter>
 
<critical-parameter parameter-type="n&aacute;razy větru" parameter-units="m/s" parameter-value=">20"></critical-parameter>
 
</critical-parameters>
 
</situation>
 
</region>

__construct
Profil
Toto funguje :
<?php

include "./simple_html_dom.php";
$html = file_get_html('http://pocasi.chmi.cz/data/data.html');


foreach($html->find('region') as $element) {
        if ($element->code == 'A') {
            echo "<h2>". $element->name . "</h2>\n";
            echo $element->children[0]->attr['awareness-type']. "od ".$element->children[0]->attr['start-day']." do ".$element->children[0]->attr['end-day'];
            /*
            Toto používaj keď si chceš zobraziť nejakú premennú:
            echo "<pre>";
            var_export($element);
           */
        }
}
Jr6ous
Profil *
Děkuji, je to plně funkční

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: