- ベストアンサー
PHPのPEARのServices_Twitterのエラーについて
- PHPでtwitterAPIを扱いたいと思い、PEARのServices_Twitterを使っていますが、「Unsupported endpoint statuses」というエラーメッセージが出る一方で、動きません。
- 多くのWEBサイトにある多数のスクリプトサンプルを試してみたのですが、全て上記エラーのみが表示される状況で、スクリプトミスというのがすこし考えがたい状況です。
- レンタルサーバを使っていまして、OAuth認証の結果をもとにServices_Twitterのインスタンスを作成しています。Services_Twitter自体は動作しているので、手動でインストールしてインクルードしています。スクリプトミスではない場合、考えられるエラー原因について教えていただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
(一部問題はありましたが)こちらでは提示されたコードも 問題なく動作しました。 ライブラリ等は正常に読み込まれているでしょうか? 『Unsupported』とありますので、サポートされていない 関数か何かを呼び出しているのだと思いますが・・・ Services_Twitterは「Services」以下のフォルダだけでなく、 「data」フォルダも必要ですが、すべてきちんとアップロード してありますか? ※Servicesフォルダと同階層にアップしてある必要があります。 一部問題があった件についてですが、以下の部分になります。 // get recent posts on public timeline $response = $twitter->statuses->public_timeline(); if (count($response->status) > 0) { echo '<h2>Recent public timeline updates</h2>'; foreach ($response->status as $status) { このままだと取得したタイムラインが表示されませんので、 以下のように修正します。 // get recent posts on public timeline $response = $twitter->statuses->public_timeline(); if (count($response) > 0) { echo '<h2>Recent public timeline updates</h2>'; foreach ($response as $status) { ※修正するのは2行だけです。 (「$response->status」を「$response」にしてあります。) それから、気になった事なのですが、Services_Twitterと HTTP_OAuthの組み合わせの他に、twitteroauthを使用して いますが、どちらか一つに統一してはいかがでしょうか? Services_TwitterとHTTP_OAuthの組み合わせで利用する場合 は、以下のコードを修正していけば良いと思います。 http://zuzara.com/blog/2010/01/20/complete-working-sample-for-services_twitter-oauth-in-php-pear/ ※「http://zuzara.com/twitter_oauth.php」は、自分のアプリ のURLに変更します。 ※「http_redirect()」が使用できない場合は、「header()」が 代用できます。
その他の回答 (1)
- liv2007
- ベストアンサー率81% (378/464)
「Unsupported endpoint statuses」の後ろはどのようなエラーに なっていますか? 「Unsupported endpoint statuses/getHomeTimeline」なら 「$xxxxx->statuses->home_timeline();」に、 「Unsupported endpoint statuses/getPublicTimeline」なら 「$xxxxx->statuses->public_timeline();」にという具合で コードを修正してみてください。 ※その他のエラーの場合も同じように修正する必要があると 思います。 http://www.yuigahama.org/?p=315 http://apiwiki.twitter.com/Twitter-API-Documentation
お礼
/* 認証初期化 */ function TokenInit() { //OAuth接続初期化 $tOAuth = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); //認証トークン取得 $getToken = $tOAuth->getRequestToken(); //認証トークン格納 $_SESSION['RequestToken'] = $getToken['oauth_token']; //認証トークン格納 $_SESSION['RequestTokenSec'] = $getToken['oauth_token_secret']; //ステータス更新 $_SESSION['status'] = 'READY'; //リクエストリンク生成 return $tOAuth->getAuthorizeURL($getToken['oauth_token']); } /* アクセス認証 */ function AccessToken() { //OAuth接続初期化 $tOAuth = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['RequestToken'], $_SESSION['RequestTokenSec']); //アクセストークン取得 $getToken = $tOAuth->getAccessToken(); //アクセストークン格納 $_SESSION['AccessToken'] = $getToken['oauth_token']; //アクセストークン格納 $_SESSION['AccessTokenSec'] = $getToken['oauth_token_secret']; } ?> お礼画面への追記で大変恐縮です。上記がfunctionの全てです。色々とありがとうございます。可能な範囲で教えていただければ幸いです。
補足
Unsupported endpoint statusesの後ろには何もついていない状況なのですが、これはエラーの出し方がおかしいのでしょうか?長くて恐縮ですが、私が作成したスクリプトを下記に掲載させていただきますので、可能な範囲で結構ですので、ご確認いただければ幸いです。 <?php session_start(); require_once("inc/twitteroauth.php"); /* OAuth Data */ define("CONSUMER_KEY", "********"); define("CONSUMER_SECRET", "********"); //startボタンが押された場合 if (isset($_POST["start"])){ //リクエストトークン取得、ユーザ承認 $rdurl = TokenInit(); $rdurl = sprintf("Location: %s", $rdurl); header($rdurl); //アクセストークン取得 }elseif(($_SESSION['status'] == 'READY') && $_GET["oauth_token"]){ AccessToken(); require_once("inc/Services/Twitter.php"); require_once("inc/HTTP/OAuth/Consumer.php"); //twitter操作(Services_Twitter) try{ $twitter = new Services_Twitter(); $oauth = new HTTP_OAuth_Consumer(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['AccessToken'], $_SESSION['AccessTokenSec']); $twitter->setOAuth($oauth); // get recent posts on public timeline $response = $twitter->statuses->public_timeline(); if (count($response->status) > 0) { echo '<h2>Recent public timeline updates</h2>'; foreach ($response->status as $status) { echo '<div class="item"><img src="' . $status->user->profile_image_url . '" class="img" />'; echo $status->text . '<br/>'; echo 'By: <em>' . $status->user->screen_name . '</em> on ' . $status->created_at . '</div>'; } } } catch (Services_Twitter_Exception $e) { echo $e->getMessage(); } //初期画面 }else{ print<<<END <form action="login.php" method="post"> <p>Services Twitter Test</p> <input type="submit" name="start" value="START" /> </form> END; } ※functionは別途記載いたします。
お礼
丁寧にご教示いただきましてありがとうございました。お礼が遅くなり申し訳ございません。 ご指摘いただいた内容を修正させていただいた試したところ、エラー内容が変わりまして、「Call to undefined function json_decode() 」となりました。これは、現在使っているServer QueenというレンタルサーバのPHPバージョンが古くServices_Twitterで使用しているjson_decode()という関数が使えずに、エラーになっているようです。PHPのバージョンアップが出来れば上記エラーもなくなり、ご指摘いただいた内容でうまくいきそうです。別の環境でも試してみます。ありがとうございました。