1

Safariには、テキスト以外の記事を含むWebサイトからすべてを削除する 「リーダーモード」があります。

次に、サイトからHTMLソースを取得してから、PHPを使用したSafariの「リーダーモード」などの実際のコンテンツニュースを取得する必要があります。手伝って頂けますか??:S

4

1 に答える 1

1

別の投稿へのリンクを投稿するだけではあまり役に立たないという指摘があったので、更新します。それ以来、Arc90 の Readability の PHP ポートを使い始めましたが、非常にうまく機能します。

Readability.js の PHP ポートへのリンクは次のとおりです: http://www.keyvan.net/2010/08/php-readability/

実装の簡単な例を次に示します。

$url = 'http://';
$html = file_get_contents($url);

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);
// echo $readability->html;
// echo htmlspecialchars($tidy($readability->html, true));

// 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 = false;

$readability->lightClean = false;
// $readability->revertForcedParagraphElements = false;

// process it
$result = $readability->init();
// store reference to dom content processed by Readability
$content = $readability->getContent();

echo '<h1>'.$readability->getTitle()->textContent.'</h1>';
echo $content->innerHTML;

上記の拡張

これが機能するページ数を増やしたい場合は、読み取り可能性に渡す前にhtmlのユーザーエージェントをカールして定義すると、より良い結果が得られることがわかりました。いくつかのリダイレクトを追加すると、さらに良くなります。

file_get_contents の代わりに使用している関数は次のとおりです。

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);

//...
于 2014-02-03T21:11:05.933 に答える