我能够使用PHP SimpleXML成功解析许多RSS Feed。我很难用PHP SimpleXML读取两个特殊的提要。这两个提要在我的浏览器中都可以正常显示。
彭博资讯提供似乎没有返回任何数据:
https://www.bloomberg.com/politics/feeds/site.xml
卫生事务主题供稿具有连接超时:
我尝试过使用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);