プロが教える店舗&オフィスのセキュリティ対策術

TwitterAPI(ver1.1)を利用して自分のつぶやきをPHPで取得したいと思います。
認証は「OAuth.php」「twitteroauth.php」の外部ライブラリを利用しています。

下記のファイル構成でレンタルサーバーで試したところ、つぶやきのデータが取得できました。
しかし自分で構築したVPSのサーバーで実行しようとしたところ、処理に長く時間がかかり、「取得できません」という表示になってしまいます。

「OAuth」「twitteroauth」を使うにあたり、サーバーで設定すべき項目はあるのでしょうか?

また、下記のプログラムで変数 $twObj にはAPIキーなどが配列で入られているのはわかったのですが、 $req 以降の変数はvar_dumpをしても何も表示されません。
TwitterAPIからどのようなメッセージが返ってきているかを表示させるには、どのようなプログラムを書けばよいのでしょうか?

以上、ご回答よろしくお願いいたします。


環境
-----------------------------
PHP 5.3.3
apach 2.2.3
CentOS 5.4(VPSで構築したLinuxサーバー)
-----------------------------

ファイル構成
OAuth.php
twitteroauth.php
tweet.php
を同じディレクトリに配置。




tweet.php
------------------------------------------------------------------------------
require_once 'twitteroauth.php';
$twObj = new TwitterOAuth($ConsumerKey,$ConsumerSecret,$AccessToken,$AccessTokenSecret);
//APIのキーは取得したものを代入しています。(記載は省略)
$req = $twObj->OAuthRequest('https://api.twitter.com/1.1/statuses/user_timeli …
$tweets = json_decode($req);
if (isset($tweets) && empty($tweets->errors)) {
echo '<dl>';
foreach ($tweets as $val) {
echo '<dd>' . $val->text . '';
}
echo '</dd></dl>';
} else {
echo '取得できません。';
}
-----------------------------------------------------------------------

A 回答 (2件)

あ、PHPバージョン5.3.3でしたか。

このバージョンでは配列の省略記法は使えないので

['count' => 10]



array('count' => 10)

に変更してください。

…しかし、PHPバージョン5.3のサポートは既に終了しており、脆弱性などが見つかってもパッチは発行されません。その次のバージョンの5.4でさえも1年以内にサポートが終了する予定です。環境的な理由でどうしてもアップデート出来ないなどのケースを除けば、最近は5.5と5.6がスタンダードになりつつあります。セキュリティ面だけではなく今回のように機能面で不便を感じることも多いので、可能な限りサポートされている新しいバージョンを使うようにしましょう。VPSであれば自由にPHPをインストールできるので5.6を使うのがいいと思います。
    • good
    • 0
この回答へのお礼

To_aru_Userさま

ご回答ありがとうございます。
PHPのバージョンはこれを期にアップデートしたいと思います。
バージョン5.6という情報もありがとうございました。
最新のものにしてみます。

お礼日時:2014/12/04 16:44

twitteroauthだとJSONを取得できなかったときの原因追及が困難なので、よければ代わりにTwistOAuthを使ってください。

twitteroauthを意識した設計になっていて、学習コストは低く、且つそれよりも豊富な機能と高い信頼性を実現しています。作者自分で言うのもアレですが事実上の上位互換です。

TwistOAuth
https://github.com/mpyw/TwistOAuth

【サンプル】

PHPバージョン5.4以降を想定しています。array_mapが分かりにくかったら普通にforeachで書いてもらっても構いません。

<?php

require 'TwistOAuth.php';

// ここにキーを設定
$ck = '';
$cs = '';
$ot = '';
$os = '';

// 今回はHTMLではなくプレーンテキストとして簡易表示
header('Content-Type: text/plain; charset=utf-8');

try {
 $to = new TwistOAuth($ck, $cs, $ot, $os);
 print_r(array_map(
  function ($status) {
   // 公式リツイートの場合は元ツイートに置換
   if (isset($status->retweeted_status)) {
    $status = $status->retweeted_status; 
   }
   // ステータスオブジェクトをもとに整形して表示したい文字列を生成
   // ツイート本文だけはあらかじめエスケープされているので
   // テキストとして表示する場合は逆にアンエスケープが必要
   return sprintf('%s(@%s): %s',
    $status->user->name,
    $status->user->screen_name,
    htmlspecialchars_decode($status->text, ENT_NOQUOTES)
   );
  },
  $to->get('statuses/user_timeline', ['count' => 10])
 ));
} catch (TwistException $e) {
 echo 'エラー:' . $e->getMessage();
}
    • good
    • 0
この回答へのお礼

To_aru_Userさま

ご回答ありがとうございます。
「twitteroauth」以外にも認証の仕組みがあるんですね。
丁寧にソースまで書いていただいてありがとうございます。
導入の検討をしてみたいと思います。
ありがとうございました。

お礼日時:2014/12/04 16:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!