« 前向いて歩けば楽しいものだ | トップページ | S・N・S »

2012.02.15

Twitterアプリを試作してみた

今日は風邪ひいて仕事を休んだ。昨日の朝から感じていた喉周辺の痛みが悪化。昨夜は酒を控えてみたが効果が無かったようである。飲めばよかったね。

喉は痛いが熱は出ず、寝込むわけでも無い。夕方くらいから頭脳明晰(でもないか)で少々退屈。なのでPC立ち上げてなにしよう・・・と考え、「あ、せやせや長い間放置していたTwitterアプリに手をつけてみよう!」ということになった。1年ほど前かな?「OAuth認証ってなんじゃらほい?」とコチョコチョしていたものなんだけど、当時は結局、認証を通せず「わけわからんわー」と放置していたもの。でも今日は軽く認証を通せて、タイムラインも見えて、つぶやけた。めでたい。

アプリケーションとしてはまったく形にはなっていませんし何をするにも不便この上ないブツなので公開はしませんが、自作のなんちゃってPHPフレームワークのなんちゃってアクションクラスの中身だけここに貼っておきましょう。いろいろ創造をたくましくしてくださいな。

<?php
/**
 * インクルードパスを追加
 */
function add_include_path($path) {
	ini_set(
		'include_path',
		ini_get('include_path') .
		PATH_SEPARATOR .
		$path);
}
add_include_path('sys/ext/Net_URL2-2.0.0');
add_include_path('sys/ext/HTTP_Request2-2.0.0');
add_include_path('sys/ext/HTTP_OAuth-0.2.3');
add_include_path('sys/ext/Services_Twitter-0.6.3');

require_once('HTTP/OAuth.php');
require_once('HTTP/OAuth/Consumer.php');
require_once('Services/Twitter.php');
require_once('conf/twitter.conf');

class Actions {
	public $is_oauth = false;
	
	/**
	 * コンストラクタ
	 */
	public function Actions() {
		$this->is_oauth = $this->isOAuth();
		if($this->is_oauth) {
			$this->access_token =
				$_SESSION['access_token'];
			$this->access_token_secret =
				$_SESSION['access_token_secret'];
		}
	}
	
	/**
	 * トップページのアクション。
	 * アプリ認証のURLを表示する
	 */
	public function execute_index($request) {
		$consumer = $this->getConsumer();
		$consumer->getRequestToken(
			'http://twitter.com/oauth/request_token',
			CALLBACK_URL);
		$_SESSION['request_token'] =
			$consumer->getToken();
		$_SESSION['request_token_secret'] =
			$consumer->getTokenSecret();
		$this->auth_url =
			$consumer->getAuthorizeUrl(
				'http://twitter.com/oauth/authorize');
	}
	
	/**
	 * 認証完了後にリダイレクトされるコールバックアクション。
	 * verifierでアクセストークンを取得してセッションに保持。
	 * 表示内容はパブリックタイムラインやホームのタイムラインを
	 * 表示するアクション(下にある)へのリンクを表示。 
	 */
	function execute_callback($request) {
		$this->verifier = $_GET['oauth_verifier'];
		$consumer = $this->getConsumer();
		$consumer->setToken(
			$_SESSION['request_token']);
		$consumer->setTokenSecret(
			$_SESSION['request_token_secret']);
		$consumer->getAccessToken(
			'http://twitter.com/oauth/access_token',
			$this->verifier);
		$_SESSION['access_token'] =
			$consumer->getToken();
		$_SESSION['access_token_secret'] =
			$consumer->getTokenSecret();
	}
	
	/**
	 * つぶやく。
	 */
	function execute_tweet($request) {
		$this->status = $request['tweet'];
 		$twitter = $this->getTwitter();
		$this->response =
			$twitter->statuses->update(
				$this->status);
	}
	
	/**
	 * 自分(認証を受けた人)のタイムラインを表示する。
	 */
	function execute_showHomeTimeline($request) {
		$twitter = $this->getTwitter();
		$this->timeline =
			$twitter->statuses->home_timeline();
	}
	
	/**
	 * パブリックタイムラインを表示する。
	 */
	function execute_showPublicTimeline($request) {
		$twitter = $this->getTwitter();
		$this->timeline =
			$twitter->statuses->public_timeline();
	}
	
	/**
	 * Services_Twitterのインスタンスを返す。
	 */
	private function getTwitter() {
		$oauth = $this->getOAuthConsumer();
		$twitter = new Services_Twitter();
		$twitter->setOAuth($oauth);
		return $twitter;
	}
	
	/**
	 * 認証されているかどうかを返す。
	 * セッションでチェックしているに過ぎない。
	 */
	private function isOAuth() {
		return (
			array_key_exists(
				'access_token',
				$_SESSION)
			&& array_key_exists(
				'access_token_secret',
				$_SESSION)
		); 
	}
	
	/**
	 * 認証されたOAuthコンシューマーを返す。
	 */
	private function getOAuthConsumer() {
		$oauth = $this->getConsumer();
		$oauth->setToken(
			$this->access_token);
		$oauth->setTokenSecret(
			$this->access_token_secret);
		return $oauth;
	}
	
	/**
	 * 認証されていないOAuthコンシューマーを返す。
	 * CONSUMER_KEYとCONSUMER_SECRETは、
	 * twitter.confで定義している。
	 */
	private function getConsumer() {
		return
			new HTTP_OAuth_Consumer(
				CONSUMER_KEY,
				CONSUMER_SECRET);
	}
}

いろいろ突っ込みどころが満載のソースだと思いますが、今後徐々に手を入れて行きたいなと。フレームワーク側もイロイロ機能増強が必要だし。

以前の失敗要因は、勘違いとバージョン違いでした。OAuth認証通すためにはServices_Twitter意外にイロイロ必要で、しかもServices_Twitterのバージョンが古かったという不始末。あら恥ずかしいですね(笑)。しかし、今でも「Services_Twitter」でググったら、古い0.4.0の情報が出てくるので無理も無い。最新はPEARから取ってこなアカンのですね。勉強になりました。

それから以前はフレームワーク的なアプローチをしていなかったので、ごちゃごちゃになってしまったというのも大きな要因。

フレームワーク万歳

« 前向いて歩けば楽しいものだ | トップページ | S・N・S »

プログラミング」カテゴリの記事

php」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Twitterアプリを試作してみた:

» クッキーでちょっと困った件 [ぱぱろぐのこころぐ]
先日TwitterAPIとOAuth認証の調査目的で作ってみたツイッターのアプリ [続きを読む]

« 前向いて歩けば楽しいものだ | トップページ | S・N・S »

2019年8月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
フォト

Google AdSense

銀の弾丸

無料ブログはココログ

他のアカウント