0

Magento で構築したサイトのサイドバーに Twitter フィードがあり、次の PHP が Twitter API を呼び出し、フィードをリストとして投稿します。

 <?php
        $feedUrl = 'https://api.twitter.com/1/statuses/user_timeline.xml?screen_name=ecpublish&count=4';
        $feedXml = file_get_contents($feedUrl);
        try {
            $feedXml = new SimpleXMLElement($feedXml);
        } catch (Exception $e) {
            echo 'Caught exception: ',  $e->getMessage(), "\n";
        }

        ?>
        <ul>
                <?php foreach($feedXml[0]->channel->item as $elName => $child): ?>          
                <li>
                    <a href="<?php echo (string)$child->link; ?>" title="" target="_blank"><?php echo substr((string)$child->title, 11); ?></a>
                </li>
            <?php endforeach ?>                 
        </ul>  

残念ながら、system.log に次のようなエラーが表示されます。

2012-12-04T01:02:33+00:00 ERR (3): 警告: file_get_contents(https://api.twitter.com/1/statuses/user_timeline.xml?screen_name=ecpublish&count=4) [function.file -get-contents]: ストリームを開くことができませんでした: HTTP 要求が失敗しました! /clientdata/apache-www/e/c/ecpublishing.com.au/www/app/design/frontend/default/ecp/template/page/sidebar/twitter.phtml 行 9 の HTTP/1.0 400 Bad Request

urlencode()、cURL、PHP バージョンのチェック、fopen ステータスなどの修正を試みましたが、何も解決しません。Twitter のレート制限が原因である可能性があると感じています: https://dev.twitter.com/docs/rate-limitingしかし、これがなぜなのかはわかりません。

私のサイトは: http://ecpublishing.com.au

4

1 に答える 1

0

ok it seems the get_file_contents wasn't being accepted by my host, so I retried a cURL function and got it working perfectly. Code below:

<?php            
        $url = 'https://api.twitter.com/1/statuses/user_timeline.rss?screen_name=ecpublish&count=4';
        function get_data($url) {
            $ch = curl_init();
            $timeout = 5;
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
            $data = curl_exec($ch);
            curl_close($ch);
            return $data;
            }
            $returned_content = get_data('https://api.twitter.com/1/statuses/user_timeline.rss?screen_name=ecpublish&count=4');
            try {
            $returned_content = new SimpleXMLElement($returned_content);
                } catch (Exception $e) {
            echo 'Caught exception: ',  $e->getMessage(), "\n";
            }

        ?>
        <ul>
                <?php foreach($returned_content[0]->channel->item as $elName => $child): ?>          
                <li>
                    <a href="<?php echo (string)$child->link; ?>" title="" target="_blank"><?php echo substr((string)$child->title, 11); ?></a>
                </li>
            <?php endforeach ?>                 
        </ul>  
于 2012-12-05T01:33:27.243 に答える