0
Я пытаюсь использовать класс из некоторого поиска с помощью API твиттера v1.1, но каждый раз, когда я получаю сообщение об ошибке и аутентификации:Wordpress Twitter API 1.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>';
}
Есть идеи?
Спасибо за помощь
Этот вопрос может помочь http://stackoverflow.com/questions/17090437/twitter-api-1-1-issues – Spec