diff options
author | BlueRaja <BlueRaja.admin@gmail.com> | 2013-06-01 20:10:36 -0500 |
---|---|---|
committer | BlueRaja <BlueRaja.admin@gmail.com> | 2013-06-01 20:10:36 -0500 |
commit | 951330c9f83c8c8ee98f65fdccb5797e2e59d1f3 (patch) | |
tree | fc7b196ca0d91c1c71dcd945aa9667c7af0134fa /includes/HybridAuth/Providers/Twitter.php | |
parent | e58a3b8b3702b22c903b02a9b4fa1020d6797459 (diff) | |
download | pathery-951330c9f83c8c8ee98f65fdccb5797e2e59d1f3.tar.xz |
A partial commit of the auth stuff, in case my upcoming changes break anything
Diffstat (limited to 'includes/HybridAuth/Providers/Twitter.php')
-rw-r--r-- | includes/HybridAuth/Providers/Twitter.php | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/includes/HybridAuth/Providers/Twitter.php b/includes/HybridAuth/Providers/Twitter.php new file mode 100644 index 0000000..671ba94 --- /dev/null +++ b/includes/HybridAuth/Providers/Twitter.php @@ -0,0 +1,204 @@ +<?php +/*! +* HybridAuth +* http://hybridauth.sourceforge.net | http://github.com/hybridauth/hybridauth +* (c) 2009-2012, HybridAuth authors | http://hybridauth.sourceforge.net/licenses.html +*/ + +/** +* Hybrid_Providers_Twitter provider adapter based on OAuth1 protocol +*/ +class Hybrid_Providers_Twitter extends Hybrid_Provider_Model_OAuth1 +{ + /** + * IDp wrappers initializer + */ + function initialize() + { + parent::initialize(); + + // Provider api end-points + $this->api->api_base_url = "https://api.twitter.com/1.1/"; + $this->api->authorize_url = "https://api.twitter.com/oauth/authenticate"; + $this->api->request_token_url = "https://api.twitter.com/oauth/request_token"; + $this->api->access_token_url = "https://api.twitter.com/oauth/access_token"; + + if ( isset( $this->config['api_version'] ) && $this->config['api_version'] ){ + $this->api->api_base_url = "https://api.twitter.com/{$this->config['api_version']}/"; + } + + if ( isset( $this->config['authorize'] ) && $this->config['authorize'] ){ + $this->api->authorize_url = "https://api.twitter.com/oauth/authorize"; + } + + $this->api->curl_auth_header = false; + } + + /** + * begin login step + */ + function loginBegin() + { + $tokens = $this->api->requestToken( $this->endpoint ); + + // request tokens as recived from provider + $this->request_tokens_raw = $tokens; + + // check the last HTTP status code returned + if ( $this->api->http_code != 200 ){ + throw new Exception( "Authentification failed! {$this->providerId} returned an error. " . $this->errorMessageByStatus( $this->api->http_code ), 5 ); + } + + if ( ! isset( $tokens["oauth_token"] ) ){ + throw new Exception( "Authentification failed! {$this->providerId} returned an invalid oauth token.", 5 ); + } + + $this->token( "request_token" , $tokens["oauth_token"] ); + $this->token( "request_token_secret", $tokens["oauth_token_secret"] ); + + // redirect the user to the provider authentication url with force_login + if ( isset( $this->config['force_login'] ) && $this->config['force_login'] ){ + Hybrid_Auth::redirect( $this->api->authorizeUrl( $tokens, array( 'force_login' => true ) ) ); + } + + // else, redirect the user to the provider authentication url + Hybrid_Auth::redirect( $this->api->authorizeUrl( $tokens ) ); + } + + /** + * load the user profile from the IDp api client + */ + function getUserProfile() + { + $response = $this->api->get( 'account/verify_credentials.json' ); + + // check the last HTTP status code returned + if ( $this->api->http_code != 200 ){ + throw new Exception( "User profile request failed! {$this->providerId} returned an error. " . $this->errorMessageByStatus( $this->api->http_code ), 6 ); + } + + if ( ! is_object( $response ) || ! isset( $response->id ) ){ + throw new Exception( "User profile request failed! {$this->providerId} api returned an invalid response.", 6 ); + } + + # store the user profile. + $this->user->profile->identifier = (property_exists($response,'id'))?$response->id:""; + $this->user->profile->displayName = (property_exists($response,'screen_name'))?$response->screen_name:""; + $this->user->profile->description = (property_exists($response,'description'))?$response->description:""; + $this->user->profile->firstName = (property_exists($response,'name'))?$response->name:""; + $this->user->profile->photoURL = (property_exists($response,'profile_image_url'))?$response->profile_image_url:""; + $this->user->profile->profileURL = (property_exists($response,'screen_name'))?("http://twitter.com/".$response->screen_name):""; + $this->user->profile->webSiteURL = (property_exists($response,'url'))?$response->url:""; + $this->user->profile->region = (property_exists($response,'location'))?$response->location:""; + + return $this->user->profile; + } + + /** + * load the user contacts + */ + function getUserContacts() + { + $parameters = array( 'cursor' => '-1' ); + $response = $this->api->get( 'friends/ids.json', $parameters ); + + // check the last HTTP status code returned + if ( $this->api->http_code != 200 ){ + throw new Exception( "User contacts request failed! {$this->providerId} returned an error. " . $this->errorMessageByStatus( $this->api->http_code ) ); + } + + if( ! $response || ! count( $response->ids ) ){ + return ARRAY(); + } + + // 75 id per time should be okey + $contactsids = array_chunk ( $response->ids, 75 ); + + $contacts = ARRAY(); + + foreach( $contactsids as $chunk ){ + $parameters = array( 'user_id' => implode( ",", $chunk ) ); + $response = $this->api->get( 'users/lookup.json', $parameters ); + + // check the last HTTP status code returned + if ( $this->api->http_code != 200 ){ + throw new Exception( "User contacts request failed! {$this->providerId} returned an error. " . $this->errorMessageByStatus( $this->api->http_code ) ); + } + + if( $response && count( $response ) ){ + foreach( $response as $item ){ + $uc = new Hybrid_User_Contact(); + + $uc->identifier = (property_exists($item,'id'))?$item->id:""; + $uc->displayName = (property_exists($item,'name'))?$item->name:""; + $uc->profileURL = (property_exists($item,'screen_name'))?("http://twitter.com/".$item->screen_name):""; + $uc->photoURL = (property_exists($item,'profile_image_url'))?$item->profile_image_url:""; + $uc->description = (property_exists($item,'description'))?$item->description:""; + + $contacts[] = $uc; + } + } + } + + return $contacts; + } + + /** + * update user status + */ + function setUserStatus( $status ) + { + $parameters = array( 'status' => $status ); + $response = $this->api->post( 'statuses/update.json', $parameters ); + + // check the last HTTP status code returned + if ( $this->api->http_code != 200 ){ + throw new Exception( "Update user status failed! {$this->providerId} returned an error. " . $this->errorMessageByStatus( $this->api->http_code ) ); + } + } + + /** + * load the user latest activity + * - timeline : all the stream + * - me : the user activity only + * + * by default return the timeline + */ + function getUserActivity( $stream ) + { + if( $stream == "me" ){ + $response = $this->api->get( 'statuses/user_timeline.json' ); + } + else{ + $response = $this->api->get( 'statuses/home_timeline.json' ); + } + + // check the last HTTP status code returned + if ( $this->api->http_code != 200 ){ + throw new Exception( "User activity stream request failed! {$this->providerId} returned an error. " . $this->errorMessageByStatus( $this->api->http_code ) ); + } + + if( ! $response ){ + return ARRAY(); + } + + $activities = ARRAY(); + + foreach( $response as $item ){ + $ua = new Hybrid_User_Activity(); + + $ua->id = (property_exists($item,'id'))?$item->id:""; + $ua->date = (property_exists($item,'created_at'))?strtotime($item->created_at):""; + $ua->text = (property_exists($item,'text'))?$item->text:""; + + $ua->user->identifier = (property_exists($item->user,'id'))?$item->user->id:""; + $ua->user->displayName = (property_exists($item->user,'name'))?$item->user->name:""; + $ua->user->profileURL = (property_exists($item->user,'screen_name'))?("http://twitter.com/".$item->user->screen_name):""; + $ua->user->photoURL = (property_exists($item->user,'profile_image_url'))?$item->user->profile_image_url:""; + + $activities[] = $ua; + } + + return $activities; + } +} |