HerokuでTwitterのOAuthを実装してみた

PHP

Heroku

ほとんど備忘録的な記事。

これから先、Twitter OAuthをしたくなったときに直ぐにできるのはありがたい。

クラウド・アプリケーション・プラットフォーム | Heroku
Heroku は、アプリケーションの開発から実行、運用までのすべてをクラウドで完結できる PaaS(サービスとしてのプラットフォーム)です。

なんかよくわからんけどすごいサービス。

とりあえずアカウントを解説します。

tyfkda/twitter-oauth-test - Buttons - Heroku Elements
Twitter OAuth test

やりたいことはこれなんですけど、これはRubyなのでPHPでも同じことができるかチャレンジします。

Twitter Appsを設定する

まずはTwitterのDeveloper申請を行ってAPI KeyとAPI Key Secretが取得できるようにしましょう。

Herokuに環境変数をセットする

Settingsから環境変数をセットします。

composerのインストール

twitteroauthやdotenvをインストールするために必要なのでインストールします。

tkgstrator/ikastapi
Contribute to tkgstrator/ikastapi development by creating an account on GitHub.

めんどくさい場合はここからcloneしてきても良い。

envファイルの作成

ファイル自体にAPI Keyを書くとまずいことになるので環境変数自体にAPI Keyを書きます。

dotenvは.envファイルから環境変数をPHPに読み込ませるための便利なツールなのでそれを利用します。

// .env
CONSUMER_KEY=""
CONSUMER_KEY_SECRET=""

こんな感じでキーをベタ書きしておきます。

コールバック用のPHPファイルの作成

<?php
require "vendor/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
session_start();
$CONSUMER_KEY = "";
$CONSUMER_KEY_SECRET = "";
switch (true) {
case ($_SERVER["HTTP_HOST"] === "localhost:8080"):
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
$CONSUMER_KEY = $_ENV["CONSUMER_KEY"];
$CONSUMER_KEY_SECRET = $_ENV["CONSUMER_KEY_SECRET"];
break;
default:
$CONSUMER_KEY = getenv("CONSUMER_KEY");
$CONSUMER_KEY_SECRET = getenv("CONSUMER_KEY_SECRET");
break;
}
$request_token = [];
$request_token['oauth_token'] = $_SESSION['oauth_token'];
$request_token['oauth_token_secret'] = $_SESSION['oauth_token_secret'];
$connection = new TwitterOAuth($CONSUMER_KEY, $CONSUMER_KEY_SECRET, $request_token['oauth_token'], $request_token['oauth_token_secret']);
$access_token = $connection->oauth("oauth/access_token", ["oauth_verifier" => $_REQUEST['oauth_verifier']]);
$url = "ikastagram://" . http_build_query($access_token);
header("Location: " . $url);
view raw callback.php hosted with ❤ by GitHub
<?php
require "vendor/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
session_start();
$CONSUMER_KEY = "";
$CONSUMER_KEY_SECRET = "";
switch (true) {
case ($_SERVER["HTTP_HOST"] === "localhost:8080"):
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
$CONSUMER_KEY = $_ENV["CONSUMER_KEY"];
$CONSUMER_KEY_SECRET = $_ENV["CONSUMER_KEY_SECRET"];
define("CALLBACK_URL", "http://localhost:8080/callback.php");
break;
default:
$CONSUMER_KEY = getenv("CONSUMER_KEY");
$CONSUMER_KEY_SECRET = getenv("CONSUMER_KEY_SECRET");
define("CALLBACK_URL", "https://ikastagram.herokuapp.com/callback.php");
break;
}
$connection = new TwitterOAuth($CONSUMER_KEY, $CONSUMER_KEY_SECRET);
$request = $connection->oauth("oauth/request_token", array("oauth_callback" => CALLBACK_URL));
$_SESSION["oauth_token"] = $request["oauth_token"];
$_SESSION["oauth_token_secret"] = $request["oauth_token_secret"];
$url = $connection->url("oauth/authorize", array("oauth_token" => $request["oauth_token"]));
header("Location: " . $url);
view raw index.php hosted with ❤ by GitHub

こんな感じでindex.phpとcallback.phpを設定したらGitHubにプッシュするだけです。

Twitter Developerの方でcallbackURLとしてHerokuのURLを通しておくのも忘れないように。

完成したやつ

Twitter / Authorize an application

するとサーバレスで簡単にOAuth認証用のURLが作成できます。

callback.phpが認証の方までやってくれるのでuser_idの値がとってこれます。Twitterの機能にアクセスせず、ユーザ認証をするだけであればこれで十分な気もします。

Heroku自体はめちゃくちゃ面白くて可能性感じまくりなので土日にでもいろいろ触ってみたいですね。

記事は以上。

コメント

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