Autor Zpráva
miky
Profil *
hoj, chtel jsem se zeptat jak mohu zjistit data z jiné stránky a dát je automaticky na můj web. Jak ten skript by mel vypadat? pustit cron bych mohl zvládnout díky za pomoc
BaTeCzKo
Profil
Nešlo by to takhle?

<?php
$obsah=file_get_contents("http://nejakyweb.cz/stranka.html");
echo $obsah; //vypíše obsah ze stránky, ale asi ho budes chtit ukladat to db treba
?>
miky
Profil *
nj, ale takhle mi to tam hodí celou stránku já bych potřeboval nejlépe jenom část ze stránky asi 20 znaků
miky
Profil *
nebo by mohlo stačit to jako by vyfotit, podle určitých rozměru odkud kam to by bylo také řešení...
joejoe
Profil *
mno tak potom si z te stranky vytahnes to co potrebujes bud pomoci nejakeho regularniho vyrazu (preg_match, preg_match_all) nebo pomoci strpos() a substr()
- v pripade, ze se jedna o nejaky semanticky web (je k dispozici rdf, apod.), tak je teoreticky mozne pouzit xml parser ..
miky
Profil *
joejoe
co že to jsou to za funkce?:-O? nemuže někdo více poradit?
Acci
Profil
miky
RTFM! http://cz.php.net/
miky
Profil *
co je rtfm
Anonymní
Profil *
read the fucking manual alebo ***** citaj manual :)
Anonymní
Profil *
read the fucking manual alebo ku5va citaj manual :)

som nevedel ze je tu ochrana proti nevhodnym slovam, ktore su aj v slovnikoch
lacop
Profil
1) Obsah nacitas tak ako uz pisal BaTeCzKo:



<?php

$rawdata = file_get_contents('http://web.cz/data.txt');


2a) V pripade, ze ide o nejaky subor s pevnym obsahom, kde je to co chces na rovnakej pozicii, mozes pouzit substr:




$data = substr($rawdata, 20, 50); // zacne na pozicii 20 a vezme 50 znakov


2b) Ak ide o subor, ktory sa meni, pouzi regexp. Ukazka - mas niekde v kode nieco taketo:


<div id="data">...obsah co potrebujes...</div>


Toto mozes nacitat nasledovne:



if (!preg_match('@<div id="data">([^<]+)</div>@', $rawdata, $arr)) die('Nenajdene!');

$data = $arr[1];


Ak neovladas syntax PCRE pozri sa sem: http://www.php.net/manual/en/reference.pcre.pattern.syntax.php alebo, ak sa ti to naozaj nechce ucit / nerozumies tomu tak mi posli odkial a co chces extrahovat a ja ti ten regexp napisem :)

3) A teraz to asi chces ulozit, napr:


$fp = fopen('subor.txt', 'w');
fwrite($fp, $data);
fclose($fp)


Ak mas PHP 5 mozes pouzit jednoduchsiu variantu:


file_put_contents('subor.txt', $data);


4) Ak planujes logovat vystup mozes si pridat toto:


echo date('d.m.Y H:i:s') . ' - OK' . " ";
?>


P.S.: Sorry ak je tu niekde chyba, netestoval som to, pisem len z hlavy :)
miky
Profil *
hm, tož zkoušel jsem to ale jaksi je někde chyba. Potřebuji získat z webu sazky aktuální jackpot
tj. je to na hlavní straně (www.sazka.cz) JACKPOT SPORTKA S PRÉMIÍ: 101 100 000 Kč

Dík za pomoc
DJ Miky
Profil
ale jaksi je někde chyba

Když je někde chyba, tak asi budeš muset něco opravit...

// Blíže specifikovat by to nešlo?
miky
Profil *
Ok píše to

Parse error: syntax error, unexpected T_ECHO in /home/www/skautik.org/subdomeny/admin/soubory/b.php on line 14
lacop
Profil
daj na http://rafb.net/paste/ ten kod
miky
Profil *
tož tady je: http://rafb.net/p/wHqmN628.html
nightfish
Profil
chybí ti středník za fclose()
nightfish
Profil
http://rafb.net/p/EtT10A81.html

akorát si nahraď & #269; za č
miky
Profil *
nj, ale teďka logicky, když bych chtěl číst data z http://sazka.cz/hry-a-loterie/sportka/vysledky/aktualni-losovani.php kde jackpot bez premie tak když to chci upravit tak to nejde:-(
nightfish
Profil
tak když to chci upravit tak to nejde:-(
to víš že to jde


<?php
$data = file_get_contents("http://sazka.cz/hry-a-loterie/sportka/vysledky/aktu alni-losovani.php");

if (preg_match("/<TD CLASS=\"alc valm nadpis1 bc9 p10 bd1 bdc6 bgc7 nw\">\s*([\d\s]+)&nbsp;Kč<\/TD>/", $data, $regs)) {
echo "jackpot: ".$regs[1]." Kč";
} else {
echo "smula, ale nenasel jsem to tam, mozna zmenili format zapisu";
}
?>
miky
Profil *
ano jde ti to:
if (preg_match("/<TD CLASS="alc valm nadpis1 bc9 p10 bd1 bdc6 bgc7 nw">s*([ds]+)&nbsp;Kč</TD>/", $data, $regs)) {

ale předtím bylo
if (preg_match("/<SPAN CLASS="v20 b pro0">([ds]*)&nbsp;Kč</SPAN>/", $data, $regs)) {

:)

a asi losovaná čísla nejdou získat, jaký je vtom systém?
miky
Profil *
myslím především
s*([ds]+)&nbsp;Kč
([ds]*)&nbsp;Kč

tyhle rozdíly..
nightfish
Profil
miky
je to vše o pochopení regulárních výrazů... prostě nastuduješ, co je v okolí tebou požadovaného čísla
\s je zástupce pro bílý znak - mezeru, tabulátor, odřádkování
\d je zástupce pro libovolnou číslici
* je modifikátor, který říká: 0 nebo více výskytů znaku (skupiny znaků), který je před modifikátorem
+ je modifikátor, který říká: 1 nebo více výskytů znaku (skupiny znaků), který je před modifikátorem

http://interval.cz/clanky/regularni-vyrazy-v-php-1/

\s*([\d\s]+)&nbsp;Kč
to počáteční \s je tam kvůli odřádkování, které následuje ve zdrojovém kódu za <TD>...
a modif. + je tam kvůli tomu, že očekáváme alespoň jednu číslici


([\d\s]*)&nbsp;Kč
tady je použit * (nicméně klidně je možno použít i +)
miky
Profil *
aha takže když bych chtěl vybrat tedy 1. tah tak to provedou:

[pre][<TD CLASS="valm nadpis1 bc10 pt4 pr4 bdc10 bdtr1 bgc8 nw">
17, 45, &nbsp;&nbsp;9, 10, 22, 18 /&nbsp;20</TD>/pre]-kod který je na webu

s([d])
s - odřádkování.
*- tam nebude žádný znak tam není před modifikátorem.

chápu to tedy dobře?
nebo je to jinak?

(...)
miky
Profil *
tak jak tedy?
miky
Profil *
tak jsem to vyřešil kapánek jinak

$prvni=file("http://sazka.cz/hry-a-loterie/sportka/vysledky/aktualni-l osovani.php");
echo $prvni[403]; //Vypiší první řádek ze zdrojového kódu
Toto téma je uzamčeno. Odpověď nelze zaslat.

0