я использую этот простой скрипт для разбора данных RSS:
<?php //PUBLIC VARS $arrFeeds = array(); $downItems = 0; //*PUBLIC VARS function getRSS($source) { global $arrFeeds, $downItems; $doc = new DOMDocument(); $doc->load($source); foreach ($doc->getElementsByTagName('item') as $node) { $itemRSS = array ( 'title' => $node->getElementsByTagName('title')->item(0)->nodeValue, 'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue, 'link' => $node->getElementsByTagName('link')->item(0)->nodeValue ); array_push($arrFeeds, $itemRSS); $downItems+=1; //echo($arrFeeds[$TT]['title']."<br>"); } } getRSS("http://www.atm-mi.it/_layouts/atm/apps/PublishingRSS.aspx?web=388a6572-890f-4e0f-a3c7-a3dd463f7252&c=News%20Infomobilita"); echo(strip_tags($arrFeeds[1]['title'])."<br><br>".$arrFeeds[1]['desc']); ?>
Этот скрипт прекрасно работает практически с любой вашей rss-версией, но с этой конкретной: http://www.atm -mi.it /_layouts / atm / apps / PublishingRSS.aspx? web = 388a6572-890f-4e0f-a3c7-a3dd463f7252 & c = News% 20Infomobilita это не сработает, и rss действительна, так что я думаю, что это может быть проблема безопасности, в любом случаеКак я могу решить эту проблему и сделать мой сценарий более реалистичным?Спасибо!
Мне удалось заставить это работать, изменив значение "default_socket_timeout с помощью ini_set. Проблема заключается в том, что сервер пытается сохранить соединение живое.
default_socket_timeout
ini_set
$url = 'http://www.atm-mi.it/_layouts/atm/apps/PublishingRSS.aspx?web=388a6572-890f-4e0f-a3c7-a3dd463f7252&c=News%20Infomobilita'; ini_set('default_socket_timeout', 1); $dom_document = new DOMDocument; $dom_document->load($url);
В качестве альтернативы, вы можете рассмотреть возможность использования cURL , что гораздо более гибко.
$url = 'http://www.atm-mi.it/_layouts/atm/apps/PublishingRSS.aspx?web=388a6572-890f-4e0f-a3c7-a3dd463f7252&c=News%20Infomobilita'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $dom_document = new DOMDocument; $dom_document->loadXml(curl_exec($ch)); curl_close($ch);