Last active
July 7, 2018 20:31
-
-
Save adrian-enspired/4536162 to your computer and use it in GitHub Desktop.
a class to access info from Twitter's "Sign in With Twitter" API. You can add additional methods as desired. See the conversation here: [http://css-tricks.com/forums/discussion/21825/output-value-of-nested-arrays]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* wraps info returned from twitter's "sign in with twitter" API. | |
* add additional methods/properties as desired and use as a user class. | |
* | |
* @author Adrian Testa-Avila <[email protected]> | |
* @copyright 2013 Adrian Testa-Avila | |
* @license creative commons attribution-sharealike | |
* http://creativecommons.org/licenses/by-sa/3.0/ | |
* | |
* @uses PHP 5.4+ For compatibility with v5.2+, | |
* see ## special instructions at|around line 42. | |
*/ | |
class twitter_user{ | |
## NONPUBLIC PROPERTIES ## | |
/** | |
* object this will hold the info you got from the twitter API. | |
* "protected" means it can't be accessed directly from outside the object | |
* (e.g., like `echo $twitter_user->t`). | |
* we do this so we can control how $t is accessed, using the __get() method below. | |
*/ | |
protected $t; | |
## PUBLIC METHODS ## | |
/** | |
* this method creates a new twitter_user object - | |
* e.g., like `$chrisburton = new twitter_user( $twitter_array );` | |
* it simply converts $twitter_array to an object and stores it in $this->t. | |
* see the __get() method to see how you retrieve values. | |
* | |
* @param array $twitter_info the info you got from twitter. | |
*/ | |
public function __construct( array $twitter_array ){ | |
if( !empty( $twitter_array['auth'] ) && is_array( $twitter_array['auth'] ) ){ | |
// you might want to verify other|all values exist, | |
// beyond just ['auth'], but that's up to you. | |
// converting the array into an object | |
// makes it easier to access the values via our __get() method. | |
// (using the json_* functions is an ugly hack, but works well.) | |
## this works with PHP version 5.4. | |
## v.5.3 does not support the json_encode flags used here (you can remove them). | |
## v.5.2 does not support json_last_error (you can remove the error check and hope for the best.) | |
## see comments on|around lines 51-62 below for alternate code if you need 5.2+ compatibility | |
## (however, UPGRADING to 5.4+ is the recommended solution). | |
$t = json_decode( | |
json_encode( | |
$twitter_array['auth'] | |
## PHP 5.3 compatability: | |
## comment out the following line | |
,JSON_BIGINT_AS_STRING|JSON_UNESCAPED_UNICODE | |
) | |
); | |
// make sure there were no errors | |
## PHP 5.2 compatability: | |
## comment out the following line | |
if( json_last_error() === JSON_ERROR_NONE ){ | |
## PHP 5.2 compatability: | |
## un-comment the following line | |
// if( true ){ | |
// all good. | |
$this->t = $t; | |
}else{ | |
// throw an exception so you know something went wrong | |
throw new Exception( 'conversion to object failed' ); | |
} | |
}else{ | |
// throw an exception so you know something went wrong | |
throw new Exception( '$twitter_info is malformed' ); | |
} | |
} | |
/** | |
* __get() is a "magic method" that runs | |
* whenever you try to access a nonpublic (or nonexistant) property. | |
* we're going to use it to access the twitter array. | |
* | |
* @param string $name the name of the value asked for | |
* @return mixed the value that $name is mapped to, if it exists; | |
* FALSE otherwise | |
*/ | |
public function __get( $name ){ | |
// first check if $name maps directly to a value in the twitter array: | |
if( isset( $this->t->$name ) ){ | |
// this handles usage like `echo $chrisburton->uid;` | |
return $this->t->$name; | |
} | |
// next, check if $name maps to a nested value: | |
foreach( $this->t as $t ){ | |
if( isset( $t->$name ) ){ | |
// this handles usage like `echo $chrisburton->nickname;` | |
// or even `echo $chrisburton->urls->twitter;` | |
// (but *not* `echo $chrisburton->twitter;` - that won't work). | |
return $t->$name; | |
} | |
} | |
// finally, if nothing was found: | |
return false; | |
} | |
} | |
## EXAMPLE USAGE ## | |
/* (REMOVE everything that follows in production use) */ | |
/** returned from twitter oauth API. */ | |
$twitter_array = array( | |
'auth' => array( | |
'uid' => 0 | |
,'info' => array( | |
'name' => 'Chris Burton' | |
,'nickname' => 'chrisburton' | |
,'urls' => array( | |
'twitter' => 'http://twitter.com/chrisburton' | |
,'website' => 'http://chrisburton.me' | |
,'dribble' => 'http://dribbble.com/chrisburton' | |
) | |
,'location' => 'New York' | |
,'description' => 'Letterer & Typographer' | |
,'image' => 'http://a0.twimg.com/profile_images/3106804659/f100a994784f6e8059bb15125f286667_normal.png' | |
) | |
,'credentials' => array( | |
'token' => 'Token Removed' | |
,'secret' => 'Secret Removed' | |
) | |
,'raw' => array( | |
'id' => 0 | |
,'profile_sidebar_fill_color' => 'DDEEF6' | |
,'created_at' => 'Thu Jun 25 22:48:35 +0000 2009' | |
,'contributors_enabled' => 0 | |
) | |
) | |
); | |
try{ | |
// create new twitter_user | |
$cb = new twitter_user( $twitter_array ); | |
}catch( Exception $e ){ | |
print $e->getMessage(); | |
exit; | |
} | |
// try it out: | |
// maps to `twitter_user->t->uid` | |
// outputs "0" | |
print $cb->uid; | |
// maps to `twitter_user->t->info->name` | |
// outputs "Chris Burton" | |
print $cb->name; | |
// maps to `twitter_user->t->urls->twitter` | |
// outputs "http://twitter.com/chrisburton" | |
print $cb->urls->twitter; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment