Можно ли использовать Instagram Basi c Display API на локальном хосте? - PullRequest
0 голосов
/ 24 апреля 2020

Поскольку Facebook требует URL-адрес веб-сайта, перенаправляющий на мое приложение Instagram, я подумал, есть ли способ сделать эту работу. Я попробовал код из учебника YouTube, который, кажется, отлично работает на обычных веб-страницах. Но я получаю несколько ошибок при попытке проверить его на локальном хосте. Мне нужно сделать это на localhost, потому что мой веб-сайт не будет подключен к Интернету, но позже будет размещен Raspberry Pi.

Веб-страница содержит индекс. php, определяет. php и instagram_basic_api. php

Вот код этих phps:

определяет. php (здесь обменялись id и секрет, чтобы скрыть мои данные):

<?php

    define( 'INSTAGRAM_APP_ID', 'insertid');
    define( 'INSTAGRAM_APP_SECRET', 'insertsecret');
    define( 'INSTAGRAM_APP_REDIRECT_URI', 'https://localhost/test');

?>

instagram_basic_display_api. php:

<?php
    require_once( 'defines.php' );

    Class instagram_basic_display_api {
        private $_appId = INSTAGRAM_APP_ID;
        private $_appSecret = INSTAGRAM_APP_SECRET;
        private $_redirectUrl = INSTAGRAM_APP_REDIRECT_URI;
        private $_getCode = '';
        private $_apiBaseUrl = 'https://api.instagram.com/';
        private $_graphBaseUrl = 'https://graph.instagram.com/';
        private $_userAccessToken = '';
        private $_userAccessTokenExpires = '';

        public $authorizationUrl = '';
        public $hasUserAccessToken = false;
        public $userId = '';

        function __construct( $params ) {
            // save instagram code
            $this->_getCode = $params['get_code'];

            // get an access token
            $this->_setUserInstagramAccessToken( $params );

            // get authorization url
            $this->_setAuthorizationUrl();
        }

        public function getUserAccessToken() {
            return $this->_userAccessToken;
        }

        public function getUserAccessTokenExpires() {
            return $this->_userAccessTokenExpires;
        }

        private function _setAuthorizationUrl() {
            $getVars = array( 
                'app_id' => $this->_appId,
                'redirect_uri' => $this->_redirectUrl,
                'scope' => 'user_profile,user_media',
                'response_type' => 'code'
            );

            // create url
            $this->authorizationUrl = $this->_apiBaseUrl . 'oauth/authorize?' . http_build_query( $getVars );
        }

        private function _setUserInstagramAccessToken( $params ) {
            if ( $params['access_token'] ) { // we have an access token
                $this->_userAccessToken = $params['access_token'];
                $this->hasUserAccessToken = true;
                $this->userId = $params['user_id'];
            } elseif ( $params['get_code'] ) { // try and get an access token
                $userAccessTokenResponse = $this->_getUserAccessToken();
                $this->_userAccessToken = $userAccessTokenResponse['access_token'];
                $this->hasUserAccessToken = true;
                $this->userId = $userAccessTokenResponse['user_id'];

                // get long lived access token
                $longLivedAccessTokenResponse = $this->_getLongLivedUserAccessToken();
                $this->_userAccessToken = $longLivedAccessTokenResponse['access_token'];
                $this->_userAccessTokenExpires = $longLivedAccessTokenResponse['expires_in'];
            }
        }

        private function _getUserAccessToken() {
            $params = array(
                'endpoint_url' => $this->_apiBaseUrl . 'oauth/access_token',
                'type' => 'POST',
                'url_params' => array(
                    'app_id' => $this->_appId,
                    'app_secret' => $this->_appSecret,
                    'grant_type' => 'authorization_code',
                    'redirect_uri' => $this->_redirectUrl,
                    'code' => $this->_getCode
                )
            );

            $response = $this->_makeApiCall( $params );
            return $response;
        }

        private function _getLongLivedUserAccessToken() {
            $params = array(
                'endpoint_url' => $this->_graphBaseUrl . 'access_token',
                'type' => 'GET',
                'url_params' => array(
                    'client_secret' => $this->_appSecret,
                    'grant_type' => 'ig_exchange_token',
                )
            );

            $response = $this->_makeApiCall( $params );
            return $response;
        }

        public function getUser() {
            $params = array(
                'endpoint_url' => $this->_graphBaseUrl . 'me',
                'type' => 'GET',
                'url_params' => array(
                    'fields' => 'id,username,media_count,account_type',
                )
            );

            $response = $this->_makeApiCall( $params );
            return $response;
        }

        public function getUsersMedia() {
            $params = array(
                'endpoint_url' => $this->_graphBaseUrl . $this->userId . '/media',
                'type' => 'GET',
                'url_params' => array(
                    'fields' => 'id,caption,media_type,media_url',
                )
            );

            $response = $this->_makeApiCall( $params );
            return $response;
        }

        public function getPaging( $pagingEndpoint ) {
            $params = array(
                'endpoint_url' => $pagingEndpoint,
                'type' => 'GET',
                'url_params' => array(
                    'paging' => true
                )
            );

            $response = $this->_makeApiCall( $params );
            return $response;
        }

        public function getMedia( $mediaId ) {
            $params = array(
                'endpoint_url' => $this->_graphBaseUrl . $mediaId,
                'type' => 'GET',
                'url_params' => array(
                    'fields' => 'id,caption,media_type,media_url,permalink,thumbnail_url,timestamp,username'
                )
            );

            $response = $this->_makeApiCall( $params );
            return $response;
        }

        public function getMediaChildren( $mediaId ) {
            $params = array(
                'endpoint_url' => $this->_graphBaseUrl . $mediaId . '/children',
                'type' => 'GET',
                'url_params' => array(
                    'fields' => 'id,media_type,media_url,permalink,thumbnail_url,timestamp,username'
                )
            );

            $response = $this->_makeApiCall( $params );
            return $response;
        }

        private function _makeApiCall( $params ) {
            $ch = curl_init();

            $endpoint = $params['endpoint_url'];

            if ( 'POST' == $params['type'] ) { // post request
                curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $params['url_params'] ) );
                curl_setopt( $ch, CURLOPT_POST, 1 );
            } elseif ( 'GET' == $params['type'] && !$params['url_params']['paging'] ) { // get request
                $params['url_params']['access_token'] = $this->_userAccessToken;

                //add params to endpoint
                $endpoint .= '?' . http_build_query( $params['url_params'] );
            }

            // general curl options
            curl_setopt( $ch, CURLOPT_URL, $endpoint );

            curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );
            curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
            curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

            $response = curl_exec( $ch );

            curl_close( $ch );

            $responseArray = json_decode( $response, true );

            if ( isset( $responseArray['error_type'] ) ) {
                var_dump( $responseArray );
                die();
            } else {
                return $responseArray;
            }
        }
    }

index. php:

<code><?php
    require_once( 'instagram_basic_display_api.php' );

    $accessToken = 'ACCESS-TOKEN';

    $params = array(
        'get_code' => isset( $_GET['code'] ) ? $_GET['code'] : '',
        'access_token' => $accessToken,
        'user_id' => 'USER-ID'
    );
    $ig = new instagram_basic_display_api( $params );
?>
<meta charset="utf-8">
<h1>Instagram Basic Display API</h1>
<hr />
<?php if ( $ig->hasUserAccessToken ) : ?>
    <h4>IG Info</h4>
    <hr />
    <?php $user = $ig->getUser(); ?>
    <pre>
        <?php print_r( $user ); ?>
    

Имя пользователя:

IG ID:

Количество носителей:

Тип учетной записи:

выделенное сообщение

Идентификатор носителя:
getMedia ($ selectedPostId); $ mediaChildren = $ ig-> getMediaChildren ($ selectedPostId); ?>

Необработанные данные

Media <? php print_r ($ media); ?> Children <? php print_r ($ mediaChildren); ?>
<? php foreach ($ mediaChildren ['data '] как $ child):?> <? php if (' IMAGE '== $ child [' media_type ']):?> image "/> <? php else:?> > source src =" <? php echo $ child [ 'media_url'];?> "> <? php endif; ?> <? php endforeach; ?>
Заголовок: <? php echo $ media ['caption']; ?>
Автор: <? php echo $ media ['username']; ?> at <? php echo $ media ['timestamp']; ?>
ID: <? php echo $ media ['id']; ?>
Тип носителя: <? php echo $ media ['media_type']; ?>
<? php $ usersMedia = $ ig-> getUsersMedia (); ?>

Users Media Page 1 (<? ​​php количество эхо-запросов ($ usersMedia ['data']);?>)

Необработанные данные

Сообщения

  • <? php if ('IMAGE' == $ post ['media_type'] || ' CAROUSEL_ALBUM '== $ post [' media_type ']):?> image" /> <? php else:?> "> <? php ENDIF; ?>
    Заголовок: <? php echo $ post ['caption']; ?>
    ID: <? php echo $ post ['id']; ?>
    Тип носителя: <? php echo $ post ['media_type']; ?>
    Медиа URL:
getPaging ($ usersMedia ['paging'] ['next']); ?>

Users Media Page 2 ( )

Необработанные данные

<? php print_r ($ usersMediaNext); ?>

Сообщения

  • <? php if ('IMAGE' == $ post ['media_type'] || ' CAROUSEL_ALBUM '== $ post [' media_type ']):?> image" /> <? php else:?> "> <? php ENDIF; ?>
    Заголовок: <? php echo $ post ['caption']; ?>
    ID: <? php echo $ post ['id']; ?>
    Тип носителя: <? php echo $ post ['media_type']; ?>
    URL-адрес мультимедиа: <? php echo $ post ['media_url']; ?>
<? php else:?> authorizationUrl; ?>"> Авторизация с Instagram <? php endif; ?>

некоторые сообщения об ошибках (здесь могут быть основные проблемы):

Имя пользователя: Примечание: неопределенный индекс: имя пользователя в E: \ Xampp \ htdocs \ test \ index . php в строке 23

Идентификатор IG: Примечание: неопределенный индекс: идентификатор в E: \ Xampp \ htdocs \ test \ index. php в строке 24

Количество носителей: уведомление : Неопределенный индекс: media_count в E: \ Xampp \ htdocs \ test \ index. php в строке 25

Тип учетной записи: Примечание: неопределенный индекс: account_type в E: \ Xampp \ htdocs \ test \ index. php в строке 26

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...