HEX
Server: Apache
System: Linux server 5.4.0-56-generic #62-Ubuntu SMP Mon Nov 23 19:20:19 UTC 2020 x86_64
User: losadagest (10000)
PHP: 7.4.33
Disabled: opcache_get_status
Upload Files
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;
	}
}