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é 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čí požárů</div> od 14.07.2010 10:30 do odvolání</td> <td> <img height="40px" src="./images/I_1.gif"/> </td> </tr> </table> </div> <div id="yellow"> <table> <tr> <td> <div>Vysoké 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 |
#2 · Zasláno: 15. 7. 2010, 10:48:12
Pokud je ten formát pořád stejný, tak na to využij regulární výrazy.
|
||
__construct Profil |
#3 · Zasláno: 15. 7. 2010, 11:07:47
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 |
#4 · Zasláno: 15. 7. 2010, 12:01:53
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 * |
#5 · Zasláno: 15. 7. 2010, 14:39:28
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 |
#6 · Zasláno: 15. 7. 2010, 14:55:35
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 |
#7 · Zasláno: 15. 7. 2010, 15:00:24 · Upravil/a: __construct
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 * |
#8 · Zasláno: 16. 7. 2010, 08:52:08
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" 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 |
||
Časová prodleva: 6 dní
|
|||
Jr6ous Profil * |
#9 · Zasláno: 22. 7. 2010, 12:20:30
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 |
#10 · Zasláno: 22. 7. 2010, 12:29:32
__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 |
#11 · Zasláno: 22. 7. 2010, 12:31:48
Jr6ous:
Zkusil bych http://simplehtmldom.sourceforge.net, možná pomůže. |
||
Jr6ous Profil * |
#12 · Zasláno: 22. 7. 2010, 13:01:22
$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 |
#13 · Zasláno: 22. 7. 2010, 13:05:33
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 * |
#14 · Zasláno: 22. 7. 2010, 13:45:26
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ý déšť" awareness-type-code="VI.1" awareness-type-group="Dešťové srážky" end-day="soboty" end-elevation="1700" end-time="2010-07-24T12:00:00" start-day="pá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ážky" parameter-units="mm" parameter-value=">30"></critical-parameter> <critical-parameter parameter-area=">30%" parameter-interval="12 hodin" parameter-type="srážky" parameter-units="mm" parameter-value=">35"></critical-parameter> <critical-parameter parameter-area=">30%" parameter-interval="24 hodin" parameter-type="sráž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é teploty" awareness-type-code="I.1" awareness-type-group="Teplotní a vlhkostní podmí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í" parameter-type="maximální teplota" parameter-units="°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é bouřky" awareness-type-code="V.1" awareness-type-group="Bouřky s doprovodnými jevy" end-day="pá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é 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í srážek" parameter-units="mm" parameter-value=">30"></critical-parameter> <critical-parameter parameter-type="ná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í srážek" parameter-units="mm" parameter-value=">30"></critical-parameter> <critical-parameter parameter-type="nárazy větru" parameter-units="m/s" parameter-value=">20"></critical-parameter> </critical-parameters> </situation> </region> |
||
__construct Profil |
#15 · Zasláno: 22. 7. 2010, 14:20:41 · Upravil/a: __construct
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 * |
#16 · Zasláno: 23. 7. 2010, 08:20:28
Děkuji, je to plně funkční
|
||
Časová prodleva: 14 let
|
0