2013-06-14 5 views
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>'; 

} 

Есть идеи?

Спасибо за помощь

+0

Этот вопрос может помочь http://stackoverflow.com/questions/17090437/twitter-api-1-1-issues – Spec

ответ

0

Try используя 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));