PageRenderTime 23ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/src/lib/OpenSDK/Sohu/Weibo.php

http://php-opensdk.googlecode.com/
PHP | 276 lines | 128 code | 22 blank | 126 comment | 17 complexity | 4c9e98f01d4d7296cae2f82933ffca30 MD5 | raw file
  1. <?php
  2. require_once 'OpenSDK/OAuth/Client.php';
  3. require_once 'OpenSDK/OAuth/Interface.php';
  4. /**
  5. * Sina ?????? http://open.t.sohu.com SDK
  6. *
  7. * ???
  8. * 1?PECL json >= 1.2.0 (no need now)
  9. * 2?PHP >= 5.2.0 because json_decode (no need now)
  10. * 3?$_SESSION
  11. * 4?PECL hash >= 1.1 (no need now)
  12. *
  13. * only need PHP >= 5.0
  14. *
  15. * ?????
  16. * 1??OpenSDK?????include_path
  17. * 2?require_once 'OpenSDK/Sohu/Weibo.php';
  18. * 3?OpenSDK_Sohu_Weibo::init($appkey,$appsecret);
  19. * 4?OpenSDK_Sohu_Weibo::getRequestToken($callback); ??request token
  20. * 5?OpenSDK_Sohu_Weibo::getAuthorizeURL($token); ??????URL
  21. * 6?OpenSDK_Sohu_Weibo::getAccessToken($oauth_verifier) ??access token
  22. * 7?OpenSDK_Sohu_Weibo::call();??API??
  23. *
  24. * ???
  25. * 1?PHP5.2 ?????????Pear??? Service_JSON ???json_decode
  26. * 2??? session_set_save_handler ???SESSION???API???????session_start
  27. * 3?OpenSDK?????????????Pear ? Zend ??
  28. * ?????????????? ????????__autoload???
  29. *
  30. * @author icehu@vip.qq.com
  31. */
  32. class OpenSDK_Sohu_Weibo extends OpenSDK_OAuth_Interface
  33. {
  34. /**
  35. * app key
  36. * @var string
  37. */
  38. protected static $_appkey = '';
  39. /**
  40. * app secret
  41. * @var string
  42. */
  43. protected static $_appsecret = '';
  44. /**
  45. * ???
  46. * @param string $appkey
  47. * @param string $appsecret
  48. */
  49. public static function init($appkey,$appsecret)
  50. {
  51. self::$_appkey = $appkey;
  52. self::$_appsecret = $appsecret;
  53. }
  54. /**
  55. * OAuth ??
  56. * @var OpenSDK_OAuth_Client
  57. */
  58. private static $oauth = null;
  59. /**
  60. * OAuth ??
  61. * @var string
  62. */
  63. protected static $version = '1.0';
  64. private static $accessTokenURL = 'http://api.t.sohu.com/oauth/access_token';
  65. private static $authorizeURL = 'http://api.t.sohu.com/oauth/authorize';
  66. private static $requestTokenURL = 'http://api.t.sohu.com/oauth/request_token';
  67. /**
  68. * ??oauth_token?session key
  69. */
  70. const OAUTH_TOKEN = 'sohu_oauth_token';
  71. /**
  72. * ??oauth_token_secret?session key
  73. */
  74. const OAUTH_TOKEN_SECRET = 'sohu_oauth_token_secret';
  75. /**
  76. * ??access_token?session key
  77. */
  78. const ACCESS_TOKEN = 'sohu_access_token';
  79. /**
  80. * ??requestToken
  81. *
  82. * ????????
  83. * oauth_token????request_token
  84. * oauth_token_secret????request_secret
  85. *
  86. * @return array
  87. */
  88. public static function getRequestToken()
  89. {
  90. self::getOAuth()->setTokenSecret('');
  91. $response = self::request( self::$requestTokenURL, 'GET' , array());
  92. parse_str($response , $rt);
  93. if($rt['oauth_token'] && $rt['oauth_token_secret'])
  94. {
  95. self::getOAuth()->setTokenSecret($rt['oauth_token_secret']);
  96. self::setParam(self::OAUTH_TOKEN, $rt['oauth_token']);
  97. self::setParam(self::OAUTH_TOKEN_SECRET, $rt['oauth_token_secret']);
  98. return $rt;
  99. }
  100. else
  101. {
  102. return false;
  103. }
  104. }
  105. /**
  106. *
  107. * ????URL
  108. *
  109. * @param string|array $token
  110. * @param string $callback ????
  111. * @return string
  112. */
  113. public static function getAuthorizeURL($token , $callback)
  114. {
  115. if(is_array($token))
  116. {
  117. $token = $token['oauth_token'];
  118. }
  119. return self::$authorizeURL . '?oauth_token=' . $token . '&oauth_callback=' . urlencode($callback);
  120. }
  121. /**
  122. * ??Access Token
  123. * @param string $oauth_verifier
  124. * @return array
  125. */
  126. public static function getAccessToken( $oauth_verifier = false )
  127. {
  128. $response = self::request( self::$accessTokenURL, 'GET' , array(
  129. 'oauth_token' => self::getParam(self::OAUTH_TOKEN),
  130. 'oauth_verifier' => $oauth_verifier,
  131. ));
  132. parse_str($response,$rt);
  133. if( $rt['oauth_token'] && $rt['oauth_token_secret'] )
  134. {
  135. self::getOAuth()->setTokenSecret($rt['oauth_token_secret']);
  136. self::setParam(self::ACCESS_TOKEN, $rt['oauth_token']);
  137. self::setParam(self::OAUTH_TOKEN_SECRET, $rt['oauth_token_secret']);
  138. return $rt;
  139. }
  140. return false;
  141. }
  142. /**
  143. * ?????????
  144. * ?????????????
  145. * ????????????????????????????????
  146. *
  147. * ?????? $method = 'POST';
  148. * $multi ???????
  149. *
  150. * array(
  151. * '{fieldname}' => array( //?????
  152. * 'type' => 'mine ??',
  153. * 'name' => 'filename',
  154. * 'data' => 'filedata ???',
  155. * ),
  156. * ...?????????????
  157. * )
  158. *
  159. * @param string $command ??????? http://api.t.sohu.com/ ???????
  160. * @param array $params ???????????????????
  161. * @param string $method ?????? method GET/POST
  162. * @param false|array $multi ?????? false:??post array: array ( '{fieldname}'=>'/path/to/file' ) ????
  163. * @param bool $decode ??????????????
  164. * @param OpenSDK_Sina_Weibo::RETURN_JSON|OpenSDK_Sina_Weibo::RETURN_XML $format ????
  165. */
  166. public static function call($command , $params=array() , $method = 'GET' , $multi=false , $decode=true , $format='json')
  167. {
  168. if($format == self::RETURN_XML)
  169. ;
  170. else
  171. $format == self::RETURN_JSON;
  172. //?????
  173. foreach($params as $key => $val)
  174. {
  175. if(strlen($val) == 0)
  176. {
  177. unset($params[$key]);
  178. }
  179. }
  180. $params['oauth_token'] = self::getParam(self::ACCESS_TOKEN);
  181. $response = self::request( 'http://api.t.sohu.com/'.ltrim($command,'/').'.'.$format , $method, $params, $multi);
  182. if($decode)
  183. {
  184. if( $format == self::RETURN_JSON )
  185. {
  186. return OpenSDK_Util::json_decode($response, true);
  187. }
  188. else
  189. {
  190. //todo parse xml2array later
  191. //???????json??
  192. return $response;
  193. }
  194. }
  195. else
  196. {
  197. return $response;
  198. }
  199. }
  200. /**
  201. * ??Oauth??
  202. * ?????????????????????????????????
  203. */
  204. public static function clearOauth()
  205. {
  206. self::$oauth = null;
  207. }
  208. protected static $_debug = false;
  209. public static function debug($debug=false)
  210. {
  211. self::$_debug = $debug;
  212. }
  213. /**
  214. * ??OAuth ??
  215. * @return OpenSDK_OAuth_Client
  216. */
  217. protected static function getOAuth()
  218. {
  219. if( null === self::$oauth )
  220. {
  221. self::$oauth = new OpenSDK_OAuth_Client(self::$_appsecret,self::$_debug);
  222. $secret = self::getParam(self::OAUTH_TOKEN_SECRET);
  223. if($secret)
  224. {
  225. self::$oauth->setTokenSecret($secret);
  226. }
  227. }
  228. return self::$oauth;
  229. }
  230. /**
  231. *
  232. * OAuth??????
  233. *
  234. * @param string $url
  235. * @param string $method
  236. * @param array $params
  237. * @param array $multi
  238. * @return string
  239. * @ignore
  240. */
  241. protected static function request($url , $method , $params , $multi=false)
  242. {
  243. if(!self::$_appkey || !self::$_appsecret)
  244. {
  245. exit('app key or app secret not init');
  246. }
  247. $params['oauth_nonce'] = md5( mt_rand(1, 100000) . microtime(true) );
  248. $params['oauth_consumer_key'] = self::$_appkey;
  249. $params['oauth_signature_method'] = 'HMAC-SHA1';
  250. $params['oauth_version'] = self::$version;
  251. $params['oauth_timestamp'] = self::getTimestamp();
  252. return self::getOAuth()->request($url, $method, $params, $multi);
  253. }
  254. }