Posted on April 25, 2013
<?php /** * Class for connecting to Twitter's API 1.1 using WordPress APIs */ class TwitterAuth11 { // stuff you need to edit. You can get these values by creating a twitter app at https://dev.twitter.com protected $consumer_key = 'YOUR CONSUMER KEY'; protected $consumer_secret = 'YOUR CONSUMER SECRET'; protected $access_token = 'YOUR ACCESS TOKEN'; protected $access_token_secret = 'YOUR ACCESS TOKEN SECRET'; protected $url = 'https://api.twitter.com/1.1/'; protected function authenticate( $user, $return = true ) { $body = json_decode( $body ); if ( $body && !empty( $response['headers']['status'] ) && $response['headers']['status'] == '200 OK' ) { if ( $return == false ) $body = null; $noauth = ''; $badauth = 'good'; } else { $body = null; $badauth = 'error'; $noauth = true; } return array( 'response' => $body, 'badauth' => $badauth, 'noauth' => $noauth, ); } function get_tweets( $user = '', $count = 1 ) { $this->user = $user; $url = $this->twAPIurl( array( 'screen_name' => $user, 'count'=> $count ) ); $args = $this->header_args( array( 'count' => $count ) ); $response = wp_remote_get( $url, $args ); if( is_wp_error( $response ) ) return '<strong>ERROR:</strong> '. $response->get_error_message(); $error = 'Could not access Twitter feed.'; return $this->returnData( $response, $error ); } function authenticate_user( $user = '' ) { $this->user = $user; $url = $this->twAPIurl( array( 'screen_name' => $user ), 'users/lookup.json' ); $args = $this->header_args(); $response = wp_remote_get( $url, $args ); if( is_wp_error( $response ) ) return false; $error = 'Could not access Twitter user.'; return $this->returnData( $response, $error ); } protected function returnData( $response, $error_message = '' ) { $body = wp_remote_retrieve_body( $response ); $json = json_decode( $body ); if ( isset( $json->errors ) ) { $errors = new WP_Error( 'twitter_auth_error', $error_message ); foreach ( $json->errors as $key => $error ) { $errors->add( 'twitter_auth_error', '<strong>ERROR '. $error->code .':</strong> '. $error->message ); } return $errors; } return $json; } protected function header_args( $args = array() ) { if ( !isset( $this->user ) || ! $this->user ) return null; // Set our oauth data $defaults = array( 'screen_name' => $this->user, 'oauth_consumer_key' => $this->consumer_key, 'oauth_nonce' => time(), 'oauth_signature_method' => 'HMAC-SHA1', 'oauth_token' => $this->access_token, 'oauth_timestamp' => time(), 'oauth_version' => '1.0' ); $oauth = wp_parse_args( $args, $defaults ); $base_info = $this->build_base( $this->base_url(), $oauth ); $composite_key = $this->consumer_secret .'&'. $this->access_token_secret; // create our oauth signature $oauth['oauth_signature'] = base64_encode( hash_hmac( 'sha1', $base_info, $composite_key, true ) ); $auth_args = array( 'sslverify' => false, 'headers' => array( 'Authorization' => 'OAuth '. $this->authorize_header( $oauth ), 'Expect' => false, 'Accept-Encoding' => false ), ); return $auth_args; } protected function build_base( $baseURI, $params ) { $base = array(); ksort( $params ); foreach( $params as $key => $value ){ $base[] = $key .'='. rawurlencode( $value ); } return 'GET&'. rawurlencode( $baseURI ) .'&'. rawurlencode( implode( '&', $base ) ); } protected function authorize_header( $oauth ) { $header = ''; $values = array(); foreach( $oauth as $key => $value ) { if ( $key == 'screen_name' || $key == 'count' ) continue; $values[] = $key .'="'. rawurlencode( $value ) .'"'; } $header .= implode( ', ', $values ); return $header; } protected function twAPIurl( $params = false, $trail = 'statuses/user_timeline.json' ) { // append trailing path $this->base_url = $this->url . $trail; // append query args return $params ? add_query_arg( $params, $this->base_url ) : $this->base_url; } protected function base_url() { // set it up if ( !isset( $this->base_url ) ) $this->twAPIurl(); return $this->base_url; } } add_action( 'all_admin_notices', 'testing_twitter_api'); /** * Test the api in the WordPress Dashboard */ function testing_twitter_api() { echo '<div id="message" class="updated"><p>'; $twitter = new TwitterAuth11(); // Get user's tweets $tweets = $twitter->get_tweets( 'tw2113', 2 ); // uses proper wp_error objects if ( is_wp_error( $tweets ) ) echo implode( '<br/>', $tweets->get_error_messages( 'twitter_auth_error' ) ); else echo '<pre>'. htmlentities( print_r( $tweets, true ) ) .'</pre>'; echo '<br/>'; echo '<hr/>'; echo '<br/>'; // Get user's profile $user = $twitter->authenticate_user( 'tw2113' ); // uses proper wp_error objects if ( is_wp_error( $user ) ) echo implode( '<br/>', $user->get_error_messages( 'twitter_auth_error' ) ); else echo '<pre>'. htmlentities( print_r( $user, true ) ) .'</pre>'; echo '</p></div>'; }
Recent Comments