/src/lib/OpenSDK/Sohu/Weibo.php
PHP | 276 lines | 128 code | 22 blank | 126 comment | 17 complexity | 4c9e98f01d4d7296cae2f82933ffca30 MD5 | raw file
- <?php
-
- require_once 'OpenSDK/OAuth/Client.php';
- require_once 'OpenSDK/OAuth/Interface.php';
-
- /**
- * Sina ?????? http://open.t.sohu.com SDK
- *
- * ???
- * 1?PECL json >= 1.2.0 (no need now)
- * 2?PHP >= 5.2.0 because json_decode (no need now)
- * 3?$_SESSION
- * 4?PECL hash >= 1.1 (no need now)
- *
- * only need PHP >= 5.0
- *
- * ?????
- * 1??OpenSDK?????include_path
- * 2?require_once 'OpenSDK/Sohu/Weibo.php';
- * 3?OpenSDK_Sohu_Weibo::init($appkey,$appsecret);
- * 4?OpenSDK_Sohu_Weibo::getRequestToken($callback); ??request token
- * 5?OpenSDK_Sohu_Weibo::getAuthorizeURL($token); ??????URL
- * 6?OpenSDK_Sohu_Weibo::getAccessToken($oauth_verifier) ??access token
- * 7?OpenSDK_Sohu_Weibo::call();??API??
- *
- * ???
- * 1?PHP5.2 ?????????Pear??? Service_JSON ???json_decode
- * 2??? session_set_save_handler ???SESSION???API???????session_start
- * 3?OpenSDK?????????????Pear ? Zend ??
- * ?????????????? ????????__autoload???
- *
- * @author icehu@vip.qq.com
- */
-
- class OpenSDK_Sohu_Weibo extends OpenSDK_OAuth_Interface
- {
-
- /**
- * app key
- * @var string
- */
- protected static $_appkey = '';
- /**
- * app secret
- * @var string
- */
- protected static $_appsecret = '';
-
- /**
- * ???
- * @param string $appkey
- * @param string $appsecret
- */
- public static function init($appkey,$appsecret)
- {
- self::$_appkey = $appkey;
- self::$_appsecret = $appsecret;
- }
-
- /**
- * OAuth ??
- * @var OpenSDK_OAuth_Client
- */
- private static $oauth = null;
-
- /**
- * OAuth ??
- * @var string
- */
- protected static $version = '1.0';
-
- private static $accessTokenURL = 'http://api.t.sohu.com/oauth/access_token';
-
- private static $authorizeURL = 'http://api.t.sohu.com/oauth/authorize';
-
- private static $requestTokenURL = 'http://api.t.sohu.com/oauth/request_token';
-
- /**
- * ??oauth_token?session key
- */
- const OAUTH_TOKEN = 'sohu_oauth_token';
- /**
- * ??oauth_token_secret?session key
- */
- const OAUTH_TOKEN_SECRET = 'sohu_oauth_token_secret';
- /**
- * ??access_token?session key
- */
- const ACCESS_TOKEN = 'sohu_access_token';
-
-
- /**
- * ??requestToken
- *
- * ????????
- * oauth_token????request_token
- * oauth_token_secret????request_secret
- *
- * @return array
- */
- public static function getRequestToken()
- {
- self::getOAuth()->setTokenSecret('');
- $response = self::request( self::$requestTokenURL, 'GET' , array());
- parse_str($response , $rt);
- if($rt['oauth_token'] && $rt['oauth_token_secret'])
- {
- self::getOAuth()->setTokenSecret($rt['oauth_token_secret']);
- self::setParam(self::OAUTH_TOKEN, $rt['oauth_token']);
- self::setParam(self::OAUTH_TOKEN_SECRET, $rt['oauth_token_secret']);
- return $rt;
- }
- else
- {
- return false;
- }
- }
-
- /**
- *
- * ????URL
- *
- * @param string|array $token
- * @param string $callback ????
- * @return string
- */
- public static function getAuthorizeURL($token , $callback)
- {
- if(is_array($token))
- {
- $token = $token['oauth_token'];
- }
- return self::$authorizeURL . '?oauth_token=' . $token . '&oauth_callback=' . urlencode($callback);
- }
-
- /**
- * ??Access Token
- * @param string $oauth_verifier
- * @return array
- */
- public static function getAccessToken( $oauth_verifier = false )
- {
- $response = self::request( self::$accessTokenURL, 'GET' , array(
- 'oauth_token' => self::getParam(self::OAUTH_TOKEN),
- 'oauth_verifier' => $oauth_verifier,
- ));
- parse_str($response,$rt);
- if( $rt['oauth_token'] && $rt['oauth_token_secret'] )
- {
- self::getOAuth()->setTokenSecret($rt['oauth_token_secret']);
- self::setParam(self::ACCESS_TOKEN, $rt['oauth_token']);
- self::setParam(self::OAUTH_TOKEN_SECRET, $rt['oauth_token_secret']);
- return $rt;
- }
- return false;
- }
-
- /**
- * ?????????
- * ?????????????
- * ????????????????????????????????
- *
- * ?????? $method = 'POST';
- * $multi ???????
- *
- * array(
- * '{fieldname}' => array( //?????
- * 'type' => 'mine ??',
- * 'name' => 'filename',
- * 'data' => 'filedata ???',
- * ),
- * ...?????????????
- * )
- *
- * @param string $command ??????? http://api.t.sohu.com/ ???????
- * @param array $params ???????????????????
- * @param string $method ?????? method GET/POST
- * @param false|array $multi ?????? false:??post array: array ( '{fieldname}'=>'/path/to/file' ) ????
- * @param bool $decode ??????????????
- * @param OpenSDK_Sina_Weibo::RETURN_JSON|OpenSDK_Sina_Weibo::RETURN_XML $format ????
- */
- public static function call($command , $params=array() , $method = 'GET' , $multi=false , $decode=true , $format='json')
- {
- if($format == self::RETURN_XML)
- ;
- else
- $format == self::RETURN_JSON;
- //?????
- foreach($params as $key => $val)
- {
- if(strlen($val) == 0)
- {
- unset($params[$key]);
- }
- }
- $params['oauth_token'] = self::getParam(self::ACCESS_TOKEN);
- $response = self::request( 'http://api.t.sohu.com/'.ltrim($command,'/').'.'.$format , $method, $params, $multi);
- if($decode)
- {
- if( $format == self::RETURN_JSON )
- {
- return OpenSDK_Util::json_decode($response, true);
- }
- else
- {
- //todo parse xml2array later
- //???????json??
- return $response;
- }
- }
- else
- {
- return $response;
- }
- }
-
- /**
- * ??Oauth??
- * ?????????????????????????????????
- */
- public static function clearOauth()
- {
- self::$oauth = null;
- }
-
- protected static $_debug = false;
-
- public static function debug($debug=false)
- {
- self::$_debug = $debug;
- }
-
- /**
- * ??OAuth ??
- * @return OpenSDK_OAuth_Client
- */
- protected static function getOAuth()
- {
- if( null === self::$oauth )
- {
- self::$oauth = new OpenSDK_OAuth_Client(self::$_appsecret,self::$_debug);
- $secret = self::getParam(self::OAUTH_TOKEN_SECRET);
- if($secret)
- {
- self::$oauth->setTokenSecret($secret);
- }
- }
- return self::$oauth;
- }
-
- /**
- *
- * OAuth??????
- *
- * @param string $url
- * @param string $method
- * @param array $params
- * @param array $multi
- * @return string
- * @ignore
- */
- protected static function request($url , $method , $params , $multi=false)
- {
- if(!self::$_appkey || !self::$_appsecret)
- {
- exit('app key or app secret not init');
- }
- $params['oauth_nonce'] = md5( mt_rand(1, 100000) . microtime(true) );
- $params['oauth_consumer_key'] = self::$_appkey;
- $params['oauth_signature_method'] = 'HMAC-SHA1';
- $params['oauth_version'] = self::$version;
- $params['oauth_timestamp'] = self::getTimestamp();
- return self::getOAuth()->request($url, $method, $params, $multi);
- }
-
- }