Automatická aktualizace dat – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Automatická aktualizace dat – PHP – Fórum – Programujte.comAutomatická aktualizace dat – PHP – Fórum – Programujte.com

 

Shark
~ Anonymní uživatel
38 příspěvků
28. 9. 2015   #1
-
0
-

Lze pomocí PHP naprogramovat, aby se data na webu automaticky měnily na základě jiného webu? Konkrétně například výsledky zápasů.

Nahlásit jako SPAM
IP: 77.92.206.–
z_moravec
~ Redaktor
+3
Posthunter
28. 9. 2015   #2
-
0
-

#1 Shark
Jde, ale bez bližších informací asi bližší info nedostaneš. Mimo PHP budeš potřebovat ještě cron nebo něco podobného.

Nahlásit jako SPAM
IP: 46.39.183.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Kit+15
Guru
28. 9. 2015   #3
-
0
-

#1 Shark
Jde to celkem snadno i bez cronu, když místo hodin použiješ aktivitu uživatele a trochu ji omezíš, aby ses druhého serveru neptal častěji než třeba 1× za minutu. Výsledky si uložíš do nějaké cache a pokud se někdo dotáže dřív, pošleš mu data z té cache.

Pokud to však chceš jen pro sebe, cache i omezování můžeš klidně vypustit a udělat si z toho jednoduchou proxy. Přesně tak sleduji tohle (a nejen tohle) fórum. Skript si natáhne stránku z webu, vybere z ní jen to, co mě zajímá a to zobrazí.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Shark
~ Anonymní uživatel
38 příspěvků
28. 9. 2015   #4
-
0
-

Díky moc! Zatím PHP neumím, ale předtím než s ním začnu, jsem chtěl vědět, jestli tohle půjde udělat.

Nahlásit jako SPAM
IP: 77.92.206.–
JacobCZ0
Newbie
29. 9. 2015   #5
-
0
-

Jen tak pro zajímavost, máš v plánu data tahat z webu s API nebo použít nějaký HTML crawler? (Nevíš-li na co se tě ptám, nevěš hlavu, jednou na to příjdeš! Případně se zeptej, rád vysvětlím)

Nahlásit jako SPAM
IP: 37.188.139.–
Shark
~ Anonymní uživatel
38 příspěvků
29. 9. 2015   #6
-
0
-

#5 JacobCZ
Jak jsem psal na PHP se teprve chystám vrhnout, takže nevím o co se jedná. Za vysvětlení bych byl moc rád. :)

Nahlásit jako SPAM
IP: 77.92.206.–
JacobCZ0
Newbie
29. 9. 2015   #7
-
0
-

#6 Shark
Pokud chceš získávat data z nějakého webu, máš vpodstatě dvě možnosti jak to udělat:

1) Pomocí tzv. API, neboli Aplikačního Rozhraní. To funguje tak, že se webu zeptáš na informace které potřebuješ a web ti to více čí méně ochotně sdělí. Bohužel né všechny weby API mají. Pro více info o API se podívej například na Wikipedii, myslím, že je to tam vysvětlené docela pěkně, i když dost odborně.

2) Pomocí WebCrawleru/HTMLCrawleru. To je knihovna (existuje jich spousta pro různé jazyky včetně PHP), která dokáže pomocí bežných CSS selektorů (class, ID, tag apod.) najít specifický element ve stránce (případně seznam několika stejných) a vypsat je. To se používá v případě, že web ze kterého potřebuješ tahat data API nemá.

Nahlásit jako SPAM
IP: 37.188.139.–
Shark
~ Anonymní uživatel
38 příspěvků
30. 9. 2015   #8
-
0
-

#7 JacobCZ
A dá se nějak lehce zjistit, který web API má a který ne?

Nahlásit jako SPAM
IP: 46.135.72.–
JacobCZ0
Newbie
30. 9. 2015   #9
-
0
-

#8 Shark
Pokud API má, tak to bude mít někde napsané (příklad), pokud to nikde napsané není, tak API pravděpodobně nemá vůbec, nebo je jen interní a zvenčí nepřístupné, tedy pro tebe jakoby neexistující.

Nahlásit jako SPAM
IP: 81.19.4.–
peter
~ Anonymní uživatel
3981 příspěvků
30. 9. 2015   #10
-
+1
-
Zajímavé
Kit +

Jde to pomerne jednoduse. Resi se tak kurzovni listek nebo vysledky fotbaloveho zapasu, pocasi, treba. Nepritel poskytuje txt soubor a ty si jej stahnes a prepises na html pomoci php. Soubor ulozis a kontrolujes si jeho stari. Kdyz je moc stary, vygenerujes novy. Netahas to online, protoze bys zatezoval jejich server, coz se jim libit urcite nebude.

Nahlásit jako SPAM
IP: 2001:718:2601:258:d1a:222...–
JacobCZ0
Newbie
30. 9. 2015   #11
-
-1
-
Mimo téma
Kit -

#10 peter
"Nepřítel"???

Proč přepisovat na HTML? Stačí soubor například jednou za hodinu stáhnout a v původním TXT formátu si ho uložit k sobě (případně převést do JSONu). Potom si buď nastavit CRON, aby každou např. hodinu kontroloval, jestli je soubor stále aktuální (např. pomocí MD5 checksumu) a případně ho aktualizoval. Místo cronu se to dá invokovat i aktivitou uživatele a omezit akci tak, aby ji se spustila max. 1x za hodinu, vždy na popud uživatele.

Nahlásit jako SPAM
IP: 81.19.4.–
Kit+15
Guru
30. 9. 2015   #12
-
0
-

#11 JacobCZ
Jak chceš získat MD5 bez stažení celého souboru?

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JacobCZ0
Newbie
30. 9. 2015   #13
-
+1
-
Zajímavé
Kit +

#12 Kit
To mě nenapadlo... Ale vzhledem k velikosti takového souboru, co bude až na výjimky v řádech kilobajtů by neměl být problém takový soubor prostě jednou za hodinu stáhnout a checksum ani nekontrolovat...

Nahlásit jako SPAM
IP: 81.19.4.–
peter
~ Anonymní uživatel
3981 příspěvků
30. 9. 2015   #14
-
0
-

Ten kurzovni listek zobrazujes jako html. Tudiz logicky je lepsi to hned preformatovat.. Samozrejme to zalezi na konkretni aplikaci, ktera cesta bude vyhodnejsi.
Kontrolovat cronem kazdou hodinu od 22 do 6 rano, kdy neni na strance temer nikdo, no nevim :) Mozna vyhledavace tam slidi.

Nahlásit jako SPAM
IP: 2001:718:2601:258:d1a:222...–
JacobCZ0
Newbie
30. 9. 2015   #15
-
0
-

#14 peter
Formátovat to rovnou do HTML je s prominutím stupidní. Co když budeš potřebovat vytáhnout jen jeden údaj? Nebo třeba něco spočítat. Budeš to potom lovit v tom HTMLku? A co je špatného na tom, stahovat data i když uživatel není aktivní? Vadí to snad něčemu?

Nahlásit jako SPAM
IP: 37.188.225.–
Kit+15
Guru
30. 9. 2015   #16
-
0
-

#15 JacobCZ
Ono je stupidní i to ukládání do textového souboru. Je lepší to rovnou rozparsovat a uložit do databáze.

Kurzovní lístky se stejně mění jen kolem 14:30, ale Shark se ptal za výsledky zápasů. Takový výsledek se aktualizuje jen jednou...

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JacobCZ0
Newbie
30. 9. 2015   #17
-
0
-

#16 Kit
O databázi zatím nepadlo ani slovo, tak jsem se toho držel, ale je jasné, že databáze je nejlepší variantou, už jen kvůli historii apod.

Nahlásit jako SPAM
IP: 37.188.225.–
peter
~ Anonymní uživatel
3981 příspěvků
1. 10. 2015   #18
-
0
-

#16 Kit
Vysledky zapasu se aktualizuji, kdyz je nekdo aktualizuje :) Cili, treba prvni den se hraji 3 zapasy, druhy 0, protoze prselo, treti 5. A ted zalezi, ve kterem case to kdo aktualizuje.
V pripade skolniho turnaje se to zmakne vsechno behem dne a aktualizuje se to vetsinou hned po zapase.
Takze ten interval je tez podle okolnosti.

#15 JacobCZ
Ale obvykle se nehraje po tme, takze po 22 to nema obvykle zmysl, pokud nejde o olympiadu nebo cizi zeme s posunem casu.

Nahlásit jako SPAM
IP: 2001:718:2601:258:503e:b0...–
Kit+15
Guru
1. 10. 2015   #19
-
+1
-
Zajímavé

#18 peter
Řekněme, že při prvním pokusu nejsou žádná data. Každý dotaz je přeposlán na server. Aktualizace se však stále nekoná, protože není co aktualizovat. Zápas je dohrán, jsou zveřejněny výsledky. Některý klient si obnoví stránku, data jsou zjištěna jako nová a uložena do cache řekněme s platností 10 minut. Všichni ostatní klienti dostanou tuto informaci. Po deseti minutách však už není platná a proto je znovu odeslán požadavek na server.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Shark
~ Anonymní uživatel
38 příspěvků
1. 10. 2015   #20
-
+1
-
Zajímavé

Díky moc za všechny názory! Až PHP nějak zmáknu, pustím se na to :).

Nahlásit jako SPAM
IP: 77.92.206.–
Shark
~ Anonymní uživatel
38 příspěvků
31. 10. 2015   #21
-
0
-

Ahoj. Tak něco jsem si zjistil z PHP apod. a vrátil jsem se k tomuto problému. Chtěl bych se prosím ještě na něco zeptat.

Pomocí file_get_contects získám obsah stránky, ale teď jsem se zasekl na tom získat pouze potřebné data. Ať hledám jak hledám, bohužel na to pořád nemůžu přijít, tak abych to nějak rozumně chápal. Mohl by mě prosím někdo trochu nasměrovat? Díky :)

Nahlásit jako SPAM
IP: 77.92.206.–
JacobCZ0
Newbie
31. 10. 2015   #22
-
0
-

#21 Shark
Jak už zde bylo zmíněno, záleží, v jakém formátu data získáváš... Můžeš sem dát odkaz na stránku, odkud se je snažíš stáhnout?

Nahlásit jako SPAM
IP: 94.112.33.–
Kit+15
Guru
31. 10. 2015   #23
-
0
-

#21 Shark
Zřejmě jsi stáhl HTML a chceš z něj vyzobnout jen některá data. Používají se na to různé parsery od regulárních výrazů až po DOM nebo SAX. Záleží na tobě, který si vybereš.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JacobCZ0
Newbie
31. 10. 2015   #24
-
0
-

#23 Kit
Hmm, nemyslíš, že je na něj tohle až moc odborný? Třeba to někde našel v XML nebo JSONu... Počkejme než pošle odkaz...

Nahlásit jako SPAM
IP: 94.112.33.–
Shark
~ Anonymní uživatel
38 příspěvků
31. 10. 2015   #25
-
0
-

Upřímně, ještě nevím z kama to budu tahat, zatím jsem pouze hledal na netu způsob jak to vyřešit. Ale dejme tomu, že to budu tahat výsledky NHL z nějaké stránky s výsledkama, např. onlajny, nebo něco podobného.

Nahlásit jako SPAM
IP: 77.92.206.–
Shark
~ Anonymní uživatel
38 příspěvků
31. 10. 2015   #26
-
0
-

Ale v podstatě to vystihl Kit. Stáhnu html do proměnné, popřípadě z něj udělám .txt, ale jak z něj vybrat to hlavní už bohužel nevím.

Nahlásit jako SPAM
IP: 77.92.206.–
JacobCZ0
Newbie
31. 10. 2015   #27
-
0
-

#26 Shark
Tak v tom případě si vygoogli něco ve stylu "PHP DOM Crawler" a nauč se s tím. DOM Crawler je vpodstatě nástroj, pomocí kterého můžeš procházet strukturu stránky pomocí DOM selektorů (jako v CSS nebo JS: element.třída.další-třída#id) a následně z takto vybraných elementů tahat data jako text apod...

Nahlásit jako SPAM
IP: 94.112.33.–
Kit+15
Guru
31. 10. 2015   #28
-
0
-

#26 Shark
Fajn. Teď si přečti i tu druhou větu, kterou jsem napsal.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JacobCZ0
Newbie
31. 10. 2015   #29
-
-1
-
Mimo téma

#28 Kit
Vysvětloval jsem, co je to DOM Crawler... Baví tě to?

Nahlásit jako SPAM
IP: 94.112.33.–
Shark
~ Anonymní uživatel
38 příspěvků
31. 10. 2015   #30
-
0
-

Díky moc ! :)

Nahlásit jako SPAM
IP: 77.92.206.–
Kit+15
Guru
31. 10. 2015   #31
-
0
-

#29 JacobCZ
Popravdě neznám žádný "DOM Crawler", proto tohle slovní spojení nepoužívám.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JacobCZ0
Newbie
31. 10. 2015   #32
-
0
-

#31 Kit
Tak tady jeden máš... https://github.com/symfony/dom-crawler

Nahlásit jako SPAM
IP: 94.112.33.–
Kit+15
Guru
31. 10. 2015   #33
-
0
-
Nerozhodně

#32 JacobCZ
5000 řádek kvůli prkotině, která je v čistém PHP na 5 řádek? To se zase někdo urval z řetězu.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
chita0
Newbie
1. 11. 2015   #34
-
+2
-
Zajímavé

Já používám třídu Simple HTML DOM Parser http://simplehtmldom.sourceforge.net. Naprostá spokojenost.

Nahlásit jako SPAM
IP: 77.104.198.–
Shark
~ Anonymní uživatel
38 příspěvků
1. 11. 2015   #35
-
0
-

#34 chita

Na ten jsem se díval a přišel mi také nejlepší. Jen bych se chtěl zeptat, to mám stažené soubory dát do složky a po té už mohu používat?

Nahlásit jako SPAM
IP: 46.135.41.–
Shark
~ Anonymní uživatel
38 příspěvků
1. 11. 2015   #36
-
0
-

#34 chita

Na ten jsem se díval a přišel mi také nejlepší. Jen bych se chtěl zeptat, to mám stažené soubory dát do složky a po té už mohu používat?

Nahlásit jako SPAM
IP: 46.135.41.–
JacobCZ0
Newbie
1. 11. 2015   #37
-
0
-

#36 Shark
Ano, stáhneš, vhodně naicluduješ a můžeš používat...

Nahlásit jako SPAM
IP: 94.112.33.–
Kit+15
Guru
1. 11. 2015   #38
-
0
-

#37 JacobCZ
To s tím includováním stažených souborů nemyslíš doufám vážně že?

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JacobCZ0
Newbie
1. 11. 2015   #39
-
0
-

#38 Kit
Co ty máš proboha zase za problém?

Nahlásit jako SPAM
IP: 94.112.33.–
Kit+15
Guru
1. 11. 2015   #40
-
0
-

#39 JacobCZ
Nemůžeš přece cizí stažené soubory jen tak includovat. Mohl by v nich být ukrytý nějaký PHP skript.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JacobCZ0
Newbie
1. 11. 2015   #41
-
0
-

#40 Kit
Mluvím pochopitelně o souborech toho DOM Parseru...

Nahlásit jako SPAM
IP: 94.112.33.–
Kit+15
Guru
1. 11. 2015   #42
-
0
-

#41 JacobCZ
Je to dost podivná knihovna. Používá globální konstanty, nedodržuje konvence, nepoužívá standardní parser - PHP má několik rychlých parserů napsaných v C. Delší soubory bych v tom tedy parsovat nechtěl - stejně je to omezeno jen do 600 kB.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JacobCZ0
Newbie
1. 11. 2015   #43
-
0
-

#42 Kit
Well, já ji nenavrhoval... Jen jsem reagoval na dotaz, jak ji použít...

Nahlásit jako SPAM
IP: 94.112.33.–
Kit+15
Guru
1. 11. 2015   #44
-
+1
-
Zajímavé

#43 JacobCZ
Zde je ukázka, jak si mohu z této stránky vytáhnout pouze tvoji odpověď pomocí standardních nástrojů PHP: 

<?php
$url = "http://programujte.com/forum/vlakno/29963-automaticka-aktualizace-dat/";
$content = file_get_contents($url);
$dom = new \DOMDocument('1.0');
@$dom->loadHTML($content);
$hodnoceni = $dom->getElementById('hodnoceni_popis_206080');
echo $hodnoceni->textContent;

Žádná externí knihovna není potřebná.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JacobCZ0
Newbie
1. 11. 2015   #45
-
0
-

#44 Kit
Wait, PHP má vlastní DOM parser? Tak to jsem netušil...

Nahlásit jako SPAM
IP: 94.112.33.–
Kit+15
Guru
1. 11. 2015   #46
-
0
-

#45 JacobCZ
PHP má několik DOM parserů, ale pro parsování HTML se mi osvědčil DomDocument. Má své mouchy, například má problém se zpracováním stránky, na které chybí definice charset. Taková stránka se mu pak musí trochu "předžvýkat". Pro většinu stránek však funguje bezvadně.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
2. 11. 2015   #47
-
0
-
Nahlásit jako SPAM
IP: 2001:718:2601:26c:94f2:37...–
peter
~ Anonymní uživatel
3981 příspěvků
2. 11. 2015   #48
-
0
-

   

	$data = file_get_contents('http://www.slu.cz/fpf/cz/veda');

	$pos = strpos($data,'<div class="main_content">') + 26;
	$pos = strpos($data,'</div>',$pos) + 6;
	$pos = strpos($data,'</div>',$pos) + 6;	// h1buttons
	$pos = strpos($data,'</div>',$pos) + 6;	// main_navpathbar
	$pos = strpos($data,'<div',$pos) + 4;	// div body
	$pos = strpos($data,'>',$pos) + 1;	// body start
	$posstart = $pos;
	$pos = strpos($data,'</div><!-- //main_content -->',$pos);	// body near end
	$posend = $pos;

	$data = substr_replace($data, $insert_code . "\n".'</div>',$posstart,$posend-$posstart);
Nahlásit jako SPAM
IP: 2001:718:2601:26c:94f2:37...–
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, 10 hostů

 

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