Guest User

Tumblr Oauth API

a guest
Oct 22nd, 2010
1,976
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. class userTokenTumblr {
  4.     var $consumer_key;
  5.     var $consumer_secret;
  6.     var $login_url;       // Tumblr url for require login permission
  7.     var $request_token;   // Tumblr Request Token
  8.     var $access_token;    // Tumblr Access token array(oauth_token, oauth_token_secret)
  9.     var $oauth_token;
  10.     var $oauth_token_secret;
  11.     var $username;
  12.    
  13.     var $service_url = 'http://www.tumblr.com';
  14.     var $request_token_url = 'http://www.tumblr.com/oauth/request_token';
  15.     var $authorize_url = 'http://www.tumblr.com/oauth/authorize';
  16.     var $access_token_url = 'http://www.tumblr.com/oauth/access_token';
  17.     var $authenticate_url = 'http://www.tumblr.com/api/authenticate';
  18.     var $read_url = 'http://www.tumblr.com/api/read';
  19.     var $write_url = 'http://www.tumblr.com/api/write';
  20.        
  21.     var $tumblrOauthObject;
  22.    
  23.     function __construct() {
  24.         $this->consumer_key = $GLOBALS['tumblrConsumerKey'];
  25.         $this->consumer_secret = $GLOBALS['tumblrConsumerSecret'];
  26.         // We create the Oauth object as a mehtod's property.
  27.         //Very important, the use of OAUTH_AUTH_TYPE_URI for general purpose, although we may need to use a diferent method for diferent tasks
  28.         $this->tumblrOauthObject = new OAuth($this->consumer_key,$this->consumer_secret,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
  29.         //$this->tumblrOauthObject->enableDebug();
  30.     }
  31.  
  32.     //Retrieve the tokens from DB.    
  33.     function GetDBAccessTokens($uIdentifier, $uId) {
  34.         $usertokenservice =& ServiceFactory::getServiceInstance('UserTokenService');
  35.         $data = $usertokenservice->GetData($uIdentifier, $uId, 'tumblr');
  36.         $unserializedata=unserialize($data['data']);
  37.         $tokens['oauth_token']=$unserializedata['oauth_token'];
  38.         $tokens['oauth_token_secret']=$unserializedata['oauth_token_secret'];
  39.        
  40.         return $tokens;
  41.     }
  42.  
  43.     function RequestLogin() {
  44.         //With this lines, we retrieve the login url, and redirect the user there.
  45.         $response = $this->tumblrOauthObject->getRequestToken($this->request_token_url);
  46.         $_SESSION['secret'] = $response['oauth_token_secret'];
  47.         header("Location: {$this->authorize_url}?oauth_token={$response["oauth_token"]}");
  48.         exit();
  49.     }
  50.    
  51.     function CallBackAuth() {
  52.         if (isset($_GET['oauth_token'])
  53.            || (isset($_SESSION['oauth_token']) && isset($_SESSION['oauth_token_secret'])) ) {
  54.  
  55.             if( !isset($_SESSION['oauth_token']) || !isset($_SESSION['oauth_token_secret']) ) {
  56.                 //If we havent sessions tokens, its the first time here for the user, so we put in the oauth object,
  57.                 // The oauth_token from $_GET and the secret token retrieved in the RequestLogin method. (saved in session)
  58.                 // This is a temporary token, how allows us to retrieve the definitive tokens, the one that we will save to db.
  59.                 $this->tumblrOauthObject->setToken($_GET['oauth_token'], $_SESSION['secret']);
  60.                 //GetAccessToken retrieves the permanent tokens for the tumblr user.
  61.                 $token = $this->tumblrOauthObject->getAccessToken($this->access_token_url);
  62.                 //Once we have the definitive tokens, we save it temporarly in SESSION, to avoid loosing data between redirections.
  63.                 $_SESSION['oauth_token'] = $token['oauth_token'];
  64.                 $_SESSION['oauth_token_secret'] = $token['oauth_token_secret'];            
  65.                  
  66.                 // pass deffinitive tokens to Tumblr object
  67.                 $this->tumblrOauthObject->setToken($token['oauth_token'], $token['oauth_token_secret']);
  68.                 $token['oauth_token'] = $_SESSION['oauth_token'];
  69.                 $token['oauth_token_secret'] = $_SESSION['oauth_token_secret'];
  70.             } else {
  71.                 //If we already have SESSION stored tokens, we set this tokens for the Oauth Object.
  72.                 $token['oauth_token']=$_SESSION['oauth_token'];
  73.                 $token['oauth_token_secret']=$_SESSION['oauth_token_secret'];
  74.                 $this->tumblrOauthObject->setToken($token->oauth_token, $token->oauth_token_secret);
  75.             }
  76.         } else {
  77.             //If no GET oauth token is set, or no SESSION token, we proceed retrieveng permissions to the user
  78.             $this->RequestLogin('tumblr');
  79.         }
  80.        
  81.         $params = array(
  82.                 'oauth_token' => $_SESSION['oauth_token']
  83.             );
  84.         $tumblrInfo = $this->tumblrOauthObject->fetch($this->authenticate_url, $params);
  85.        
  86.         $tumblrInfo = $this->tumblrOauthObject->getLastResponse();
  87.         $xml = new SimpleXMLElement($tumblrInfo);
  88.        
  89.         //Now in $xml we have the user information.
  90.        
  91.         //The next steps are optional, and we use it to normalize the diferent social apis output.
  92.         //This class is called from a wrapeer how encapsulates the diferent API calls, so we provide the wrapper with a normalized
  93.         //output always.
  94.        
  95.         $response['provider'] = 'tumblr';
  96.  
  97.         $response['username'] = (string) $xml->tumblelog['name'];
  98.         $response['name'] = (string) $xml->tumblelog['name'];
  99.  
  100.         $response['email'] = '';
  101.  
  102.         $response['avatar'] = (string) $xml->tumblelog['avatar-url'];
  103.         $response['location'] = $tumblrInfo->location;
  104.         $response['desc'] = $tumblrInfo->description;
  105.         $response['url'] = (string) $xml->tumblelog['avatar-url'];
  106.  
  107.         $response['oauth_token'] = $token['oauth_token'];
  108.         $response['oauth_token_secret'] = $token['oauth_token_secret'];
  109.         $response['uIdentifier'] = (string) $xml->tumblelog['name'];
  110.  
  111.         return $response;        
  112.     }
  113.    
  114.     // In this function is the quizz, we retrieve permanent tokens from DB and set it on the oauth object.
  115.     function AutoShareThis($uId, $data) {
  116.         //We redefine the tumblrOauthObject because we need to change the OAUTH_AUTH_TYPE_URI for OAUTH_AUTH_TYPE_FORM, because the write requests
  117.         //must pass the parameters trough POST
  118.         $this->tumblrOauthObject = new OAuth($this->consumer_key,$this->consumer_secret,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_FORM);
  119.        
  120.         if ($dbtokens=$this->GetDBAccessTokens(0, $uId)) {
  121.             // We use a Try/catch structure for handle possible revoked or non existent tokenns.
  122.             try {
  123.                 //Here we set the permanent tokens previously retrieved from database.
  124.                 $this->tumblrOauthObject->setToken($dbtokens['oauth_token'], $dbtokens['oauth_token_secret']);
  125.                 $message = sprintf(T_("I've just found this awesome picture on %s: %s"), $GLOBALS['sitename'], $data['link']);
  126.                 //Seeking int he tumblr api docs, we can see the parameters we need to pass for the Oauth fetch call.
  127.                
  128.                 $params = array(
  129.                     'oauth_token' => $dbtokens['oauth_token'],
  130.                     'type'      => 'photo',                
  131.                     'source'    => $data['picture'],
  132.                     'url'       => $data['link'],
  133.                     'caption'      => $message,
  134.                     'click-through-url' =>$data['link'],
  135.                     'generator' => 'Testing example'
  136.                 );
  137.                
  138.                 $status=$this->tumblrOauthObject->fetch($this->write_url, $params);
  139.                 if ($status) $result=true;
  140.                
  141.             } catch(Exception $e) {
  142.                 //print_r($e);
  143.                 $result=false;
  144.                 $message='revoked';
  145.             }
  146.         } else {
  147.             $result=false;
  148.             $message='dberror';
  149.         }
  150.         return array(
  151.             'result'    => $result,
  152.             'message'   => $message
  153.         );
  154.     }
  155.    
  156.     function RequestLogout() {
  157.         session_destroy();
  158.     }
  159.    
  160. }
  161.  
  162. ?>
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×