今回は、pocketのアクセストークンを取得し、pocketでスットクしているデータをゲットすることにします!
早速いきましょう!!
1. pocketでアプリ登録をする
pocketのアプリケーション登録ページでアプリの登録をしてください。
Application Name
には自分で作っているアプリ名
Application Description
には、自分で作っているアプリの概要
Permissions
はAddは「ポケットへの記事の追加権限」、Modify
は「ストックしている記事の情報を変更する権限」、Retrieve
は「ストックしている記事の読み取り権限」を表します。
Platform
は、自分のサービスを公開するプラットフォームを選択してください。
ストックしている記事のデータを取得するだけならRetrieve
権限だけにしておきます。
全部完了したら、Comsumer Key
がゲットできます!!
2. guzzlehttp/guzzle
をインストールする
HTTPリクエストを簡単に行えるようにするために、guzzlehttp/guzzle
をインストールします。
$ composer require guzzlehttp/guzzle
3. web.phpをかく
関数名めちゃくちゃ適当につけてしまったので、ご自由に変更してください。
// pocket
Route::get('/pocket/login', 'Auth\PocketController@loginOAuth');
Route::get('/pocket/loginComplete', 'Auth\PocketController@loginComplete');
4. loginOAuthメソッドでリクエストトークンを取得する
Conrollerの上部にはguzzle
を使えるようにするために、use
を書きましょう
use GuzzleHttp\Client;
public function loginOAuth(Request $request)
{
$client = new Client();
// リクエストトークンをゲットするためにPOSTリクエストを送るURL
$url = "https://getpocket.com/v3/oauth/request";
$params = [
'consumer_key' => env('POCKET_CLIENT_ID'),
'redirect_uri' => 'http://localhost/pocket/loginComplete',
];
$response = $client->post($url, [
'debug' => false, // trueにしたらデバッグできます
'content-type' => 'application/json',
'json' => $params,
]);
$result = $response->getBody()->getContents();
// $resultには、「code=***」という形式のデータが入るので、「***」の部分(トークン)を取得
$request_token = explode('=', $result)[1];
// トークンをセッションに入れる
$request->session()->put('code', $request_token);
// pocketの認証画面URLを定義する
$url = 'https://getpocket.com/auth/authorize?request_token=' . $request_token . '&redirect_uri=' . $params["redirect_uri"];
// pocketの認証画面URLに遷移する
return redirect((string)$url);
}
5. 認証した後のメソッドを作成する
public function loginComplete(Request $request)
{
// セッションからリクエストトークンを取り出す。
$code = $request->session()->get('code');
// もしリクエストトークンがセッションにあったら
if (!is_null($code)) {
$client = new Client();
$url = 'https://getpocket.com/v3/oauth/authorize';
$params = [
'consumer_key' => env('POCKET_CLIENT_ID'),
'code' => $code,
];
$response = $client->post($url, [
'debug' => false,
'content-type' => 'application/json',
'json' => $params,
]);
$result = $response->getBody()->getContents();
// レスポンスは「access_token=****&username=*******」という形なので、アクセストークンのみを抽出する
$access_token = explode('=', explode('&', $result)[0])[1];
$user = Auth::user();
// アクセストークンをDBに保存します
$user->pocket_token = $access_token;
$user->update();
return redirect()->route('pocket');
} else {
// セッションにリクエストトークンがない場合(不正アクセスの時)の処理をここに書く
}
}
これで、pocketのアクセストークンは手に入りましたね!!!
6. 記事を表示する
pocketの記事を取ってくる、getItems
メソッドを作成しましょう!
アクセストークンを渡したら、その人のストックしている記事を持ってくるようにします。
public function getPocketItem($token)
{
$client = new Client();
$url = 'https://getpocket.com/v3/get';
$params = [
'consumer_key' => env('POCKET_CLIENT_ID'),
'access_token' => $token,
'sort' => 'newest',
'count' => '30',
"detailType" => "complete",
];
// httpリクエスト(post)を送る
$response = $client->post($url, [
'debug' => false,
'content-type' => 'application/json',
'json' => $params,
]);
$result = json_decode($response->getBody()->getContents());
dd($result);
}
これで記事を持ってくることができます!!
終わりに
注意事項としては、記事の表示だけで良いのに、アプリの登録をするときに不要な権限を付与しないことです。
仕組みがわかれば、結構簡単にできますので、ぜひやってみてください!