使用PHP SimpleXML提取RSS feed时出现问题:连接超时和空feed

时间:2018-11-19 22:22:00

标签: php rss simplexml rss-reader

我能够使用PHP SimpleXML成功解析许多RSS Feed。我很难用PHP SimpleXML读取两个特殊的提要。这两个提要在我的浏览器中都可以正常显示。

彭博资讯提供似乎没有返回任何数据:

https://www.bloomberg.com/politics/feeds/site.xml

卫生事务主题供稿具有连接超时:

https://www.healthaffairs.org/action/showFeed?ui=0&mi=3h0nmj&type=search&feed=rss&query=%26ConceptID%3D932%26content%3DarticlesChapters%26target%3Dtopic

我尝试过使用Health Affairs进行不同的url编码,并使用libxml_set_streams_context设置不同的流上下文选项。这是我用来打开这些连接的示例代码。

$opts = array( 'http' => array( 'timeout' => 10 ) );
$context = stream_context_create( $opts );
libxml_set_streams_context( $context );
libxml_use_internal_errors( true );
$rss = simplexml_load_file( $feed );

$error_msg = '';
if ( $rss === false ) {
    foreach( libxml_get_errors() as $error ) {
        $error_msg .= ' [' . $error->message . ']';
    }
    libxml_clear_errors();
}

// ...feed parsing

Curl似乎正在返回一个html页面,询问我是否是Bloomberg的机器人。对于卫生事务提要,curl超时了。我尝试了curl的其他选项,包括检查它是否是gzip内容。

// create curl resource
$ch = curl_init();

// set url
curl_setopt($ch, CURLOPT_URL, $feed);

//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_FAILONERROR, 1 );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt($ch, CURLOPT_TIMEOUT, 15 );
curl_setopt($ch, CURLOPT_ENCODING, "gzip" );

// $output contains the output string
$debug_output .= '[RSS FEED: ' . $feed . ']' . "\n";
$debug_output .= curl_exec( $ch );

// close curl resource to free up system resources
curl_close($ch);

0 个答案:

没有答案