File: /var/www/vhosts/aceitunaslosada.com/web/wp-content/plugins/insta-gallery/includes/api/apiBASIC.php
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
class QLIGG_API_Basic {
protected static $_instance;
protected $instagram;
public $message;
public $instagram_url = 'https://www.instagram.com';
private $api_url = 'https://api.instagram.com';
public static function instance() {
if ( is_null( self::$_instance ) ) {
self::$_instance = new self();
}
return self::$_instance;
}
public function get_create_account_link() {
$admin_url = admin_url( 'admin.php?page-qligg_token' );
$client_id = '6e628e63145746bcb684912009514665';
return "{$this->instagram_url}/oauth/authorize/?client_id={$client_id}&scope=basic&redirect_uri=https://instagram.quadlayers.com/index.php?return_uri={$admin_url}&response_type=token&state={$admin_url}&hl=en";
}
// API generate code generation url
// ---------------------------------------------------------------------------
/*
public function get_access_code($client_id = null) {
$args = array(
'client_id' => $client_id,
'response_type' => 'code',
'scope' => 'public_content',
'redirect_uri' => urlencode(admin_url('admin.php?page=qligg_token&igigresponse=1'))
);
return add_query_arg($args, "{$this->api_url}/oauth/authorize/");
} */
// API call to get access token using authorization code
// ---------------------------------------------------------------------------
public function get_access_token( $client_id, $client_secret, $redirect_uri, $code ) {
$args = array(
'body' => array(
'client_id' => $client_id,
'client_secret' => $client_secret,
'redirect_uri' => $redirect_uri,
'code' => $code,
'grant_type' => 'authorization_code',
'scope' => 'public_content',
),
);
$response = $this->validate_response( wp_remote_post( "{$this->api_url}/oauth/access_token", $args ) );
if ( isset( $response['access_token'] ) ) {
return $response['access_token'];
}
return false;
}
// API call to get user profile information using access token
// ---------------------------------------------------------------------------
public function get_user_profile( $access_token ) {
$args = array(
'access_token' => $access_token,
);
$url = "{$this->api_url}/v1/users/self";
$response = $this->remote_get( $url, $args );
if ( empty( $response ) ) {
return false;
}
if ( isset( $response['meta']['code'] ) && ( $response['meta']['code'] != 200 ) && isset( $response['meta']['error_message'] ) ) {
$this->message = $response['meta']['error_message'];
return false;
}
return isset( $response['data'] ) ? $response['data'] : false;
}
// API call to check if access token is valid
// ---------------------------------------------------------------------------
public function validate_token( $access_token ) {
$args = array(
'access_token' => $access_token,
);
$url = "{$this->api_url}/v1/users/self";
$response = $this->remote_get( $url, $args );
if ( isset( $response['meta']['code'] ) && $response['meta']['code'] == 200 ) {
return true;
}
if ( isset( $response['meta']['error_message'] ) ) {
$this->message = $response['meta']['error_message'];
}
return false;
}
// API call to get user feed using access token
// ---------------------------------------------------------------------------
function setup_user_item( $data, $next_max_id = null ) {
static $load = false;
static $i = 1;
if ( ! $next_max_id ) {
$load = true;
}
$instagram_items = array();
if ( is_array( $data ) && ! empty( $data ) ) {
foreach ( $data as $item ) {
if ( $load ) {
preg_match_all( '/(?<!\S)#([0-9a-zA-Z]+)/', @$item['caption']['text'], $hashtags );
$instagram_items[] = array(
'i' => $i,
'id' => str_replace( "_{$item['user']['id']}", '', $item['id'] ),
'images' => array(
'standard' => @$item['images']['standard_resolution']['url'],
'medium' => @$item['images']['low_resolution']['url'],
'small' => @$item['images']['thumbnail']['url'],
),
'videos' => array(
'standard' => @$item['videos']['standard_resolution']['url'],
'medium' => @$item['videos']['low_resolution']['url'],
'small' => @$item['videos']['thumbnail']['url'],
),
'likes' => @$item['likes']['count'],
'comments' => @$item['comments']['count'],
'caption' => preg_replace( '/(?<!\S)#([0-9a-zA-Z]+)/', "<a href=\"{$this->instagram_url}/explore/tags/$1\">#$1</a>", htmlspecialchars( @$item['caption']['text'] ) ),
'hashtags' => @$hashtags[1], // issue with uft 8 encode breakes json_encode
'link' => @$item['link'],
'type' => @$item['type'],
'user_id' => @$item['user']['id'],
'date' => date_i18n( 'j F, Y', @$item['created_time'] ),
);
}
if ( $next_max_id && ( $next_max_id == $i ) ) {
$i = $next_max_id;
$load = true;
}
$i++;
}
}
return $instagram_items;
}
public function get_user_items( $access_token, $max_id = null ) {
$args = array(
'access_token' => $access_token,
'max_id' => $max_id,
'count' => 33,
);
$url = "{$this->api_url}/v1/users/self/media/recent/";
$response = $this->remote_get( $url, $args );
if ( empty( $response ) ) {
return false;
}
if ( isset( $response['meta']['code'] ) && ( $response['meta']['code'] != 200 ) && isset( $response['meta']['error_message'] ) ) {
$this->message = $response['meta']['error_message'];
return false;
}
if ( ! isset( $response['data'] ) ) {
return false;
}
return $response;
}
// Tag name and return items list array
// -------------------------------------------------------------------------
function setup_tag_item( $data, $next_max_id = null ) {
static $load = false;
static $i = 1;
if ( ! $next_max_id ) {
$load = true;
}
$instagram_items = array();
if ( is_array( $data ) && ! empty( $data ) ) {
foreach ( $data as $res ) {
if ( ! isset( $res['node']['display_url'] ) ) {
continue;
}
// preg_match_all("/#(\\w+)/", @$res['node']['edge_media_to_caption']['edges'][0]['node']['text'], $hashtags);
if ( $load ) {
$instagram_items[] = array(
'i' => $i,
'id' => $res['node']['id'],
'images' => array(
'standard' => $res['node']['display_url'],
'medium' => $res['node']['thumbnail_src'],
'small' => $res['node']['thumbnail_resources'][0]['src'],
),
'likes' => $res['node']['edge_liked_by']['count'],
'comments' => $res['node']['edge_media_to_comment']['count'],
'caption' => preg_replace( '/(?<!\S)#([0-9a-zA-Z]+)/', "<a href=\"{$this->instagram_url}/explore/tags/$1\">#$1</a>", htmlspecialchars( @$res['node']['edge_media_to_caption']['edges'][0]['node']['text'] ) ),
// 'hashtags' => @$hashtags[1], // issue with uft 8 encode breakes json_encode
'link' => "{$this->instagram_url}/p/{$res['node']['shortcode']}/",
'type' => 'image', // @$types[$res['node']['__typename']],
'user_id' => $res['node']['owner']['id'],
'date' => date_i18n( 'j F, Y', strtotime( $res['node']['taken_at_timestamp'] ) ),
);
}
if ( $next_max_id && ( $next_max_id == $i ) ) {
$i = $next_max_id;
$load = true;
}
$i++;
}
}
return $instagram_items;
}
public function get_tag_items( $tag = null, $max_id = null ) {
if ( $tag ) {
$tag = urlencode( (string) $tag );
$args = array(
'__a' => 1,
'max_id' => "{$max_id}=",
);
$response = $this->remote_get( "{$this->instagram_url}/explore/tags/{$tag}/", $args );
// API updated on Jan 03 17
// ---------------------------------------------------------------------
if ( ! isset( $response['graphql']['hashtag']['edge_hashtag_to_media']['edges'] ) ) {
return false;
}
return $response;
}
$this->message = esc_html__( 'Please provide a valid #tag', 'insta-gallery' );
}
function validate_response( $json = null ) {
if ( ! ( $response = json_decode( wp_remote_retrieve_body( $json ), true ) ) || 200 !== wp_remote_retrieve_response_code( $json ) ) {
if ( isset( $response['meta']['error_message'] ) ) {
$this->message = $response['meta']['error_message'];
return array(
'error' => 1,
'message' => $this->message,
);
}
if ( isset( $response['error_message'] ) ) {
$this->message = $response['error_message'];
return array(
'error' => 1,
'message' => $this->message,
);
}
if ( is_wp_error( $json ) ) {
$response = array(
'error' => 1,
'message' => $json->get_error_message(),
);
} else {
$response = array(
'error' => 1,
'message' => esc_html__( 'Unknow error occurred, please try again', 'insta-gallery' ),
);
}
}
return $response;
}
public function remote_get( $url = null, $args = array() ) {
$url = add_query_arg( $args, trailingslashit( $url ) );
$response = $this->validate_response( wp_remote_get( $url, array( 'timeout' => 29 ) ) );
return $response;
}
// Return message
// ---------------------------------------------------------------------------
public function get_message() {
return $this->message;
}
public function set_message( $message = '' ) {
$this->message = $message;
}
}