###前提・実現したいこと
下記にソースの一部などを貼りますので見ていただけますと助かります。ご対応できそうなものかどうか、ご検討いただけますと幸いです。
PHPは初心者です。現在、CakePHP3を使ってTwitterの認証をし、1年前のツイートを取得するアプリを作ろうとしています。
ですが、Twitter認証のところで詰まっています。ずっとググっていも解消できるサイトを見つけきることができませんでした。
サイトを参考にして認証できるところまでは行ったのですが、具体的にツイートを取得するためにどうすればいいのかどのサイトを見れば
リクエストトークンをもらって、リクエストトークンを使ってOAuthトークンを取得して、OAuthトークンを使ってツイートを取得するというTwitter認証の動きは理解しているつもりです。
ですが認証後にツイートを取得できません。初心者なのでどこでdumpして確認するのかなどもわかりません。
###使用したTwitterのライブラリ
abraham/twitteroauthを使用しました。composerを使用して導入いたしました。
###エラー内容
$tweets = $connection->get("statuses/home_timeline");
ここで、タイムラインを取得し
$this->set(compact('tweets'));
これで、値をブラウザの方に渡す?ことができているのかなと思っているのですが
index.ctpの方で
<ul> <?php foreach ($tweets as $tweet) : ?> <li><?= $tweet->text; ?></li> <?php endforeach; ?> </ul>
こちらを挿入しても
Notice (8): Undefined variable: tweets [APP/Template/Users/index.ctp, line 14]
Warning (2): Invalid argument supplied for foreach() [APP/Template/Users/index.ctp, line 14]
上記のエラーが生じます。
###該当のソースコード
UsersController.php
<?php // /posts/index // /posts // /(controller)/(action)/(options) namespace App\Controller; use Cake\Controller\Controller; use Cake\Event\Event; use Cake\ORM\TableRegistry; use App\Model\Entity\User; use Cake\Auth\DefaultPasswordHasher; use Abraham\TwitterOAuth\TwitterOAuth; use Abraham\TwitterOAuth\TwitterOAuthException; class UsersController extends AppController { public function oauth() { // twitterのコネクション生成に必要な情報を設定 $consumerKey = "*****************"; $consumerSecret = "*****************"; $callback_url = "http://hogehogehoge/users"; //TwitterOAuthのインスタンスを生成し、Twitterからリクエストトークンを取得する $connection = new TwitterOAuth($consumerKey,$consumerSecret); $request_token = $connection->oauth("oauth/request_token", ["oauth_callback" => $callback_url] ); //リクエストトークンはcallback.phpでも利用するのでセッションに保存する $this->request->session()->write("oauth_token",$request_token['oauth_token']); $this->request->session()->write("oauth_token_secret",$request_token['oauth_token_secret']); // Twitterの認証画面へリダイレクト $url = $connection->url("oauth/authorize", ["oauth_token" => $request_token['oauth_token']] ); header('Location: ' . $url); exit; } public function callback() { $consumerKey = "*****************"; $consumerSecret = "*****************"; $oauth_token = $this->request->session()->read("oauth_token"); $oauth_token_secret = $this->request->session()->read("oauth_token_secret"); //Twitterからアクセストークンを取得する $connection = new TwitterOAuth($consumerKey,$consumerSecret,$oauth_token,$oauth_token_secret); $access_token = $connection->oauth("oauth/access_token",["oauth_verifier" => $_REQUEST['oauth_verifier']]); pr($access_token); //※重要※ ここでもう一度アクセストークンを使って接続をし直す追田押忍 //OAuthトークンとシークレットも使って TwitterOAuth をインスタンス化 $connection = new TwitterOAuth($consumerKey,$consumerSecret, $access_token['oauth_token'], $access_token['oauth_token_secret']); //ユーザー情報をGET $user = $connection->get("account/verify_credentials"); $tweets = $connection->get("statuses/home_timeline"); // $statuses = $connection->get('search/tweets', array ( // 'lang' => 'ja', // 'q' => '検索キーワード', // 'count' => '5' // ) ); $this->set(compact('users')); $this->set(compact('tweets')); pr($user); exit; } public function index() { $consumerKey = "*****************"; $consumerSecret = "*****************"; // $connection = new TwitterOAuth($consumerKey,$consumerSecret, $access_token['oauth_token'], $access_token['oauth_token_secret']); $this->viewBuilder()->layout('tw_mymemory_layout'); $users = $this->Users->find('all'); // $this->set('posts', $posts); } }
###補足情報(言語/FW/ツール等のバージョンなど)
vagrantのローカルサーバーでMacOSを使用して作っております。
すみませんが、知恵も知識も勉強も足りずにずっと進んでおりません。どなたかお力添えしていただけますと非常に助かります。宜しくお願い致します