Твиттер не работает - PullRequest
1 голос
/ 30 мая 2011

Привет! Я использую следующий PHP-код для разбора твиттера и отображения последних двух твитов в нижнем колонтитуле веб-сайта.

<ul id="twitter_update_list" style="word-wrap:break-word;">
<?php
    $doc = new DOMDocument();
    $doc->load('http://twitter.com/statuses/user_timeline/fixedgearfrenzy.rss');
    $arrFeeds = array();

    $count = 0;

    foreach ($doc->getElementsByTagName('item') as $node) 
    {           
        if($count < 2)
            echo('<li><span style="word-wrap:break-word;">'.substr($node->getElementsByTagName('description')->item(0)->nodeValue, 17).' </span><a href="'.$node->getElementsByTagName('link')->item(0)->nodeValue.'">'.substr($node->getElementsByTagName('pubDate')->item(0)->nodeValue, 0, 16).'</a></li>');

        $count = $count + 1;
    }
?></ul>

По некоторым причинам это не всегда работает, и в большинстве случаев отображается следующая ошибка.

Warning: DOMDocument::load(http://twitter.com/statuses/user_timeline/fixedgearfrenzy.rss) [domdocument.load]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /home/fixedge1/public_html/catalog/view/theme/CartMania-Clean/template/common/footer.tpl on line 336Warning: DOMDocument::load() [domdocument.load]: I/O warning : failed to load external entity "http://twitter.com/statuses/user_timeline/fixedgearfrenzy.rss" in /home/fixedge1/public_html/catalog/view/theme/CartMania-Clean/template/common/footer.tpl on line 336

Я не могу понять, почему на земле это иногда работает, а иногда нет, идеи ??

Веб-сайт http://www.fixedgearfrenzy.co.uk и это твиттер в правом нижнем углу

Ответы [ 2 ]

1 голос
/ 30 мая 2011

IIRC, Twitter накладывает почасовое ограничение на количество загрузок канала. Если ваши результаты периодически, это, вероятно, причина. Попробуйте кэшировать результаты канала локально, чтобы избежать повторной загрузки одних и тех же данных из Twatter снова и снова.

0 голосов
/ 30 мая 2011

Вы должны использовать действительный user-agent при использовании DOMDocument для загрузки удаленного ресурса .

<?php

// Set a valid user-agent
$opts = array(
    'http' => array(
        'user_agent' => 'PHP libxml agent',
    )
);

$context = stream_context_create($opts);
libxml_set_streams_context($context);

$doc = new DOMDocument();
$doc->load('http://twitter.com/statuses/user_timeline/fixedgearfrenzy.rss');
$arrFeeds = array();

// rest of your code...
...