PHP: ツイッターAPIを使用してツイート収集を行う。PHPの方が理解しやすい説

2018年7月5日API, PHP, Twitter, ツイッター

みなさん、こんにちは。研究でツイート収集している人に囲まれているので収集してみよ〜と思って始めたPQTomです。
みなさん、ツイッター使っていますか?日本人のツイッター使用率はかなりのものなんですよ。実は。
いつも何にも考えずに使用しているであろうツイッター、実は大事な研究材料として使用させてもらってます。笑笑
自分のアカウントは鍵がついているから大丈夫と思っている君!。。。大丈夫です。
さすがに鍵付きアカの情報は使用していませんし、そもそも収集することができないようになっています。
収集させてもらっているツイートは全部鍵がついていないアカウントの情報です。
まー鍵がついていないんで公開情報として見られても不思議ではないですよね。
今回はツイート収集どのように行なっているのか紹介していきたいと思います。簡単に。

目次

Twitter API

ツイッター社はTwitter APIなるものを公開しています。
これを使用して収集を行います。
こちらが公式のページです。興味があったら飛んでみてください。

https://developer.twitter.com/content/developer-twitter/en.html

ページへ飛んでみると全文英語で表示されています。
メンドウですよね。全部みるの。。。そういう時は違うサイトをみて翻訳と説明を調べましょう。
簡単に見つかると思います。
ちょっとこのブログの中ではいろんな事情で翻訳して紹介することはできないんですけど笑
とりあえず登録してみてください。
普通に使う分には無料ですし、デメリットはないと思います。
(強いていうならツイッターをあまり使用しない人に取っては今後使用しなくて単なる時間の無駄になることかな笑)
今回の話はTwitter APIの登録が終わっていること前提のお話です。
(登録の流れの説明が欲しかった人、ごめんね)

どの言語を使用して行う?

本題はここからです。
ツイート収集を行う際、どのプログラミング言語を使用しますか?
主に使用される言語としてはpythonです。(僕の周りだけかも)
pythonは初心者でも手を出しやすく、ライブラリが多いです。
なので、自分で全てを書かずともライブラリを使用して簡単にできるってところがpythonの良さです。
しかし、僕はPHPを使用してツイート収集を行いました。
僕は思ったんです。
みんなpythonを使用しているからと言って、わざわざ乗り換える必要はないだろ。。。。と。
実際行なってみると意外に簡単にでき、初心者でも秒でできるものでした。
ではやっていきましょう。

Oauth

コードを作成していくんですが、まず、Oauth認証ってやつが必要になります。
この認証システムについては収集を行う上で大した問題ではないのでシカトします。
知っておく必要があるのはAccessTokenとCustomerKeyについてです。
Twitter APIを使用するにはこの二つが重要になってくるので覚えて起きましょう。
これがAPIの使用するための鍵です。紛失に注意しよう。
大した問題ではないと言ったものの、実際にプログラミングを行なっていく上でこやつはかなり厄介です。
自分でOauth認証のコードを書くと時間もかかるし、ムズイです。
なのでここはライブラリで乗り切ります。(既存であるなら自分で書く必要ないかなって)

https://github.com/abraham/twitteroauth

一番有名なOauthライブラリらしいです。
これを使用します。簡単にダウンロードして使用するので問題なくいけます。
ダウンロードしたら二つのファイルがあると思います。

twitteroauth.php
OAuth.php

この二つを同じディレクトリ内に移動させます。
ではコードを書いていきましょう。
まず、ダウンロードしたファイルの参照から

例.

require_once("twitteroauth.php");

これで参照完了。
もう一つのOAuth.phpの方はtwitteroauth.phpの方で参照されているので必要ありません。

自分の情報入力

自分の情報の入力をしていきます。
と言っても、生年月日とかそういうんじゃないです笑
Consumer key, Access Tokenですね。
これはTwitter developerに登録してアプリ作成してから受け取れるのでそれを使います。
これがないと怪しまれて、API使用できないですよ。

例.

$consumerkey = "Consumer Key";
$consumersecret = "Consumer Secret";
$accesstoken = "Access Token";
$accesstokensecret = "Access Token Secret";

インスタンス化

インスタンス化して使えるようにしていきます。

例.

$twitterobj = new TwitterOAuth($consumerkey, $consumersecret, $accesstoken, $accesstokensecret);

これで$twitterobjとして使用することができるようになりました。

認証してもらってツイートを受け取ろう

では使っていきましょう。
ユーザーのタイムラインを取得するためにリクエストを送ります。
送り先は

https://api.twitter.com/1.1/statuses/user_timeline.json

で送り方はGETです。
そこからどんな情報をどれだけ欲しいか設定します。
今回はまず私PQTomのツイート新しいもの上から100件取りたいって設定にします。すると
array(
'count'=>'100',
'screen_name'=>'PQTom3',
)

と書くことができます。まとめると

例.

$request = $twitterobj->OAuthRequest('https://api.twitter.com/1.1/statuses/user_timeline.json','GET',
array(
'count'=>'100',
'screen_name'=>'PQTom3',
));

こんな感じです。もっと詳しく設定することも可能です。

JSONのデコード

ここまで実行すると$requestの中にjson形式のデータが飛んでくるのでそれをデコードしてあげます

例.

$results = json_decode($request);

この状況で今、$resultsの中に連想配列でデータが入っている状態です。
ではいつものように

var_dump($results);

で結果を見てみましょう。ブラウザで実行すると

はい。訳わかんないですね。こういう時は右クリックでソースコードで表示をしてみます。

多少は見やすくなりましたかね。。。
実際自分のツイートは7件くらいしかしてないので7件の取得になりました。
100件以上している人のツイートであればしっかり100件取得することができるはずです。

今日のことをまとめたコードをあげておきます。参考までに。

例.

<!DOCTYPE html>

<html lang = "ja">
<head>
<meta charset = "UTF-8">
<?php
//authライブラリ
require_once("twitteroauth.php");

//ユーザー情報の入力
$consumerkey = "Consumer Key";
$consumersecret = "Consumer Secret";
$accesstoken = "Access Token";
$accesstokensecret = "Access Token Secret";

//twitteroauthでインスタンス化 
$twitterobj = new TwitterOAuth($consumerkey, $consumersecret, $accesstoken, $accesstokensecret); 

//リクエストの設定 
$request = $twitterobj->OAuthRequest('https://api.twitter.com/1.1/statuses/user_timeline.json',
                      'GET', 
                      array( 
                           'count'=>'100', 
                           'screen_name'=>'PQTom3', 
                       )); 

//JSONのデコード
$results = json_decode($request); 

//結果表示
var_dump($results); 

</body> 
</html>

まとめ

今回TwitterAPIを使用して自分のツイートを収集してみました。
実際に自分のツイートを収集するメリットがあるのかと聞かれるとまー無いでしょう笑
ここからいろいろ発展させて研究できるので教養程度にやってみてもいいのではないでしょうか。

すごい長文になってしまいました。
二つに分ければよかったな。。。。。。
ツイート収集に関してはまだまだ書いたいことがあったのですが、次回にします。
申し訳ない泣泣

今日はこのへんで。
ではでは。