Web-APIの利用方法を Sagasoon.
最近は、色々なWEB-APIがありすぎて、一から作ることって早々はないのかもしれません。
駅前探索しかりtwitterしかり。
色々なサービスを使わせてもらって、自分がやりたいことを成就するような流れ。
ただ、初心者さんにはここの敷居が高いはず。
何を言ってるのか分からない。
ということで、本日は Twitter の APIをPHPで簡単に触ってみて、雰囲気を感じてもらえればと思ってます。
やること
- twitterのAPIを利用
- ライブラリを使う
- twitterのAPIにリクエストを送付
- twitterのAPIのレスポンスをみる
ハッキリ言って、APIの利用やライブラリは流れ作業です。
前提
twitterの利用申請
twitterのAPIの利用申請を下記からしておいてください。
最近、申請のハードルが上がって、質問が多くて面倒ですが。
英語の翻訳サイトを横に見ながら、やるといいですよ。
最後、下記の4つが発行されますので、メモしときましょ。
- consumer_key
- consumer_secret
- access_token
- access_token_secret
twitteroauthをダウンロードしよう
twitterのOAuth認証用のライブラリをダウンロードしときます。
とりあえず検索してみよう
sampleというディレクトリに twitteroauth を解凍して、twitterの検索機能 を作っていきます。
2つファイルを作りますので、sampleディレクトリの直下に保存してください。
search.php
<?php require_once("twitteroauth/twitteroauth.php"); class CTweet { var $connection = null; function CTweet($c_key,$c_secret,$a_token,$a_token_secret) { $this->connection = new TwitterOAuth($c_key,$c_secret,$a_token,$a_token_secret); } function getConnection() { return $this->connection; } function searchTweet( $keyword ,$ct=100 ) { return $this->getConnection()->get('search/tweets',array('q' => $keyword ,'lang'=>'ja' ,'count',$ct )); } }
CTweet.php
#!/usr/local/php/5.6/bin/php <?php require_once( 'CTweet.php' ); $consumer_key="*******************"; $consumer_secret ="*******************"; $access_token="*******************"; $access_token_secret ="*******************"; $tweet = new CTweet( $consumer_key,$consumer_secret,$access_token,$access_token_secret ); $tweets = $tweet->searchTweet('Sagasoon1',100 ); var_dump( $tweets );
実行
さあ、実行です。
実行をすると、「Sagasoon1」というキーワードを含んでいるツイートを検索してくれます。
画面に出てくるのは、検索結果です。
プログラムをちょっと細かくみてきます。
search.phpの9行目で認証のリクエストを投げてます。twitterへOAuth認証してくれてます。
11行目がtwitterへの検索リクエスト。今回でいうと「Sagasoon1」というキーワードを最大100件で検索させてます。
これが分かると、TwitterOAutuのライブラリも、同じような感じで認証や検索をかみ砕いてやってそうだということが、お分かりいただけるかと。
最後、
var_dump( $tweets );
というのがあります。
実行した時に、画面にずらっと出てきたあの文字を出してる命令です。
検索結果で返答された内容、つまり$tweets の内容が画面にでてきてるわけですが、この結果、どうも見慣れないですよね。
この結果をよくみると、
- 検索されたツイートのメッセージ
- 誰がツイートしたメッセージか
- いつツイートしたのか
とか、記載されてるのが、「うすうす」分かります。
object(stdClass)#6 (2) { ["statuses"]=> array(15) { [0]=> object(stdClass)#7 (26) { ["created_at"]=> string(30) "Mon Feb 10 11:05:09 +0000 2020" ["id"]=> int(1226824417235202049) ["id_str"]=> string(19) "1226824417235202049" ["text"]=> string(158) "RT @Sagasoon1: 【動画サイト】お外出にくいし U-NEXT で楽しみましょ! hppts://t.co/FKBgDmwMjj #blog #Sagasoon #ブログ #さがしもの" ["truncated"]=> bool(false) ["entities"]=> object(stdClass)#8 (4) { ["hashtags"]=> array(4) { [0]=> object(stdClass)#9 (2) { ["text"]=> string(4) "blog" ["indices"]=> array(2) { [0]=> int(71) [1]=> int(76) } } [1]=>
1行目:object(stdClass)
このツイートの検索は、オブジェクト型の変数ですよと。さらっと流して大丈夫です。
塊ですよってぐらいでOK。
その次に、[”statuses”]って書いてありますよね。
この塊の中に、「プロパティでstatusesってのがあります」っていう意味です。
その下に array(15)ってありますよね。
これは、「このstatusesは配列で15要素あります」ってことです。
つまり
$tweets->statuses[0] ~ $tweets->statuses[14]
のアイテムがあるってことです。
推測
先ほどの結果ですが、
なんとなく、なんとなく、
結果が15件あるんじゃないかな?
って推測できますよね。
$tweets->statuses[0] は、1個目の検索結果
:
$tweets->statuses[14] は、15個目の検索結果
つまり
for( $i=0;$i<=14;$i++) { view_result( $tweets->statuses[ $i ] ); /* なにか自分で作った関数に 検索結果を順番に受け渡し*/ }
みたいなことしたら、1個目~15個目の検索結果を、どうにか出来そうですねえ。
同じようにやってみる
さて、同じようにみていってください。
5行目、「 object(stdClass)#7 (26) {」って書いてありますね。
塊登場です。
塊の中に「プロパティでcreated_at があります」っていってます。さっきと同じです。
その下に、string(3)とかなんとか書いてありますよね。
$tweets->statuses[0]->created_at
string(30) “Mon Feb 10 11:05:09 +0000 2020”
これは、created_atのプロパティで、文字(string)で30文字で「Mon Feb 10 11:05:09 +0000 2020」がありますという意味です。
$tweets->statuses[0]->id
$tweets->statuses[0]->id_str
$tweets->statuses[0]->text
とかも、順番にみられますよね。textのプロパティは、これはツイートのメッセージです。
よくみると、頭に RT 文字が入っているので、リツイートしたメッセージですね。
var_dumpで中身をみて推測する
いかがでしょうか。
レスポンスを、どう使ったら分からなかったら、var_dumpでレスポンスを表示してみるのが一番手っ取り早いです。
中身をみると、今のように雰囲気が推測できますよね。
今のやり方をみていたら、雰囲気だけじゃなく、どうアクセスしたらよいかもわかるんじゃないかと思います。
まとめ
twitterのAPIでご紹介しましたが、こういったAPIは、「APIを使う」「結果をvar_dumpで出して推測する」というのを繰り返すだけです。
API仕様書というのがtwitterで出てますから、それを横に見ながら、返答内容を確認する感じです。
あとは、APIには何があるかなーという好奇心と、自分でやってみるという努力と、誰かやってないかなという妥協。


楽しんでください。
コメント