我正在尝试使用一个类使用twitter api v1.1进行一些搜索,但每次我得到并且身份验证错误消息:
这是原始课程的链接:https://gist.github.com/tw2113/5468916
这是我正在使用的代码:
<?php
/**
* Class for connecting to Twitter's API 1.1 using WordPress APIs
*/
class TwitterAuth11 {
protected $consumer_key = 'MCQ8u3TMuBAidL4AKBtQ';
protected $consumer_secret = 'HIyZbh1FTDtpOK9qdX5yP3ZmNobnJcb2lKnhPONg6WI';
protected $access_token = '104977066-dLQj8ibcxlafcsGiwTOanw1buy0OIejhy51PzFsc';
protected $access_token_secret = 'nUkWIGX21LICgw8ZqoxwfasisB4ma3YpzwXr7EzY8';
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( 'screen_name' => $user, 'count' => $count ) );
//$this->salida = '<br> url: ' . $url . '<br>Args: ' . '<pre>'. htmlentities( print_r( $args, true ) ) .'</pre>';
$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 search_tweets( $user = '', $count = 1, $search = '' ) {
$this->user = $user;
$url = $this->twAPIurl( array( 'q' => urlencode( $search ) ), 'search/tweets.json' );
$args = $this->header_args( array( 'q' => urlencode( $search ) ) );
//$this->salida = '<br> url: ' . $url . '<br>Args: ' . '<pre>'. htmlentities( print_r( $args, true ) ) .'</pre>';
$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( array( 'screen_name' => $user ) );
$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' => base64_encode( substr(md5(rand(0, 1000000)), 0, 32 ) ),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_token' => $this->access_token,
'oauth_timestamp' => time(),
'oauth_version' => '1.0'
);
$oauth = wp_parse_args( $defaults, $args );
//echo '<pre>'. htmlentities( print_r( $oauth, true ) ) .'</pre>';
//echo '<br><br><hr><br>';
$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 ) );
echo '<span>'.$base_info .'</span>';
echo '<br><br><hr><br>';
echo '<span>'. urldecode( $base_info ) .'</span>';
echo '<br><br><hr><br>';
$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();
// Search api
$search = $twitter->search_tweets( 'ntrzacatecas', 3, '#ntr from:212Toga OR from:jasonbarkerm OR from:ntrzacatecas OR from:AlbertoChiu OR from:marcazac OR from:ortegasaul' );
// uses proper wp_error objects
if ( is_wp_error( $search ) )
echo implode( '<br/>', $search->get_error_messages( 'twitter_auth_error' ) );
else
echo '<pre>'. htmlentities( print_r( $search, true ) ) .'</pre>';
echo '</p></div>';
}
有什么想法吗?
感谢您的帮助
答案 0 :(得分:0)
尝试使用 Twitter API 1.1 Client for WordPress 。
实施起来非常简单,您只需要 consumer_key 和 consumer_secret 。
示例(来自README):
<?php
// Include Twitter API Client
require_once( 'class-wp-twitter-api.php' );
// Set your personal data retrieved at https://dev.twitter.com/apps
$credentials = array(
'consumer_key' => 'xxxxxxxxxxxxxxxx',
'consumer_secret' => 'xxxxxxxxxxxxxxxx'
);
// Let's instantiate Wp_Twitter_Api with your credentials
$twitter_api = new Wp_Twitter_Api( $credentials );
// Example a - Retrieve last 5 tweets from my timeline (default type statuses/user_timeline)
$query = 'count=5&include_entities=true&include_rts=true&screen_name=micc1983';
var_dump( $twitter_api->query( $query ) );