Как получить конкретный контент из междоменного HTTP-запроса

На сайте голландских новостей есть: nu.nl Мне очень интересно получить первый заголовок url, который находится над ней:

<h3 class="hdtitle"> <a style="" onclick="NU.AT.internalLink(this, event);" xtclib="position1_article_1" href="/buitenland/2880252/griekse-hotels-ontruimd-bosbranden.html"> Griekse hotels ontruimd om bosbranden <img src="/images/i18n/nl/slideshow/bt_fotograaf.png" class="vidlinkicon" alt=""> </a> </h3> 

Итак, мой вопрос: как получить этот URL? Могу ли я сделать это с помощью JQuery? Я бы подумал не потому, что это не на моем сервере. Может, мне придется использовать PHP? С чего начать?

Протестировано и работает

Поскольку http://www.nu.nl не является вашим сайтом, вы можете сделать кросс-домен GET с использованием PHP прокси-метода, иначе вы получите такую ​​ошибку:

XMLHttpRequest не может загрузить http://www.nu.nl/ . Происхождение http://yourdomain.com не разрешено Access-Control-Allow-Origin.

Прежде всего используйте этот файл на своем сервере со стороны PHP :

proxy.php (Обновлено)

 <?php if(isset($_GET['site'])){ $f = fopen($_GET['site'], 'r'); $html = ''; while (!feof($f)) { $html .= fread($f, 24000); } fclose($f); echo $html; } ?> 

Теперь, на стороне javascript, используя jQuery, вы можете сделать следующее:

(Просто, чтобы знать, что я использую prop(); потому что я использую версию jQuery 1.7.2 . Поэтому, если вы используете версию до 1.6.x , попробуйте attr(); вместо этого)

 $(function(){ var site = 'http://www.nu.nl'; $.get('proxy.php', { site:site }, function(data){ var href = $(data).find('.hdtitle').first().children(':first-child').prop('href'); var url = href.split('/'); href = href.replace(url[2], 'nu.nl'); // Put the 'href' inside your div as a link $('#myDiv').html('<a href="' + href + '" target="_blank">' + href + '</a>'); }, 'html'); }); 

Как вы можете видеть, запрос находится в вашем домене, но это своего рода сложная вещь, поэтому вы снова не получите ошибку Access-Control-Allow-Origin !


Обновить

Если вы хотите получить все заголовки href как вы писали в комментариях, вы можете сделать следующее:

Просто измените код jQuery вот так …

 $(function(){ var site = 'http://www.nu.nl'; $.get('proxy.php', { site:site }, function(data){ // get all html headlines headlines = $(data).find('.hdtitle'); // get 'href' attribute of each headline and put it inside div headlines.map(function(elem, index){ href = $(this).children(':first-child').prop('href'); url = href.split('/'); href = href.replace(url[2], 'nu.nl'); $('#myDiv').append('<a href="' + href + '" target="_blank">' + href + '</a><br/>'); }); }, 'html'); }); 

и использовать обновленный файл proxy.php (для обоих случаев – 1 или все заголовки).

Надеюсь это поможет 🙂

Вы можете использовать библиотеку simplehtmldom, чтобы получить эту ссылку

Что-то вроде того

 $html = file_get_html('website_link'); echo $html->getElementById("hdtitle")->childNodes(1)->getAttribute('href'); 

подробнее здесь

Я бы предложил RSS, но, к сожалению, заголовок, который вы ищете, похоже, не появляется.

 <? $f = fopen('http://www.nu.nl', 'r'); $html = ''; while(strpos($html, 'position1_article_1') === FALSE) $html .= fread($f, 24000); fclose($f); $pos = strpos($html, 'position1_article_1'); $urlleft = substr($html, $pos + 27); $url = substr($urlleft, 0, strpos($urlleft, '"')); echo 'http://www.nu.nl' . $url; ?> 

Выходы: http://www.nu.nl/buitenland/2880252/griekse-hotels-ontruimd-bosbranden.html

Используйте cURL для извлечения страницы. Затем используйте следующую функцию для анализа строки, которую вы предоставили;

 preg_match("/<a.*?href\=\"(.*?)\".*?>/is",$text,$matches); 

URL-адрес результата будет в массиве $ matches.

Если вы хотите настроить бот jQuery для очистки страницы через браузер (расширения Google Chrome допускают эту функцию):

 // print out the found anchor link's href attribute console.log($('.hdtitle').find('a').attr('href')); 

Если вы хотите использовать PHP, вам нужно очистить страницу для этой ссылки href . Для этого используйте библиотеки, такие как SimpleTest . Лучший способ периодически очищать – это связать ваш PHP-скрипт с cronjob .

SimpleTest : http://www.lastcraft.com/browser_documentation.php

cronjob : http://net.tutsplus.com/tutorials/php/managing-cron-jobs-with-php-2/

Удачи!