【TwitterAPI】「user_timeline.json」から受け取ったデータのエラー判別
TwitterAPIの「user_timeline.json」にリクエストを投げた場合、json形式のデータが帰ってきますが、その後それをjson_decodeして処理しています。
そのときにエラーの判別をして処理分岐させているのですが、先日そのエラー判別の方法が間違っていたことに気づきました。
ここでは私が行ったエラー判別の方法をメモしておきたいと思います(TwitterAPIのリクエストとデータ処理はPHPで行っています)。
「user_timeline.json」へのリクエストとデータ取得
私は次のようなプログラムで「user_timeline.json」にリクエストを行ってデータを取得しています(TwitterAPI認証ライブラリ「twitteroauth」を使用)。
//TwitterAPI認証ライブラリ「twitteroauth」の利用 require_once("twitteroauth/twitteroauth.php"); //認証情報 $consumerKey = "**********"; $consumerSecret = "**********"; $accessToken = "**********"; $accessTokenSecret = "**********"; //認証オブジェクトの作成 $twObj = new TwitterOAuth($consumerKey,$consumerSecret,$accessToken,$accessTokenSecret); //「user_timeline.json」にリクエストするオプションの組み立て $options = array( 'screen_name'=>'ここにユーザーを指定', 'count'=>ここに取得したいツイートの件数(整数で指定、最大200) ); //リクエスト $json = $twObj->OAuthRequest( 'https://api.twitter.com/1.1/statuses/user_timeline.json', 'GET', $options ); //データ取得 $jset = json_decode($json, true); //取得したデータの確認 if($jset != null){ //データの取得完了 echo "データあり!処理続行!"; //ここからループ処理 foreach($jset as $tweet_data){ //ここに処理 } }else{ //データの取得失敗 echo "データなし!エラーのため処理終了"; }
そして上のプログラムの29~40行でエラーの判別を行っていたのですが、この部分が大きく間違っていました。
エラーの場合はデータが帰ってこない?
帰ってきたデータを「$jset」に格納しているのですが、私は無意識のうちに
エラーの場合はデータが帰ってこない
よって「$jset」にデータがある場合は「データの取得ができている」、データがない場合は「データの取得ができていない」
と確認もせず次のようなとんでもない勘違いエラー判別をしていました。
//取得したデータの確認 if($jset != null){ //データの取得完了 echo "データあり!処理続行!"; //ここからループ処理 foreach($jset as $tweet_data){ //ここに処理 } }else{ //データの取得失敗 echo "データなし!エラーのため処理終了"; }
エラーの場合でもデータは帰ってくる!
今思えば当たり前のことなんですが、リクエストを投げてエラーがあってもTwitter側からデータは帰ってきます。
以下、私がいろいろなパターンを実行し、「$jset」の中身を確認したものです。
非公開設定にしているユーザーを指定した場合
非公開設定をしているユーザーのツイートを取得しようとすると、次のようなエラーデータが帰ってきます。
Array
(
[request] => /1.1/statuses/user_timeline.json?contributor_details=&count=***&exclude_replies=***&include_rts=&oauth_consumer_key=***&oauth_nonce=***&oauth_signature=***&oauth_signature_method=***&oauth_timestamp=***&oauth_token=***&oauth_version=***&screen_name=***&trim_user=***
[error] => Not authorized.
)
存在しないユーザーを指定した場合
存在しないユーザーのツイートを取得しようとすると、次のようなエラーデータが帰ってきます。
Array
(
[errors] => Array
(
[0] => Array
(
[code] => 34
[message] => Sorry, that page does not exist.
)
)
)
※「code」の [ と ] は全角にしています
空のデータが帰ってくるパターン
なお、1回もツイートしていないユーザーを指定した場合、次のように空のデータが帰ってきます。
Array
(
)
※「screen_name」に「null」や「""」、「" "」(半角空白1つ以上)を指定してリクエストすると、自分自身のツイートが取得されます(Webアプリやツールをつくる場合はこの対処も必要)
エラーの判別方法
ということで、私は次のようにエラーの判別を行いました。
//取得したデータの確認 if($jset && !$jset[error] && !$jset[errors]){ //データの取得完了 echo "データあり!処理続行!"; //ここからループ処理 foreach($jset as $tweet_data){ //ここに処理 } }elseif($jset[error] == "Not authorized."){ //ユーザーが非公開設定だった場合 echo "このユーザーは非公開設定のためツイートは取得できません"; }elseif($jset[errors][0][code] == 34){ //ユーザーが存在しない場合 echo "ご指定のユーザーは存在しません"; }elseif($jset == null){ //ツイートしていないユーザーだった場合 echo "ご指定のユーザーのツイート情報はありませんでした"; }else{ //その他のエラー echo "何らかのエラーがあります"; }
※12行目の[code]の [ と ] は全角です
まだまだ、エラーの種類はあるかもしれませんし、すっきりしないコードですが、とりあえずこのようにエラー判別をしてみました。
あわせて読んでほしい!
コメント
まだコメントはありません。