PHP – как получить основной HTML-контент, такой как режим чтения в Firefox

в приложении Android для Android и сафари iPad мы можем читать только основной контент «Режим чтения». подробнее … Как распознать только основной контент в HTML с PHP?

Мне нужно определить основные новости, такие как Firefox или safari, по php

например, я получаю новости от bbcsite.com/news/123 по этому коду:

 <?php $html = file_get_contents('http://bbcsite.com/news/123'); ?> 

а затем показывать только основные новости без рекламы и … как Firefox и сафари.

Я нахожусь 5filters.org . этот сайт может получить контент !!!

Спасибо

Readability.php работает очень хорошо, но я обнаружил, что вы получаете более успешные результаты, если вы зависаете за содержимое html и обманываете пользовательский агент. Вы также можете использовать переадресацию переадресации в случае, если URL-адрес, который вы пытаетесь нажать, дает вам проблему. Вот то, что я сейчас использую, немного модифицировано из другого сообщения ( PHP Curl после перенаправления ). Надеюсь, вы найдете ее полезной.

 function getData($url) { $url = str_replace('&amp;', '&', urldecode(trim($url)) ); $timeout = 5; $cookie = tempnam('/tmp', 'CURLCOOKIE'); $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1'); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_ENCODING, ''); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_MAXREDIRS, 10); $content = curl_exec($ch); curl_close ($ch); return $content; } 

Реализация:

 $url = 'http://'; //$html = file_get_contents($url); $html = getData($url); if (function_exists('tidy_parse_string')) { $tidy = tidy_parse_string($html, array(), 'UTF8'); $tidy->cleanRepair(); $html = $tidy->value; } $readability = new Readability($html, $url); //... 

В PHP нет такой встроенной функции. Я боюсь, что вам придется самостоятельно анализировать и анализировать HTML-документ. Вероятно, вам понадобится использовать XML-синтаксический анализатор, библиотека SimpleXML является хорошим кандидатом.

Я не знаком с функцией «Режим чтения», о которой вы говорите, но хорошей отправной точкой, вероятно, будет удаление всего содержимого <img> . Фактический «очищающий» алгоритм, который он использует, конечно, не является тривиальным вообще, и кажется, что он фактически реализован как вызов третьей стороне, закрытой суре, службе в Javascript .

Ура!!!

Я нашел этот исходный код:

1) создать Readability.php

2) создать JSLikeHTMLElement.php

3) создайте index.php этим кодом:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <title>!</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> </head> <body dir="rtl"> <?php include_once 'Readability.php'; // get latest Medialens alert // (change this URL to whatever you'd like to test) $url = 'http://'; $html = file_get_contents($url); // Note: PHP Readability expects UTF-8 encoded content. // If your content is not UTF-8 encoded, convert it // first before passing it to PHP Readability. // Both iconv() and mb_convert_encoding() can do this. // If we've got Tidy, let's clean up input. // This step is highly recommended - PHP's default HTML parser // often doesn't do a great job and results in strange output. if (function_exists('tidy_parse_string')) { $tidy = tidy_parse_string($html, array(), 'UTF8'); $tidy->cleanRepair(); $html = $tidy->value; } // give it to Readability $readability = new Readability($html, $url); // print debug output? // useful to compare against Arc90's original JS version - // simply click the bookmarklet with FireBug's console window open $readability->debug = false; // convert links to footnotes? $readability->convertLinksToFootnotes = true; // process it $result = $readability->init(); // does it look like we found what we wanted? if ($result) { echo "== Title =====================================\n"; echo $readability->getTitle()->textContent, "\n\n"; echo "== Body ======================================\n"; $content = $readability->getContent()->innerHTML; // if we've got Tidy, let's clean it up for output if (function_exists('tidy_parse_string')) { $tidy = tidy_parse_string($content, array('indent'=>true, 'show-body-only' => true), 'UTF8'); $tidy->cleanRepair(); $content = $tidy->value; } echo $content; } else { echo 'Looks like we couldn\'t find the content. :('; } ?> </body> </html> 

в $url = 'http://'; установите URL-адрес своего сайта.

Спасибо;)

Новая PHP-библиотека с именем PHP Goose, похоже, тоже очень хорошо справляется с этим. Он очень прост в использовании и удобен для композиторов .

Вот пример использования, приведенный в действительном readme:

 use Goose\Client as GooseClient; $goose = new GooseClient(); $article = $goose->extractContent('http://url.to/article'); $title = $article->getTitle(); $metaDescription = $article->getMetaDescription(); $metaKeywords = $article->getMetaKeywords(); $canonicalLink = $article->getCanonicalLink(); $domain = $article->getDomain(); $tags = $article->getTags(); $links = $article->getLinks(); $movies = $article->getMovies(); $articleText = $article->getCleanedArticleText(); $entities = $article->getPopularWords(); $image = $article->getTopImage(); $allImages = $article->getAllImages(); 

это отображение всего содержимого, если вы хотите получить больше информации об этом, просто выполните поиск в Google о регулярном выражении и о том, как получить значение между тегами в html-файле, я расскажу вам, почему с демо-версией 🙂

во-первых, когда вы используете файл функции get content, вы получите файл с кодом html, но сервер или браузер отобразит его, как страница, посмотрите на этот код,

 $html = file_get_contents('http://coder-dz.com'); preg_match_all('/<li>(.*?)<\/li>/s', $html, $matches); foreach($matches[1] as $mytitle) { echo $mytitle."<br/>"; } 

ну, что я здесь сделал? я получаю содержание моего веб-сайта, это слово пресса, я получаю заголовки, потому что название они находятся в теге HTML li, после чего я использовал регулярное выражение для получения значений между этими тегами.

я надеюсь, вы получите мою точку зрения, потому что я не на английском, если у вас есть какие-либо вопросы, не стесняйтесь спрашивать меня