1

我正在建立一个专注于叙利亚冲突的新闻/博客聚合器,我希望能够确定来源。这是一个简单的站点,聚合器是一个外部 javascript,它从我的 Yahoo Pipes 中提取 RSS。我的问题是我找不到识别来源的方法(即 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 回答