NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
tbartolen
Člen
Avatar
tbartolen:29.7.2017 19:53

Zdar,
V jiném topiku tady na foru jsem dostal radu, jak dostat pomocí parsování data z jedné stránky na jinou.

  1. Stáhl jsem si data odtud:

http://simplehtmldom.sourceforge.net/

  1. Založil jsem projekt v NET beans a přesunul stažená data do stejné složky.
  2. zkusil jsem default příkaz z http://simplehtmldom.sourceforge.net/ do projektu a spustil to, dostanu fatal erorr
$html = file_get_html('http://www.google.com/');

Fatal error: Uncaught Error: Call to undefined function file_get_html() in C:\xampp\htdoc­s\PhpProject1\in­dex.php:15 Stack trace: #0 {main} thrown in C:\xampp\htdoc­s\PhpProject1\in­dex.php on line 15

Chápu to dobře tak, že bych měl vytvořit DOM objekt z URL, kterou chci použít, pak si v ní vyhledat data které potřebuji a to vložit na svojí stránku? Díky za radu, já s PHP moc neumím...

Odpovědět
29.7.2017 19:53
Navštiv www.fb.com/skkelticz
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:29.7.2017 19:57

Ahoj, tak zase ja :)
takova funkce neexistuje - musis pouzit file_get_contents

Editováno 29.7.2017 19:57
 
Nahoru Odpovědět
29.7.2017 19:57
Avatar
tbartolen
Člen
Avatar
Odpovídá na Jiří Fencl
tbartolen:29.7.2017 20:01

Aha ale v navodu na te adrese pisou presne tenhle příkaz...zkusim to o polocase fotbalu

Nahoru Odpovědět
29.7.2017 20:01
Navštiv www.fb.com/skkelticz
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:29.7.2017 20:04

Ajo promin - moje chyba...

musis tu knihovnu nejdrive includnout do PHP a pak ta funkce pojede

 
Nahoru Odpovědět
29.7.2017 20:04
Avatar
tbartolen
Člen
Avatar
Odpovídá na Jiří Fencl
tbartolen:29.7.2017 20:05

Naincludovat knihovnu do php? Mrknu na google pak jak se to dělá, nemam tušení

Editováno 29.7.2017 20:07
Nahoru Odpovědět
29.7.2017 20:05
Navštiv www.fb.com/skkelticz
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:29.7.2017 20:08

Nejdriv stahnes knihovnu z https://sourceforge.net/…mldom/files/ a pak pred pouzitim te funkce pouzijes require_once('ces­takeknihovne/sim­ple_html_dom.php');

 
Nahoru Odpovědět
29.7.2017 20:08
Avatar
tbartolen
Člen
Avatar
Odpovídá na Jiří Fencl
tbartolen:29.7.2017 20:11

A ty složky musi byt na serveru / localhostu v složce s tim projektem, jinak to.nebude fungovat?

Nahoru Odpovědět
29.7.2017 20:11
Navštiv www.fb.com/skkelticz
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:29.7.2017 20:33

Musis mit na serveru/localu akorat tu knihovnu a mit povolene fopen wrapper aby jsi mohl nacitat data z externi URL. Jestli pak na hostingu zjistis, ze nejde kvuli omezeni nacitat z externi URL (pak by ti ale na WP nefungovaly aktualizace), tak by jsi musel tu parsovanou html stranku nahrat taky na server

 
Nahoru Odpovědět
29.7.2017 20:33
Avatar
tbartolen
Člen
Avatar
Odpovídá na Jiří Fencl
tbartolen:29.7.2017 22:07

Tak jsem pořád na local hostu, už mi to nějakým způsobem něco vytváří, ale vypisuje mi to, že nefunguje stream protože v té knihovně není ta složka. To je asi tím, že nemám povolené to fopen, na stack overflow píšou že to musím pustit nějak přes CMD...

Warning: file_get_conten­ts(hokejbal.cz/1-liga/tabulky/): failed to open stream: No such file or directory in C:\xampp\htdoc­s\PhpProject1\sim­ple_html_dom.php on line 75

Nahoru Odpovědět
29.7.2017 22:07
Navštiv www.fb.com/skkelticz
Avatar
tbartolen
Člen
Avatar
Odpovídá na Jiří Fencl
tbartolen:29.7.2017 22:18

Tak v php.ini mám :

; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
; http://php.net/allow-url-fopen
allow_url_fopen=On

Přesto to nešlo, takže jsem použil

       <?php
        // put your code here

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://www.google.co.in");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
print $result;
?>

A jdu zkoušet dál

Nahoru Odpovědět
29.7.2017 22:18
Navštiv www.fb.com/skkelticz
Avatar
Jiří Fencl
Člen
Avatar
Odpovídá na tbartolen
Jiří Fencl:29.7.2017 22:39

Asi by bylo lepsi sem placnout celej kod :) z toho co bych si mohl domyslet :
misto

file_get_contents(hokejbal.cz/1-liga/tabulky/)

patri urcite

file_get_contents('http://hokejbal.cz/1-liga/tabulky/');

jinak se bez toho http:// pokousi php hledat mezi soubory na disku
neboli patri tam

file_get_html('http://hokejbal.cz/1-liga/tabulky/');
Editováno 29.7.2017 22:41
 
Nahoru Odpovědět
29.7.2017 22:39
Avatar
tbartolen
Člen
Avatar
Odpovídá na Jiří Fencl
tbartolen:29.7.2017 22:44

Nene, uvozovky tam byli, vypadalo to takhle:

  <!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        // put your code here
         $html = file_get_html('http://www.google.com/');
        ?>
    </body>
</html>

Ale tady https://stackoverflow.com/…2279/8377142 se to už nějak dohádalo, že bych měl použít tu knihovnu CURL, je to koneckonců i v návodu přímo od toho simpledomHTML, že pokud to nejde, tak by se mělo jít do toho curl. Teď to vypadá nějak takto, dostanu celou stránku a snažím se z toho vyříznout tu specifickou část kterou chci, ale nějak mi to nereaguje ten příkaz ret

        <?php
        // put your code here

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://hokejbal.cz/1-liga/tabulky/");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
print $result;

str_get_dom;
$ret = $html->find('.standings tablesort tablesorter tablesorter-default');
?>
Nahoru Odpovědět
29.7.2017 22:44
Navštiv www.fb.com/skkelticz
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:29.7.2017 22:46

Mas tam ted spatne cileni - kdyz uz, tak tam patri

$ret = $html->find('.standings.tablesort.tablesorter.tablesorter-default');

bez mezer = prvek, co ma vsechny tridy

 
Nahoru Odpovědět
29.7.2017 22:46
Avatar
tbartolen
Člen
Avatar
Odpovídá na Jiří Fencl
tbartolen:29.7.2017 22:50

Jenže to je jakoby to byly jednotlivé třídy, já to ale mám ve webmaster tools takto, jako jednu třídu s několika slovným názvem..

<table class="standings tablesort tablesorter tablesorter-default">

Zkusil jsem i tu tvojí variantu a taky nic

P.S. Google chrome

Editováno 29.7.2017 22:52
Nahoru Odpovědět
29.7.2017 22:50
Navštiv www.fb.com/skkelticz
Avatar
tbartolen
Člen
Avatar
tbartolen:29.7.2017 23:02

Edit:

Neměl jsem vytvořený $html, takže pokračuji dál v bádání:

<?php
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, "http://hokejbal.cz/1-liga/tabulky/");
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $result = curl_exec($curl);
        curl_close($curl);
        print $result;
        $html= str_get_html($str);
        str_get_dom;
        $ret = $html->find('.standings tablesort tablesorter tablesorter-default');
?>
Editováno 29.7.2017 23:02
Nahoru Odpovědět
29.7.2017 23:02
Navštiv www.fb.com/skkelticz
Avatar
tbartolen
Člen
Avatar
tbartolen:30.7.2017 2:18

Edit:
Mám to, po 6 hodinách na stackoverflow a google. Děkuji za rady! Určitě mi to rozšířilo trošku obzory. Výsledný kód kdyby někdo řešil stejný problém:

$html = file_get_html('http://hokejbal.cz/1-liga/tabulky/');
 $ret = $html->find('table.standings', 1);
 print $ret;
Nahoru Odpovědět
30.7.2017 2:18
Navštiv www.fb.com/skkelticz
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 16.