"Vycucnutí" hodnot z html přes php – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

"Vycucnutí" hodnot z html přes php – PHP – Fórum – Programujte.com"Vycucnutí" hodnot z html přes php – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
xhonzax0
Duch
9. 6. 2014   #1
-
0
-

Zdravím,

potřebuji poradit zdali existuje nějaká funkce v PHP, která by mi v HTML kódu našla hodnoty, které potřebuji následně zpracovat. Jde o to, že si ze serveru natáhnu stránku do proměnné. V proměnné mám celou stránku, ale protože nepotřebuji zbytečnosti kolem, ale jen pár hodnot, chtěl bych je z toho kódu nějak dostat do mých nachystaných proměnných.

Řekněme, že v celém kódu je tato část:

<th class="tbl_hdr">Název stanice</th>
<td >Batelov</td>


Myšlenka je taková, že bych se orientoval podle "Název stanice" a vím, že po deseti znacích je názve oné stanice. A tu potřebuji nějak dostat do mé proměnné. Problém je ten, že stránka je vždy jiná a já se mohu orientovat dle těchto záchytných bodů.
Hledal jsem dlouho a nenašel nic, asi neumím pořádně definovat, co potřebuji. :(

Nahlásit jako SPAM
IP: 193.17.251.–
Reklama
Reklama
Kit+11
Guru
9. 6. 2014   #2
-
0
-

#1 xhonzax
Jde to poměrně snadno, zkus si to vytáhnout z tohoto:

https://gist.github.com/kitsaels/db82b419a7a33f993952

Je to skoro všechno, jen jsem změnil jméno serveru a ořezal výstup. Tedy krátký skript a k tomu výstupní šablona, která mi z vycucnutých dat udělá nečíslovaný seznam v HTML.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
xhonzax0
Duch
9. 6. 2014   #3
-
0
-

Pochopil jsem-li to dobře, tak v php si natáhnu onu požadovanou stránku a v tom .xls souboru provádím "výběr" hodnot, které zobrazím? Omlouvám se za trapné dotazy, ale v programování jse kompletně zakrněl. :D

Nahlásit jako SPAM
IP: 193.17.251.–
Kit+11
Guru
9. 6. 2014   #4
-
0
-

#3 xhonzax
Přesně tak. Jen ten XSL soubor je trochu komplikovaný, protože ten HTML kód, ze kterého jsem vyzobával data, byl dost mizerně napsaný. Budeš tam mít vlastně jen jednu podmínku: 

<xsl:value-of select="//th[@class='tbl_hdr']/following-sibling::text()[1]"/>

Ten XSL soubor zajistí i správné naformátování výstupního HTML.

Tomu stringu v atributu "select" se říká XPath, kdybys to hledal.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
xhonzax0
Duch
9. 6. 2014   #5
-
0
-

#4 Kit
Ano, komplikovaný je dost. Měl bych k němu pár dotazů. Po dlouhém zkoumání jsem vydedukoval, že podmínky typu:  

<xsl:template match="/html">
<xsl:apply-templates select="//div[@id='discussionList']/ul"/>
</xsl:template>
 
<xsl:template match="ul">
<ul>
<xsl:apply-templates select="li[@class='clear']/span/a"/>
</ul>
</xsl:template>


mi zajisťují postupné vnořování do dokumentu. A tato podmínka mi udává, co z něj chci vytáhnout:

<xsl:template match="a">
<li>
<span style="width:6em">
<xsl:value-of select="../../span/span[2]/text()"/>&#160;
</span>
<xsl:copy select=".">
<xsl:attribute name="target">blank</xsl:attribute>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
Počet reakcí: <xsl:value-of select="../../span/span/span/a"/>
</li>
</xsl:template>

Je to tak?

Kód mi už jakž takž funguje, jen mi bere všechny věci z tabulky. Jak docílit aby bral pouze některé? Podle tříd se orientovat nemůžu, protože data tahám z cizího serveru, kde je nemůžu nijak upravit.

Nahlásit jako SPAM
IP: 193.17.251.–
peter
~ Anonymní uživatel
2528 příspěvků
9. 6. 2014   #6
-
0
-

http://peter-mlich.wz.cz/web/php/pr/wheather-wunderground.php
http://peter-mlich.wz.cz/…erground.txt
 

$url   = "http://rss.wunderground.com/auto/rss_full/global/stations/11782.xml?units=metric";	// Ostrava, CZ
$data  = file_get_contents($url);	//$data  = iconv("iso-8859-2", "UTF-8", $data );
$xml   = simplexml_load_string($data);

$att = 'description'echo $xml->channel->item->{$att);
Nahlásit jako SPAM
IP: 2001:718:2601:258:3d4f:ac...–
Kit+11
Guru
9. 6. 2014   #7
-
0
-
Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ericsko+3
Stálý člen
9. 6. 2014   #8
-
0
-

To xml mi pride take prekomplikovane..

Skusil by som http://simplehtmldom.sourceforge.net/

require('simple_html_dom.php');

$url = "http://<cesta k suboru>";

$html = new simple_html_dom();
$html->load_file($url);

$station = $html->find('th[class=tbl_hdr]', 0)->next_sibling ()->outertext;
Nahlásit jako SPAM
IP: 88.212.34.–
Kit+11
Guru
9. 6. 2014   #9
-
0
-

#8 Ericsko
Asi jsi chtěl napsat: "To XSL mi pride take prekomplikovane..."

Uznávám, na jednu položku to asi bude kanón na vrabce. Na filtrování vstupu nebo formátování výstupního HTML se to však hodí.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ericsko+3
Stálý člen
9. 6. 2014   #10
-
0
-
Nahlásit jako SPAM
IP: 88.212.34.–
peter
~ Anonymní uživatel
2528 příspěvků
10. 6. 2014   #11
-
0
-

Tak, on se da pouzit i str_pos nebo preg_, na jednu polozku.

Nahlásit jako SPAM
IP: 2001:718:2601:258:285b:52...–
Kit+11
Guru
10. 6. 2014   #12
-
0
-

#11 peter
Dá, ale XML nástroje poskytují lepší komfort. Konvertují entity, vyhází komentáře a nemají potíže se zalomeným textem.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ericsko+3
Stálý člen
10. 6. 2014   #13
-
0
-

#12 Kit
Preto to mam rad takto jquery-like ;)

Nahlásit jako SPAM
IP: 88.212.34.–
Kit+11
Guru
10. 6. 2014   #14
-
0
-

#13 Ericsko
To ano, jen mi trochu uniká, k čemu je ten

require('simple_html_dom.php');

Není tam zbytečný? Vždyť to má stejnou funkci jako nativní nástroje, které už v PHP jsou.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ericsko+3
Stálý člen
Nahlásit jako SPAM
IP: 84.47.16.–
Kit+11
Guru
10. 6. 2014   #16
-
0
-

#15 Ericsko
Probírám se zdrojákem a stále netuším, jakou to má výhodu proti standardní třídě DOMDocument.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ericsko+3
Stálý člen
10. 6. 2014   #17
-
0
-

#16 Kit
Tak nic ;)

Nahlásit jako SPAM
IP: 84.47.16.–
Kit+11
Guru
10. 6. 2014   #18
-
0
-

#17 Ericsko
Tahle metoda mě pobavila: 

<?php
function __get($name) {
    switch ($name) {
        case 'outertext': return $this->root->innertext();
        case 'innertext': return $this->root->innertext();
        case 'plaintext': return $this->root->text();
        case 'charset': return $this->_charset;
        case 'target_charset': return $this->_target_charset;
    }
}

Vidím, že není rozdíl mezi innertext a outertext. Dále jsem tam našel podporu pro ISO Latin1, ale chybí tam ISO Latin2. Podobně je tam i podpora pro západoevropské kódování Windows, ale chybí podpora pro středoevropské kódování Windows. Psali to minimálně dva programátoři, každý jiným stylem. Našel jsem tam i dost prasáckých konstrukcí typu globální proměnné apod.

EDIT: Tohle jsem zkusil ve standardním PHP a funguje mi to:

<?php
$doc = new DOMDocument();
@$doc->loadHTMLFile("http://www.server.cz/");
$xpath = new DOMXpath($doc);
$elements = $xpath->query(
    "//th[@class='tbl_hdr']/following-sibling::text()[1]"
);
foreach ($elements as $element) {
    print_r($element);
}
Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ericsko+3
Stálý člen
10. 6. 2014   #19
-
0
-

#18 Kit
Ved vravim. Tak nic.

Musis rozlisovat medzi dokonalostou a funkcnostou.

K tej dokonalosti mame my ostatni daleko.

Peace.

Nahlásit jako SPAM
IP: 84.47.16.–
Kit+11
Guru
10. 6. 2014   #20
-
0
-

#19 Ericsko
Horší je, že mi ta cizí knihovna nefunguje.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ericsko+3
Stálý člen
10. 6. 2014   #21
-
0
-

#20 Kit
Vidis, ja viem rozchodit aj cudziu kniznicu, tak ze funguje :D

Nahlásit jako SPAM
IP: 84.47.16.–
xhonzax0
Duch
13. 6. 2014   #22
-
0
-

Konečně jsem se dostal po těch třech dnech k počítači. :) Nakonec jsem využil první metody (když už jsem si dal tolik práce s louskáním, jak to vlastně funguje). :D Chtěl bych vám všem zúčastněným poděkovat za rady a hlavně, že jsem nebyl poslán tam, kde slunce nesvítí. :)

Jinak ano, ono možná pro moji potřebu to je "kanón na vrabce", ale zase jsem si říkal, co se v mládí naučíš ... ;)

Takže ještě jednou moc díky. :)

Nahlásit jako SPAM
IP: 193.17.251.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 49 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý