LoginSignup
3
3

More than 5 years have passed since last update.

Guzzle6でTwitterAPIを叩く

Posted at

PHPでのOauth認証後のAuthヘッダ実装を求めてLaravel Socialiteの中身を覗いていたのですが、
そこで使われているleague/oauth1-clientがいい感じだったので使い方をまとめておきます。

個人的には以下の要件でライブラリを探していたのでドンピシャな感じでした。

  • HTTP 通信ではGuzzle 使いたい
  • Auth ヘッダの再実装は避けたい

Authヘッダの自力生成とかはコードもいくらか上がっているのですが、
そこを再実装するのは何か行けてないなぁ…と思っていたところちょうど良いものに出会えたって感じです。

league/oauth1-clientのHTTP通信はGuzzle3に依存しているため、
HTTP通信周りは自分で書き直す必要が会ったため、そのへんは自力で加えました。

$ composer require league/oauth1-client:~1.0

やりたかったことは「既に取得済みのアクセストークンを使ってAPIを叩く」です。

アクセストークン自体が未取得のケースでは素直にSocialite使った方がよさげです。

コード

Guzzle6なので末尾のコード修正したら非同期に投げられます。

$tokenCredentials = new \League\OAuth1\Client\Credentials\TokenCredentials();
$tokenCredentials->setIdentifier(env("TWITTER_ACCESS_TOKEN"));
$tokenCredentials->setSecret(env("TWITTER_ACCESS_SECRET"));

$twitter = new \League\OAuth1\Client\Server\Twitter([
    'identifier' => env("TWITTER_CLIENT_ID"),
    'secret' => env("TWITTER_CLIENT_SECRET"),
    'callback_uri' => env("TWITTER_REDIRECT_URL")
]);

$method = "POST";
$url = "https://api.twitter.com/1.1/statuses/update.json";
$body = [
    "status" => "レイバンのサングラス",
];

$options = [];
$options["form_params"] = $body;
$options["headers"] = $twitter->getHeaders($tokenCredentials,$method,$url,$body);

try{
    $client = new \GuzzleHttp\Client();
    $client->request($method,$url,$options);
}catch(Throwable $e){
    throw $e;
}

こんな感じで上手いこと取得済みのアクセストークンを使いつつTwitterへの投稿を行うことが出来ました。

DBにガメてるアクセストークンを使って一斉にレイバンのサングラスを売りたい時などにご利用下さい。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3