Autor | Zpráva | ||
---|---|---|---|
spoj_alfa Profil * |
#1 · Zasláno: 25. 2. 2010, 20:09:38
Chtěl bych na stránky umístit informaci, kterou lze načíst na cizích stránkách, tedy konkrétně:
kdesi v této diskusi jsem našel odkaz na stránku např. "http://www.google.com/ig/api?weather=Klinovec". Otevřením běžným prohlížečem mi jako odpověď přijde (pravděpodobně vygenerovaný) xml soubor s informací o aktuálním počasí, v tomto příkladě na Klínovci. Naučil jsem se pomocí PHP vyjmout konkrétní informaci z tohoto souboru, ovšem pouze pokud jej mám již někde ve složce uložený. Teď tedy potřebuji soubor v pravidelných intervalech (např. po hodině) aktualizovat/ukládat v adresáři pod svou doménou. Zkoušel jsem všelicos, ale zatím bez úspěchu. Problém je pravděpodobně v tom, že soubor se musí vždy při dotazu prohlížečem vygenerovat, já se snažim data stáhnout PHP skriptem, který se ani jako prohlížeč nehlásí. V PHP nejsem zdatný, ale když mi někdo ukáže směr... Celý problém bych tedy rozložil na 2 části: 1. načtení dat a uložení do souboru 2. pravidelné opakování tohoto načítání |
||
nightfish Profil |
#2 · Zasláno: 25. 2. 2010, 20:16:44
ad 1) curl
ad 2) cron |
||
Alphard Profil |
#3 · Zasláno: 25. 2. 2010, 20:16:53
1. copy(), nebo pro načtení do proměnné file_get_contents(), ukládat byste si mohl již zpracovaná data.
2. Pro pravidelné opakování hledejte cron, ale stačilo by při načtení souboru kontrolovat jeho stáří a občas aktualizovat PHP: filemtime - Manual |
||
spoj_alfa Profil * |
#4 · Zasláno: 25. 2. 2010, 21:52:12
Alphard,nightfish:
Dík za odpovědi, ale problém bude možná ještě jinde... Funkce copy(), fopen(), file_get_contents() jsem již zkoušel a vždy se stejným výsledkem: Warning: copy(http://www.google.com/ig/api?weather=Klinovec) [function.copy]: failed to open stream: Connection refused in /var/www/web1894/web/test/pocasi2.php on line 11 failed to copy http://www.google.com/ig/api?weather=Klinovec... Warning: file_get_contents(http://www.google.com/ig/api?weather=Klinovec) [function.file-get-contents]: failed to open stream: Connection refused in /var/www/web1894/web/test/pocasi2.php on line 2 Ještě zkusím curl - tam je trochu větší nabídka, tak se tím nejdřív zkusím prokousat. |
||
spoj_alfa Profil * |
Zkoušel jsem tedy využít curl, ale výsledkem následujícího je prázdná stránka. Stejný výsledek je vždy při použití jiné domény, než z které skript spouštím, pokud použiju do parametru $url soubor z vlastní domény tak funguje.
<?php $url = "http://www.google.com/ig/api?weather=Klinovec"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) "); $data = curl_exec($ch); echo ($data); curl_close($ch); ?> Nastavení přenosu curl_setopt má tolik volitelných parametrů, že vyzkoušením všech kombinací bych strávil mládí a nakonec tady možná ani není problém. Těch parametrů jsem nastavoval mnohem víc, ale tyto 3 jsou podle mého nutné a měly by být dostačující pro přenos dat. Nemáte někdo představu co s tím? Moderátor Alphard: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
|
||
nightfish Profil |
#6 · Zasláno: 26. 2. 2010, 07:36:51
spoj_alfa:
zřejmě tě Google nemá rád uvedený kód jsem vyzkoušel u sebe a funguje bez problémů „Zkoušel jsem tedy využít curl, ale výsledkem následujícího je prázdná stránka.“ ve Firefoxu ano - výsledkem požadavku je XML, které se firefox neobtěžuje zobrazit zkus si ten skript spustit v Internet Exploreru a nebo se ve Firefoxu podívej na zdrojový kód |
||
spoj_alfa Profil * |
#7 · Zasláno: 26. 2. 2010, 11:12:17
Tu hodnotu začínající "Mozilla/4.0......" jsem opsal z řádku, který mi vypsala funkce phpinfo() > HTTP Headers Information > User-Agent (přišlo mi to i jako hodnota, která by měla být akceptovatelná), ve skutečnosti to otvírám pod IE8. Na zdrojový kód se vždy také koukám a není to úplně prázdná stránka, ale 3x odřádkování, takže vlastně prázdná stránka.
Už jsem nechtěl posledně znovu doplňovat vlastní odpověď, ale otestoval jsem funkci file_get_contents() na soubor pod vlastní doménou a funguje. Problém je tedy u všech funkcí pouze pokud se snažim stáhnout odjinud (google..., volweb..., http://www3.axfone.cz/ - testnul jsem i poskytovatele hostingu vlastních stránek) - nelze tedy stahovat z úrovně mimo vlasní root. Curl tedy nevypisuje chybová hlášení oproti file_get_contents() nebo copy(). Vyhledával jsem informace na téma "failed to open stream: Connection refused", ale nic co by mi pomohlo. |
||
nightfish Profil |
#8 · Zasláno: 26. 2. 2010, 11:32:08
spoj_alfa:
„Curl tedy nevypisuje chybová hlášení“ jde nastavit, aby curl vypisovat podrobný log do souboru... $fp = fopen("log.txt", "w"); // $ch = curl_init(); curl_set_opt($ch, CURLOPT_VERBOSE, true); curl_set_opt($ch, CURLOPT_STDERR, $fp); ... fclose($fp); |
||
spoj_alfa Profil * |
#9 · Zasláno: 26. 2. 2010, 23:43:40
nightfish:
Dík za trpělivost Konečně jsem se tím prokousal a protože jsem slepej a tupě kopíruju, nevěděl jsem, proč mi nefunguje curl_set_opt >>> curl_setopt. V souboru jsem nalezl následující: * About to connect() to www.volweb.cz port 80 * Trying 212.20.96.25... * Connection refused * couldn't connect to host * Closing connection #0 tedy pokud správně chápu, vzdálený server mne z nějakého důvodu odmítl. Port 80 by měl být podle mého správně a víc se takto nedovím. Možná je chyba v parametru CURLOPT_USERAGENT... No budu to zkoušet. |
||
Časová prodleva: 14 let
|
0