【问题标题】:Search thorugh links and identify RSS source with Regex, PHP or Javascript搜索链接并使用 Regex、PHP 或 Javascript 识别 RSS 源
【发布时间】:2013-08-31 07:21:49
【问题描述】:

我正在建立一个专注于叙利亚冲突的新闻/博客聚合器,我希望能够确定来源。这是一个简单的站点,聚合器是一个外部 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

【问题讨论】:

    标签: php javascript regex rss


    【解决方案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;
    }
    

    祝你好运!

    【讨论】:

    • 做得很好。他们可能希望保留一系列可以用来代替交换机的潜在域。这样,如果添加了新源,它就不会被省略。
    • 这是一个不错的选择。或者,可以在 switch 语句中使用默认情况来对未涵盖的域进行后备。我现在将其添加到答案中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    相关资源
    最近更新 更多