Проблема с токеном доступа Instagram API
Я пытаюсь постить в Instagram через их API. Получил токен как показано в этой статье. Используя этот токен у меня получается получать посты из моего аккаунта и даже обновлять токен (что, впрочем и не требуется, поскольку этот токен постоянный), но сделать пост не выходит. Получаю ошибку: Invalid OAuth access token - Cannot parse access token
Так и не разобрался, что не так с токеном. Судя по сообщению в ошибке, API не устраивает именно формат токена. Может быть, для постинга нужен другой токен?
index.php
function get_content($url, $proxy = '', $post = false){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
if($proxy){
curl_setopt($ch, CURLOPT_PROXY, $proxy);
}
if($post){
curl_setopt($ch, CURLOPT_POST, 1);
}
$output = curl_exec($ch);
if(!$output){
echo 'Curl Error: ' . curl_error($ch);
}
curl_close($ch);
return $output;
}
function make_post($proxy, $id, $payload){
$url = "https://graph.facebook.com/v10.0/". $id ."/media?" . http_build_query($payload);
return get_content($url = $url, $proxy = $proxy, $post = true);
}
$proxy = '204.137.250.6:3129';
$instagram_account_id = '<my id>';
$instagramAccesToken = '<my token>';
$posting_image_url = 'https://upload.wikimedia.org/wikipedia/commons/9/99/Black_square.jpg'; // some square jpg image to post
$caption = 'test posting to instagram using GraphAPI';
$payload = [
'image_url' => $posting_image_url,
'caption' => $caption,
'access_token' => $instagramAccesToken
];
$response = make_post($proxy, $instagram_account_id, $payload);
echo $response;
Пробовал сделать это через python взяв код отсюда
main.py
import requests
import config
import json
def postInstagramQuote():
image_location_1 = 'https://upload.wikimedia.org/wikipedia/commons/9/99/Black_square.jpg'
post_url = 'https://graph.facebook.com/v10.0/{}/media'.format(config.ig_user_id)
payload = {
'image_url': image_location_1,
'caption': 'Trying to post by Instagram GraphAPI',
'access_token': config.user_access_token
}
proxies = {
'http': '204.137.250.6:31290',
'https': '204.137.250.6:3129',
}
r = requests.post(post_url, data=payload, proxies=proxies)
print(r.text)
result = json.loads(r.text)
if 'id' in result:
creation_id = result['id']
second_url = 'https://graph.facebook.com/v10.0/{}/media_publish'.format(config.ig_user_id)
second_payload = {
'creation_id': creation_id,
'access_token': config.user_access_token
}
r = requests.post(second_url, data=second_payload)
print('--------Just posted to instagram--------')
print(r.text)
else:
print('HOUSTON we have a problem')
postInstagramQuote()
Результат тот же.
Ответ сервера:
{"error":{"message":"Invalid OAuth access token - Cannot parse access token","type":"OAuthException","code":190,"fbtrace_id":"APyX-K6cxenBWXSHgc-x4p8"}}
Приходится использовать прокси, потому что инстаграм заблокирован. Но на работоспособность прокси никак не может влиять.