1

シリア紛争に焦点を当てたニュース/ブログ アグリゲーターを構築していますが、ソースを特定できるようにしたいと考えています。これは単純なサイトで、アグリゲーターは私の Yahoo パイプから RSS を取得する外部の JavaScript です。私の問題は、ソース (CNN、BBC など) を特定する方法が見つからないことです。

そのため、ドキュメントをスキャンして href ソースを特定すれば、何かできると考えました。

を持っているとしましょう。私は-- またはこのよう<a href="http://foxnews.com/blahblahblah.php">なことをしたいと思います。IF href == http://foxnews.com { logo(fox); }

「正しく考えている」かどうかはわかりませんが、この問題を回避したいと思っています。助言がありますか?または、RSS パイプで見逃している作成者情報はありますか?

http://pipes.yahoo.com/pipes/pipe.run?_id=e9fdf79f13be013e7c3a2e4a7d0f2900&_render=rss

4

1 に答える 1

1

RSS フィードは単なる XML であるため、最初に行うことは、使用したい言語の XML パーサーを見つけることです。

PHP にはSimpleXMLが組み込まれており、高速で使いやすいです。

これを使用して、このようにすべてのリンクを引き出します。

foreach ($xml->channel->item as $key => $item) {
    $link = $item->link
}

これは簡単に理解できます。ルート XML 要素は<channel>、すべてのニュース<item>タグを含む内部にあります。したがって、それらをループして、各子<link>要素を引き出します。

それから、そこまでたどり着いたら、あなたのためにすべてを行うのにそれほど時間はかからないことに気付きました. http:// を空の文字列に置き換えて、リンクをドメインだけに取り除きます。次に、区切り文字として / を使用して文字列を分解します。これを行うと、文字列がスラッシュの間から引き出されるチャンクに分割されます。したがって、最初のチャンクはドメインです。

<?php
$url = 'http://pipes.yahoo.com/pipes/pipe.run?_id=e9fdf79f13be013e7c3a2e4a7d0f2900&_render=rss';
$xml = simplexml_load_file($url);
foreach ($xml->channel->item as $key => $item) {
    $link = $item->link;
    $link = str_replace("http://", "", $link);
    $parts = explode('/', $link);
    $domain = $parts[0];
    print($domain . "<br/>");
}
?>

このコードにより、次の出力が得られます。

www.ft.com
www.dailystar.com.lb
www.ft.com
www.ft.com
www.ft.com
www.ft.com
www.dailystar.com.lb
www.bbc.co.uk
....

次に、PHP の switch ステートメントを使用して、各リンクに対して目的の結果を取得します。そのようです:

switch($domain) {
  case "www.bbc.co.uk":
    // Do BBC stuff
    break;
  case "www.dailystar.com.lb":
    // Do daily star stuff
    break;
  default:
    // Do something for domains that aren't covered above
    break;
}

幸運を!

于 2013-08-30T17:37:23.537 に答える