2010-02-01 4 views
2

Я хочу, чтобы получить динамическое содержимое из конкретного URL:Получить содержимое из URL с помощью PHP

я использовал код

echo $content=file_get_contents('http://www.punoftheday.com/cgi-bin/arandompun.pl'); 

Я получаю следующие результаты:

document.write('"Bakers have a great knead to make bread." 

') document.write('© 1996-2007 Pun of the Day.com 
') 

Как я могу получить строку Пекари имеют отличную месить, чтобы сделать хлеб. только строка внутри первого document.write изменится, другой код будет оставаться постоянным

С уважением,

Панкай

+0

Возможный дубликат [получить URL-адрес PHP] (http://stackoverflow.com/questions/11363022/get-url-content-php) –

ответ

7

Вы выборки сниппет JavaScript, который должен быть построен непосредственно в документ, не запрашивается скриптом. Код внутри JavaScript.

Вы можете вытащить код, используя регулярное выражение, но я бы посоветовал это сделать. Во-первых, это, вероятно, не законно. Во-вторых, формат данных, которые они обслуживают, может меняться в любое время, нарушая ваш скрипт.

Думаю, что вы должны принять по телефону their RSS feed. Вы можете анализировать это программно проще, чем JavaScript.

Заканчивать этот вопрос о том, как сделать это: ответ Best way to parse RSS/Atom feeds with PHP

+0

Привет, Спасибо за ваш ответ, но я хочу знать, могу ли я использовать их rss Как я могу выбрать каламбур дня динамически (он не должен повторять, если я нажму на обновление) –

+0

Я думаю, что чтение RSS-канала, и отображение только первого элемента должно сделать трюк! –

+0

Но я хочу отображать различные каламбуры, если он нажмет на обновление. –

2

Пекка является, вероятно, лучшим способом сделать это. Но в любом случае здесь регулярное выражение вы можете использовать в случае, если вы обнаружили, что делаете что-то вроде этого, и не может полагаться на RSS-каналы и т.д.

document\.write\('  // start tag 
([^)]*)     // the data to match 
'\)      // end tag 

EDIT, например:

<?php 
$subject = "document.write('&quot;Paying for college is often a matter of in-tuition.&quot;<br />')\ndocument.write('<i>&copy; 1996-2007 <a target=\"_blank\" href=\"http://www.punoftheday.com\">Pun of the Day.com</a></i><br />')"; 
$pattern = "/document\.write\('([^)]*)'\)/"; 
preg_match($pattern, $subject, $matches); 
print_r($matches); 
?> 
+0

привет, пожалуйста, проконсультируйте его дальше –

+0

@Pankaj: Я отредактировал свой ответ, надеюсь, это поможет. –

+0

Спасибо, но он дает предупреждение: preg_match() [function.preg-match]: Неизвестный модификатор 'g' Удаление g дает правильный результат. –

4

1) несколько локальных методов

<?php 
echo readfile("http://example.com/");   //needs "Allow_url_include" enabled 
echo include("http://example.com/");    //needs "Allow_url_include" enabled 
echo file_get_contents("http://example.com/"); 
echo stream_get_contents(fopen('http://example.com/', "rb")); //you may use "r" instead of "rb" //needs "Allow_url_fopen" enabled 
?> 

2) Лучший способ завивает:

echo get_remote_data('http://example.com');        // GET request 
echo get_remote_data('http://example.com', "var2=something&var3=blabla"); // POST request 


//============= https://github.com/tazotodua/useful-php-scripts/ =========== 
function get_remote_data($url, $post_paramtrs=false) { $c = curl_init();curl_setopt($c, CURLOPT_URL, $url);curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); if($post_paramtrs){curl_setopt($c, CURLOPT_POST,TRUE); curl_setopt($c, CURLOPT_POSTFIELDS, "var1=bla&".$post_paramtrs);} curl_setopt($c, CURLOPT_SSL_VERIFYHOST,false);curl_setopt($c, CURLOPT_SSL_VERIFYPEER,false);curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0"); curl_setopt($c, CURLOPT_COOKIE, 'CookieName1=Value;'); curl_setopt($c, CURLOPT_MAXREDIRS, 10); $follow_allowed= (ini_get('open_basedir') || ini_get('safe_mode')) ? false:true; if ($follow_allowed){curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);}curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 9);curl_setopt($c, CURLOPT_REFERER, $url);curl_setopt($c, CURLOPT_TIMEOUT, 60);curl_setopt($c, CURLOPT_AUTOREFERER, true);   curl_setopt($c, CURLOPT_ENCODING, 'gzip,deflate');$data=curl_exec($c);$status=curl_getinfo($c);curl_close($c);preg_match('/(http(|s)):\/\/(.*?)\/(.*\/|)/si', $status['url'],$link);$data=preg_replace('/(src|href|action)=(\'|\")((?!(http|https|javascript:|\/\/|\/)).*?)(\'|\")/si','$1=$2'.$link[0].'$3$4$5', $data);$data=preg_replace('/(src|href|action)=(\'|\")((?!(http|https|javascript:|\/\/)).*?)(\'|\")/si','$1=$2'.$link[1].'://'.$link[3].'$3$4$5', $data);if($status['http_code']==200) {return $data;} elseif($status['http_code']==301 || $status['http_code']==302) { if (!$follow_allowed){if(empty($redirURL)){if(!empty($status['redirect_url'])){$redirURL=$status['redirect_url'];}} if(empty($redirURL)){preg_match('/(Location:|URI:)(.*?)(\r|\n)/si', $data, $m);if (!empty($m[2])){ $redirURL=$m[2]; } } if(empty($redirURL)){preg_match('/href\=\"(.*?)\"(.*?)here\<\/a\>/si',$data,$m); if (!empty($m[1])){ $redirURL=$m[1]; } } if(!empty($redirURL)){$t=debug_backtrace(); return call_user_func($t[0]["function"], trim($redirURL), $post_paramtrs);}}} return "ERRORCODE22 with $url!!<br/>Last status codes<b/>:".json_encode($status)."<br/><br/>Last data got<br/>:$data";} 

ВНИМАНИЕ: Она автоматически обрабатывает FOLLOWLOCATION проблемы + Удаленные UR автоматически откорректированы заново! (src = "./ imageblabla.png" --------> src = "http://example.com/path/imageblabla.png")

pson GNU/Linux серверы дистрибутива, вы может потребоваться установить пакет php5-curl для его использования.

+0

Я полагаю, что этот завиток является лучшим вариантом? –

+0

Да, завиток лучше, потому что у него много вариантов, плюс он не отключен на многих хостингах. –

Смежные вопросы