Поскольку 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 ']):?>
"/> <? 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 ']):?>
" /> <? 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 ']):?>
" /> <? 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