8

私は次のコードを持っています:

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

ここに$this->feedは、RSSフィードのURLが含まれています。問題は、URLが有効なRSSフィードであることを確認するためにURLを検証する方法がわからないことです。

4

3 に答える 3

15

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

XMLであることを確認したら、いくつかのオプションがあります。

  1. isset($rss->channel->item)存在し、$rss->channel->item->count()>0であることを確認できます。
  2. を使用できますcount($rss->xpath(/channel/item)) > 0

個人的には、コードを読むときにxpathがもう少しわかりやすいので、xpathを使用します。


サイドノート:

真剣に?すでにXMLオブジェクトがあります。なぜ正規表現を使用しているのですか?

これを行わないでください:

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

これが有効なオプションである場合:

$g = $item->xpath('//img'); $g[0]->attributes()->src;
于 2012-10-08T05:56:05.043 に答える
1

これがお役に立てば幸いです。

?php

function validateFeed( $sFeedURL )
{

$sValidator = 'http://feedvalidator.org/check.cgi?url=';

if( $sValidationResponse = @file_get_contents($sValidator . urlencode($sFeedURL)) )
{
    if( stristr( $sValidationResponse , 'This is a valid RSS feed' ) !== false )
    {
        return true;
    }
    else
    {
        return false;
    }
}
else
{
    return false;
}
}

?>
于 2012-10-08T05:49:51.563 に答える
0

これを使って

$rss = new SimpleXmlElement($content);
if($rss)
{
     //your code
}
else
{ return false; }
于 2012-10-08T05:49:41.577 に答える