【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]の [ と ] は全角です
まだまだ、エラーの種類はあるかもしれませんし、すっきりしないコードですが、とりあえずこのようにエラー判別をしてみました。
あわせて読んでほしい!
コメント
まだコメントはありません。


