【プログラミング初心者向け】初めてのWEB-API ~WEB-API利用に慣れよう(PHP)~

初めてのWEB-APIPrograming
Photo by Luca Bravo on Unsplash

Web-APIの利用方法を Sagasoon.

最近は、色々なWEB-APIがありすぎて、一から作ることって早々はないのかもしれません。
駅前探索しかりtwitterしかり。
色々なサービスを使わせてもらって、自分がやりたいことを成就するような流れ。

ただ、初心者さんにはここの敷居が高いはず。
何を言ってるのか分からない。

ということで、本日は Twitter の APIをPHPで簡単に触ってみて、雰囲気を感じてもらえればと思ってます。

やること

  • twitterのAPIを利用
  • ライブラリを使う
  • twitterのAPIにリクエストを送付
  • twitterのAPIのレスポンスをみる

ハッキリ言って、APIの利用やライブラリは流れ作業です。

前提

twitterの利用申請

twitterのAPIの利用申請を下記からしておいてください。

https://developer.twitter.com/en/apply-for-access

最近、申請のハードルが上がって、質問が多くて面倒ですが。
英語の翻訳サイトを横に見ながら、やるといいですよ。

最後、下記の4つが発行されますので、メモしときましょ。

  • consumer_key
  • consumer_secret
  • access_token
  • access_token_secret

twitteroauthをダウンロードしよう

twitterのOAuth認証用のライブラリをダウンロードしときます。

GitHub - abraham/twitteroauth: The most popular PHP library for use with the Twitter OAuth REST API.
The most popular PHP library for use with the Twitter OAuth REST API. - abraham/twitteroauth

とりあえず検索してみよう

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件で検索させてます。

実際は、CTweet.phpの10行が認証やってます。検索はCTweet.phpで20行目です。
これが分かると、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には何があるかなーという好奇心と、自分でやってみるという努力と、誰かやってないかなという妥協。

API reference index
Standard search API

楽しんでください。

炭酸野郎

今日も何かを Sagasoonを運用してます。炭酸野郎です。
皆さんの「何か」が探せるべく、記事書いてます。
新卒で中堅SIerに就職→10年ちょいで退職→フリーランス→起業。副業としてのブログに目覚める(今ここ)。
時間作って、色々なことがやりたいお年頃です!

炭酸野郎をフォローする
Programing初心者apitwitterIT
炭酸野郎をフォローする
SAGASOON

コメント

タイトルとURLをコピーしました