1/21/2012

[php で OAuth を使ってみる:第壱回] Twitter に文字を post する

Twitter に OAuth を使って post してみる。
※この情報は 2012 年 1 月現在のものです。仕様が変更される可能性は充分にあるので、ご了承ください。

1. アプリを登録する
Create an application | Twitter Developers にアクセスし、アプリの登録を行う。
Name: アプリ名
Description: アプリの説明
WebSite: アプリ本体の URL
Callback URL: ユーザによる認証動作後にリダイレクトする URL(「5.」でアップする php)

※全ての情報は登録後でも変更できるので、気楽に。

2. 書き込みできる権限に変更する
アプリの詳細ページに「Settings」というタブがあるので、それをクリックし、「Application Type」の「Access」を「Read and Write」に変更し、保存する。

3. 使うキーを確認する
「Details」タブを押し、「Consumer key」と「Consumer secret」を確認する。これが今後必要となるキー。

4. 必要となるライブラリをインストールする
下記からダウンロードし、アプリとするディレクトリにアップする。
PEAR: PEAR, /アプリのディレクトリ/PEAR
HTTP_OAuth: HTTP_OAuth, /アプリのディレクトリ/HTTP
HTTP_Request2: HTTP_Request2, /アプリのディレクトリ/HTTP/Request2
Net_URL2: Net_URL2, /アプリのディレクトリ/Net

5. 認証受け渡し用の php を用意する
下記に必要な事項を埋め、アプリのディレクトリにアップする。
<?php
include './HTTP/OAuth/Consumer.php';

$consumer_key = 'xxxxxxxxxxxxxxxx'; // 「3.」で確認した「Consumer key」
$consumer_secret = 'xxxxxxxxxxxxxxxx'; // 「3.」で確認した「Consumer secret」

$http_request = new HTTP_Request2();
$http_request->setConfig('ssl_verify_peer', false);

$consumer = new HTTP_OAuth_Consumer($consumer_key, $consumer_secret);
$consumer_request = new HTTP_OAuth_Consumer_Request;
$consumer_request->accept($http_request);
$consumer->accept($consumer_request);

session_start();

if (empty($_GET['oauth_verifier'])) {
// ユーザの認証前、Twitter にリダイレクトする
  $callback = 'callback する URL'; // この場合はこの php 本体
  $consumer->getRequestToken('https://api.twitter.com/oauth/request_token', $callback);

  $_SESSION['request_token'] = $consumer->getToken();
  $_SESSION['request_token_secret'] = $consumer->getTokenSecret();

  $auth_url = $consumer->getAuthorizeUrl('https://api.twitter.com/oauth/authorize');

  header('Location:'. $auth_url);
} else {
// ユーザの認証後、リダイレクトで帰ってきた後
  $consumer->setToken($_SESSION['request_token']);
  $consumer->setTokenSecret($_SESSION['request_token_secret']);
  $consumer->getAccessToken('https://api.twitter.com/oauth/access_token', $_GET['oauth_verifier']);

  $_SESSION['access_token'] = $consumer->getToken();
  $_SESSION['access_token_secret'] = $consumer->getTokenSecret();

  echo "<script type='text/javascript'>location.href = 'アプリ本体の URL';</script>";
}
?>

6. post する
下記の php をアプリのディレクトリにアップする
<?php
require_once 'HTTP/OAuth/Consumer.php';

$consumer_key = 'xxxxxxxxxxxxxxxx'; // 「3.」で確認した「Consumer key」
$consumer_secret = 'xxxxxxxxxxxxxxxx'; // 「3.」で確認した「Consumer secret」
$access_token = 'xxxxxxxxxxxxxxxx'; // 「5.」で取得した access_token
$access_token_secret = 'xxxxxxxxxxxxxxxx'; // 「5.」で取得した access_token_secret

$http_request = new HTTP_Request2();
$http_request->setConfig('ssl_verify_peer', false);

$consumer = new HTTP_OAuth_Consumer($consumer_key, $consumer_secret);
$consumer_request = new HTTP_OAuth_Consumer_Request;
$consumer_request->accept($http_request);
$consumer->accept($consumer_request);

$consumer->setToken($access_token);
$consumer->setTokenSecret($access_token_secret);

$api_url = 'http://api.twitter.com/1/statuses/update.json';
$params = array(
  'status' => 'テスト' // post する本文
);
$response = $consumer->sendRequest($api_url, $params, 'POST');
echo "<script type='text/javascript'>alert('「". $status. "」をpostしました!');</script>\n";
?>

POST statuses/update | Twitter Developers

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.