如何检查URL是否是PHP中的有效RSS源

J.K*_*.A. 8 php rss

我有以下代码:

    function parse() {
        $content = file_get_contents($this->feed);        
        $rss = new SimpleXmlElement($content);
        $rss_split = array();
        $i = 0;
        foreach ($rss->channel->item as $item) {
            $title = (string) $item->title; // Title
            $link = (string) $item->link; // Url Link            
            $content = $item->children('content', true)->encoded;
            preg_match('/<img.+src=[\'"](?P<src>.+)[\'"].*>/i', $content, $image);
            $image = substr($image['src'], 0, strpos($image['src'], '"'));
            $rss_split[$i]['title'] = $title;
            $rss_split[$i]['link'] = $link;
            $rss_split[$i]['image'] = $image;
            $i++;
        }
        return $rss_split;
    }
Run Code Online (Sandbox Code Playgroud)

在这里,$this->feed包含RSS提要的URL.问题是我不知道如何验证URL以确保它是有效的RSS源.

cwa*_*ole 13

要验证它是XML:

function parse()
{
    $content = file_get_contents($this->feed); 
    try { $rss = new SimpleXmlElement($content); }
    catch(Exception $e){ /* the data provided is not valid XML */ return false; }
    // rest of your function goes here
Run Code Online (Sandbox Code Playgroud)

一旦您确认它是XML,您就有几个选择:

  1. 你可以检查以确保isset($rss->channel->item)存在和$rss->channel->item->count()> 0.
  2. 你可以用count($rss->xpath(/channel/item)) > 0.

我个人使用xpath,因为我在阅读代码时发现它更加明显.


边注:

真的吗?你已经有了XML对象.你为什么使用RegEx?

不要这样做:

preg_match('/<img.+src=[\'"](?P<src>.+)[\'"].*>/i', $content, $image);
Run Code Online (Sandbox Code Playgroud)

如果这是一个有效的选项:

$g = $item->xpath('//img'); $g[0]->attributes()->src;
Run Code Online (Sandbox Code Playgroud)