File: /home/parhudrw/ve.anqa.it/wp-content/themes/vibrance/includes/widgets/class-wp-twitter-api.php
<?php
/**
* Class WordPress Twitter API
*
* @version 1.0.0
*/
class Wp_Twitter_Api {
var $bearer_token,
// Default credentials
$args = array(
'consumer_key' => 'default_consumer_key',
'consumer_secret' => 'default_consumer_secret'
),
// Default type of the resource and cache duration
$query_args = array(
'type' => 'statuses/user_timeline',
'cache' => 1800
),
$has_error = false;
/**
* WordPress Twitter API Constructor
*
* @param array $args
*/
public function __construct( $args = array() ) {
if ( is_array( $args ) && !empty( $args ) )
$this->args = array_merge( $this->args, $args );
if ( ! $this->bearer_token = get_option( 'twitter_bearer_token' ) )
$this->bearer_token = $this->get_bearer_token();
}
/**
* Get the token from oauth Twitter API
*
* @return string Oauth Token
*/
private function get_bearer_token() {
$bearer_token_credentials = $this->args['consumer_key'] . ':' . $this->args['consumer_secret'];
$bearer_token_credentials_64 = codeless_encode_content( $bearer_token_credentials );
$args = array(
'method' => 'POST',
'timeout' => 5,
'redirection' => 5,
'httpversion' => '1.0',
'blocking' => true,
'headers' => array(
'Authorization' => 'Basic ' . $bearer_token_credentials_64,
'Content-Type' => 'application/x-www-form-urlencoded;charset=UTF-8',
'Accept-Encoding' => 'gzip'
),
'body' => array( 'grant_type' => 'client_credentials' ),
'cookies' => array()
);
$response = wp_remote_post( 'https://api.twitter.com/oauth2/token', $args );
if ( is_wp_error( $response ) || 200 != $response['response']['code'] )
return $this->bail( esc_html__( 'Can\'t get the bearer token, check your credentials', 'vibrance' ), $response );
$result = json_decode( $response['body'] );
update_option( 'twitter_bearer_token', $result->access_token );
return $result->access_token;
}
/**
* Query twitter's API
*
* @uses $this->get_bearer_token() to retrieve token if not working
*
* @param string $query Insert the query in the format "count=1&include_entities=true&include_rts=true&screen_name=micc1983!
* @param array $query_args Array of arguments: Resource type (string) and cache duration (int)
* @param bool $stop Stop the query to avoid infinite loop
*
* @return bool|object Return an object containing the result
*/
public function query( $query, $query_args = array(), $stop = false ) {
if ( $this->has_error )
return false;
if ( is_array( $query_args ) && !empty( $query_args ) )
$this->query_args = array_merge( $this->query_args, $query_args );
$transient_name = 'wta_' . md5( $query );
if ( false !== ( $data = get_transient( $transient_name ) ) )
return $data;
$args = array(
'method' => 'GET',
'timeout' => 5,
'redirection' => 5,
'httpversion' => '1.0',
'blocking' => true,
'headers' => array(
'Authorization' => 'Bearer ' . $this->bearer_token,
'Accept-Encoding' => 'gzip'
),
'body' => null,
'cookies' => array()
);
$response = wp_remote_get( 'https://api.twitter.com/1.1/' . $this->query_args['type'] . '.json?' . $query, $args );
if ( is_wp_error( $response ) || 200 != $response['response']['code'] ){
if ( !$stop ){
$this->bearer_token = $this->get_bearer_token();
return $this->query( $query, $this->query_args, true );
} else {
return $this->bail( esc_html__( 'Bearer Token is good, check your query', 'vibrance' ), $response );
}
}
$data = json_decode( $response['body'] );
set_transient( $transient_name, $data, $this->query_args['cache'] );
return $data;
}
/**
* Let's manage errors
*
* WP_DEBUG has to be set to true to show errors
*
* @param string $error_text Error message
* @param string $error_object Server response or wp_error
*/
private function bail( $error_text, $error_object = '' ) {
$this->has_error = true;
if ( is_wp_error( $error_object ) ){
$error_text .= ' - Wp Error: ' . $error_object->get_error_message();
} elseif ( !empty( $error_object ) && isset( $error_object['response']['message'] ) ) {
$error_text .= ' ( Response: ' . $error_object['response']['message'] . ' )';
}
trigger_error( $error_text , E_USER_NOTICE );
}
}