前提

Application ManagementでAPIを利用するためのアプリケーションを作成しておきましょう。ここで作成されたコンシューマーキーが必要になるからです。

準備

まずは環境の確認です。

Laravelのバージョンは5.3です。thujohn/twitterはLaravelでTwitter APIを簡単に利用できるようになるパッケージです。このパッケージはTwitter APIに特化したパッケージで、これだけでほぼすべての機能が利用できます。

ローカル環境で利用する場合は注意です。cURLを使ってhttpsにアクセスするのでサイト証明書が必要になりますが、当然ローカルなのでありません。cURL 60エラーがでてしまいます。

これを回避するためにhttps://gist.github.com/VersatilityWerks/5719158/downloadからcacert.pemをダウンロードし、php.iniでこのファイルを読み込むようにしましょう。C:\xampp\phpにcacert.pemを置き、php.iniの最後でいいのでcurl.cainfo = "C:\xampp\php\cacert.pem"を追記します。

cacert.pemの設置

初期設定

パッケージをインストールしましょう。composer.jsonに"thujohn/twitter": "~2.0"を追加して

$ composer update

するか、

$ composer require thujohn/twitter

でインストールします。

そして、config/app.phpにサービスプロバイダとエイリアスを追記します。

サービスプロバイダとエイリアスの追記

次に以下のコマンドを実行してパッケージの設定ファイルのconfig/ttwitter.phpを作成しましょう。

$ php artisan vendor:publish

最後に.envにコンシューマーキーやアクセストークンを記述して初期設定は完了です。

.envファイルにキーの設定

アクセストークン取得までの流れ

Twitter APIを利用するためにはまずアクセストークンが必要になります。取得までの流れを簡単に説明します。

    取得までの流れ

  • リクエストトークンを取得
  • 認証画面のURLのパラメータに取得したリクエストトークンをつけてリダイレクト
  • 認証画面でユーザーが許可かキャンセルかを選ぶ
  • コールバックURLにパラメータが付けられてリダイレクトされる
  • アクセストークンを取得

これらの処理を自前で用意しようとするとかなり骨の折れる作業になりますが、それぞれメソッドが用意されていますので何も意識しなくてもさくっと実装できます。

アクセストークンの取得実装

基本的にパッケージのGithubのreadmeを見ればよく、これに沿って実装していきます。

まずはweb.phpにルーティングしていきましょう。

コントローラークラスはなんでもいいですが、ここではTwitterControllerというクラスを作成して使用しました。

ログイン処理はloginメソッドに実装していきます。このメソッドは認証画面へリダイレクトさせるとこまでを担当します。

認証画面はこんな感じです。ここで連携アプリを認証かキャンセルをクリックすると、コールバックURLにパラメータを付けたものが戻ってきます。

認証画面

パラメータはRequestクラスをタイプヒントして取得可能です。

パラメータ

そして、今度はアクセストークンを取得します。

リクエストトークンの取得と同じようにアクセストークンを取得します。取得に成功すると、$tokenは次のようになります。

アクセストークン

Twitter::getCredentials()で認証したユーザーの情報を取得しています。これが正しく取得できていれば、ちゃんと認証できているということです。

今回はタイムラインを表示するindexにリダイレクトさせています。

タイムラインの取得

TwitterControllerindex()に実装していきます。まずは認証に成功したユーザーの情報を取得します。

認証済みユーザー情報

このうち、screen_nameを配列のscreen_nameキーに指定します。これでその人のホームタイムラインを取得できます。また、取得件数はcountキーで指定します。

formatキーは取得結果の型の指定です。ここでは単純にビューでforeachするために連想配列であるarrayを指定しています。なので$array[key]で各値を取得できます。

連想配列の取得結果

一方でformatキーにobjectを指定すると連想配列ではなくオブジェクトが返ります。なので、$object->propertyで各値を取得できます。

オブジェクトの取得結果

内部でjson_decodeを使っているんですが、第2引数にtruefalseを指定することで取得結果をオブジェクトか連想配列に切り替えています。デフォルトはobjectです。

ちなみにjsonを指定することもでき、そのままjsonが返ってきます。

ツイートしてみる

さて、タイムラインを表示できたところで今度はツイートする処理の実装です。TwitterControllerpost()に実装していきます。

処理自体はとても簡単です。引数にstatusキーを持つ配列を指定したpostTweet()を実装するだけです。このstatusの値はツイートする内容です。ここに、フォームで入力した値を指定しましょう。入力フォームはあらかじめ作成しておいてください。

そのあとに一覧ページをリダイレクトさせる処理を実装して完了です。

このメソッドを利用する時は必ずstatusキーを指定してください。ない場合はエラーが投げられます。

まとめ

いかがだったでしょうか。とても簡単に実装できたと思います。最初にも書きましたが、本来TwitterAPIのエンドポイントにアクセスするためのURLは自分で組み立てる必要があります。これが骨の折れる作業になるんですが、このパッケージを利用することでそういった作業をせずともTwitterAPIの利用が可能になります。

また、内部の処理もそこまで難しくないので時間があれば一度見てみるといいかもしれません。