O webu
Stažení cizí stránky

Získání obsahu

Chceme-li na vlastním webu pracovat s cizími daty, existuje k tomu v PHP hned několik způsobů.

Funkce file_get_contents

Použití je prosté:

$data = file_get_contents("http://jecas.cz/stazeni-stranky");

V proměnné $data potom bude celý obsah stránky http://jecas.cz/stazeni-stranky.

Nevýhoda je, že řada hostingů tuto funkci pro stažení stránky z jiné domény blokuje. Jedná se o nastavení allow_url_fopen.

Funkce fsockopen

V případech, kdy file_get_contents není pro stahování z jiné domény k disposici, většinou funguje následující:
$host = "jecas.cz";
$adresa = "stazeni-stranky";
$fp = @fsockopen ($host, 80, $errno, $errstr, 10); 
fputs ($fp, "GET /".$adresa." HTTP/1.0\r\nHost: ".$host."\r\n\r\n"); 
$data = '';
while (!feof($fp)) { 
  $data .= fgets($fp, 2048);
} 
fclose ($fp);

S rozdělením URL na $host a $adresa může pomoci funkce parse_url. V proměnné $data by opět měl být celý obsah stránky http://jecas.cz/stazeni-stranky.

Zpracování dat

Výše uvedeným způsobem získaný obsah je možné i rovnou vypsat (čehož je využito například v proxy skriptu).

echo $data;

Nebo třeba přečíst obsah určitých HTML značek. K tomu se hodí regulární výrazy a funkce preg_match (popř. preg_match_all).

Nejjednoduší regulární výraz pro přečtení prvního nadpisu <h1> by mohl vypadat následovně:

$tagRegExp = '~<(h1).*>(.*?)</\\1>~iU';
preg_match($tagRegExp, $data, $matches);
$nadpis = $matches[2];

V $matches[0] je celý nadpis včetně značek a v $matches[1] zase název značky, proto $matches[2].

Získání cizí stránky JavaScriptem

JS neumožňuje přímo stahování stránky z cizí domény, jediná možnost je vypomoci si výše uvedeným serverovým skriptem — ten stránku „stáhne“ na vlastní doménu a JavaScript se k němu potom může dostat prostým AJAXem, který v rámci domény funguje.

Nebo je možné použít JSONP.