忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/05/25 02:34 |
PHP5.3.7 TwitterOAuthのラッパー
前回「適当にinterface作ってそっちで吸収してくれよと非常に思う」とか言ったので、とりあえず一部だけやってみた。

インターフェイス
<?php
interface ITwitterOAuthWrapper{
	
	/**
	* トークンが有効か+ユーザ情報取得
	* @return stdClass
	*/
	public function verifyCredentials();
	
	/**
	* ツイートする
	* @param String 発言内容
	* @param array  オプション
	* @return stdClass
	*/
	public function tweet($text, $options = array());
	
	/**
	* ユーザ名でユーザ情報を取得
	* @param String ユーザ名
	* @param array  オプション
	* @return stdClass
	*/
	public function getUserInfoFromName($userName, $options = array());
	/**
	* ユーザIDでユーザ情報を取得
	* @param String ユーザID
	* @param array  オプション
	* @return stdClass
	*/
	public function getUserInfoFromId($userId, $options = array());
	
	/* 以下略 */
}

本体
<?php
class TwitterOAuthWrapper extends TwitterOAuth implements ITwitterOAuthWrapper{
	
	public function verifyCredentials(){
		return $this->get('account/verify_credentials');
	}
	public function tweet($text, $options = array()){
		return $this->post('statuses/update', array_merge($options, ['status'=>$text] ));
	}
	public function getUserInfoFromName($userName, $options = array()){
		return $this->get('users/show', array_merge($options, ['screen_name'=>$userName] ));
	}
	public function getUserInfoFromId($userId, $options = array()){
		return $this->get('users/show', array_merge($options, ['user_id'=>$userId] ));
	}
}

使い方
<?php
	// TwitterOAuthWrapper
	require_once('twitteroauth/TwitterOAuthWrapper.php');
	$TwitterOAuth = new TwitterOAuthWrapper('コンシューマキー', 'コンシューマシークレット', 'アクセストークン', 'アクセスシークレット');
	
	// トークンが有効か+ユーザ情報取得
	$user = $TwitterOAuth->verifyCredentials();
	
	// つぶやく
	$status = $TwitterOAuth->tweet('ツイート内容');
	
	// ユーザ情報を取得
	$userinfo = $TwitterOAuth->getUserInfoFromName('ユーザ名');
	$userinfo = $TwitterOAuth->getUserInfoFromId('ユーザID');
	
	// 元々の使い方も一応可能
	$status = $TwitterOAuth->post('statuses/update', ['status' =>'ツイート内容']);

使い方はITwitterOAuthWrapperの解説通りにメソッドを呼び出すだけ。
あとは必要に応じてインターフェイスとその実体を追加していくだけです。

こういう作りにして何がうれしいかというと、仕様変更に強くなる点。
もしツイートするURLが'statuses/update'から他に変わったとします。
元々の作りのように、呼び出し側にこのURLが書いてあった場合、ツイートしているところを全て書き直さなければなりません。
しかしTwitterOAuthWrapperであれば、tweetメソッド一箇所書き換えるだけでおわりです。

まあちょっと適当な作りなので、正直あまり気に入ってないです。
このまま実装を続けると、TwitterOAuthWrapperには延々ほぼ同じ呼び出し方のメソッドが並ぶ羽目になります。
なのでURLやリクエストメソッドなどは設定に持っておいて__callで一括処理とかしたかったわけですよ。
しかしinterfaceのメソッドは必ず実装が必要で、__callで受け取れないという。ぐぬぬ(当たり前)

そこでITwitterOAuthWrapperをimplementsしないというナイスな解決手段を思いついたのだがどうだろう。
PR


2013/07/29 23:08 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<PHP5.3.7 「第7回オフラインリアルタイムどう書くの問題」をPHPで解く | HOME | 今週の実績 2013/07/28>>
忍者ブログ[PR]