ということでPHPでTwitterAPIをつかってつぶやきを投稿するサンプルを作りました。 ※Twitter APIを使うにはOAuth認証を使いますのでこちらより必要なモノを取得してください。必要なもの・Consumer key ・Consumer secret 前回の記事を参考にしてください。 今回はサイトURLを http://example.com/index.php コールバックURLを http://example.com/callback.php という感じに設定しました。 通常コールバックURLにてアクセストークンの保存処理などを行うのですが、今回は サンプルということでそのままつぶやきを投稿しています。 下記ソースです。 index.php<?php session_start(); require_once 'common.php'; $consumer_key = '取得したコンシューマキー'; $consumer_secret = '取得したコンシューマシークレット'; $request_url = 'https://api.twitter.com/oauth/request_token'; $auth_url = 'https://api.twitter.com/oauth/authorize'; // シグネチャ作成用パラメータ $signature_params = array( 'oauth_consumer_key' => $consumer_key, 'oauth_nonce' => md5(microtime() . mt_rand()), 'oauth_signature_method' => 'HMAC-SHA1', 'oauth_timestamp' => time(), 'oauth_version' => '1.0', ); // シグネチャの作成 $signature = getOAuthSignature($request_url, $signature_params, $consumer_secret); $signature_params['oauth_signature'] = $signature; // トークン取得用リクエスト文字列作成 $query = getRequestQuery($signature_params); // リクエストトークン取得 $request_token = getRequestToken($request_url, $query); // Twitterのアプリケーション認証画面へリダイレクト header('Location: ' . $auth_url . '?oauth_token=' . $request_token); exit; /** * リクエストトークンの取得 * @param string $request_url リクエストURL * @param string $query リクエストパラメータのクエリストリング * @return string $request_token リクエストトークン */ function getRequestToken($request_url, $query) { $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_URL, $request_url . '?' . $query); $res = curl_exec($ch); curl_close($ch); parse_str($res, $result); $request_token = $result['oauth_token']; return $request_token; }callback.php<?php session_start(); require_once 'common.php'; $consumer_key = '取得したコンシューマキー'; $consumer_secret = '取得したコンシューマシークレット'; $access_url = 'https://api.twitter.com/oauth/access_token'; $update_api = 'https://api.twitter.com/1/statuses/update.json'; // アクセストークン取得用パラメータ $params = array( 'oauth_consumer_key' => $consumer_key, 'oauth_nonce' => md5(microtime() . mt_rand()), 'oauth_signature_method' => 'HMAC-SHA1', 'oauth_timestamp' => time(), 'oauth_token' => $_GET['oauth_token'], 'oauth_verifier' => $_GET['oauth_verifier'], 'oauth_version' => '1.0', ); $signature = getOAuthSignature($access_url, $params, $consumer_secret, 'POST', $_GET['oauth_token_secret']); $params['oauth_signature'] = $signature; // トークン取得用リクエスト文字列作成 $query = getRequestQuery($params); // アクセストークンとシークレットの取得 $access_token = getAccessToken($access_url, $query); // ツイート投稿パラメータ unset($params['oauth_signature'], $params['oauth_verifier']); $params['status'] = 'test投稿'; $params['oauth_token'] = $access_token['oauth_token']; uksort($params, 'strnatcmp'); $signature = getOAuthSignature($update_api, $params, $consumer_secret, 'POST', $access_token['oauth_token_secret']); $params['oauth_signature'] = $signature; // パラメータ名でソート uksort($params, 'strnatcmp'); $request_param = getRequestQuery($params); echo '<pre>'; print_r(update($update_api, $request_param)); echo '</pre>'; /** * つぶやきの投稿 * @param string $update_api update apiのURL * @param string $request_param リクエストパラメータ * @return string $res TwitterAPIよりのレスポンス */ function update($update_api, $request_param) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $update_api); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $request_param); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_exec($ch); return $res; } /** * アクセストークンの取得 * @param string $access_url アクセストークン取得用URL * @param assoc_array $query アクセストークン取得用クエリ * @return assoc_array $result アクセストークン と アクセストークンシークレット */ function getAccessToken($access_url, $query) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $access_url . '?' . $query); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $res = curl_exec($ch); parse_str($res, $result); $access_token = $result['oauth_token']; return $result; }common.php<?php /** * シグネチャ文字列の作成 * @param string $request_url リクエストURL * @param assoc_array $params シグネチャ作成用パラメータ * @param string $consumer_secret コンシューマシークレット * @param string $method リクエストメソッド * @param string $oauth_token OAuth token * @return string $signature シグネチャ */ function getOAuthSignature($request_url, $params, $consumer_secret, $method = 'GET', $oauth_token_secret = '') { $signature = ''; $params = array_map('urlEncodeRfc', $params); uksort($params, 'strnatcmp'); $param = array(); foreach ($params as $key => $val) { $param[] = $key . '=' . $val; } $query = implode('&', $param); $base_array = array( $method, $request_url, $query, ); $base_array = array_map('urlEncodeRfc', $base_array); $base_string = implode('&', $base_array); $key = array( $consumer_secret, $oauth_token_secret, ); $key = array_map('urlEncodeRfc', $key); $key = implode('&', $key); // ベース文字列をシグネチャに $signature = base64_encode(hash_hmac('sha1', $base_string, $key, true)); return $signature; } /** * URLエンコードをしたリクエスト用クエリストリングを作成 * @param assoc_array $params 作成する連想配列 * @return string $query クエリストリング */ function getRequestQuery($params) { $params = array_map('urlEncodeRfc', $params); $query_param = array(); foreach ($params as $key => $val) { $query_param[] = $key . '=' . $val; } $query = implode('&', $query_param); return $query; } /** * URLエンコード * @param string $str エンコードする文字列 * @return string $enc_str エンコード済み文字列 */ function urlEncodeRfc($str) { $enc_str = str_replace('%7E', '~', rawurlencode($str)); return $enc_str; }流れは、index.phpでまず、リクエストトークンを取得します。 その後リクエストトークンをクエリパラメータとしてTwitterの アプリケーション認証画面にリダイレクトします。 ユーザが認証を押下した場合 コールバックURL「callback.php」 に リダイレクトされます。 リダイレクトされてきた際にGETパラメータにて 「oauth_token」 「oauth_token_secret」 の値が付加されていますので、その値を使いアクセストークンを取得します。 つぶやきを投稿する際はつぶやき投稿用パラメータを含めたシグネチャを作成し、 取得したアクセストークンを使ってリクエストを送信します。 おおまかな流れは以上になります。 終わり 関連記事: 【Twitter】TwitterのAPIを使う準備
2012/01/22
【PHP】Twitter APIを使ってつぶやきを投稿するサンプル【Twitter】
2012/01/21
【Twitter】TwitterのAPIを使う準備
ということでTwitterAPIを使う準備をしました。 まず、こちらへアクセスすると下記の画面へ遷移します。 赤い四角で囲まれている 「Create an app」 を押下します。 すると下記画面が表示されログイン要求をされますので、いつものログインIDとPWを入力し ログインします。 ログイン後に下記の画面が表示されますので、そこに必要な項目を入力します。 下記が入力項目とその画面になります。 ・Name アプリケーション名 ・Description アプリケーションの説明文 ・WebSite アプリケーションのTOP ・Callback URL 認証時のコールバック用URL 入力が完了したら一番下の 「Create your Twitter application」 を押下します。 するとこちらの画面に遷移しますので、 Consumer key Consumer secret をアプリケーションで使用しますので保存します。 以上でTwitterAPIを使ったアプリケーションの作成準備は完了です。 次はつぶやきの投稿サンプルを作成したいと思います。 終わり 【追記】 Twitter APIでつぶやきを投稿する際は書き込み権限が必要になりますので下記の画面にて 「Read & Write」にチェックを入れる必要があります。 関連記事: 【PHP】Twitter APIを使ってつぶやきを投稿するサンプル【Twitter】
登録:
投稿 (Atom)



