16
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TwitterOAuthのラッパー

Last updated at Posted at 2013-07-29

使い方 / ラッパー

前回「適当に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しないというナイスな解決手段を思いついたのだがどうだろう。

16
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?