Загрузка PHP в альбом imgur не работает? - PullRequest
1 голос
/ 01 октября 2019

я пытаюсь загрузить в альбом своей учетной записи imgur, однако загрузка работает, но похоже, что она будет загружена как аноним / публично?

вот мой код:

<?php

$client_id = "465xxx8c44294";
$image = file_get_contents("../images/d4487317c3xxx93210b293c2e.jpg");

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.imgur.com/3/image.json');
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Client-ID ' . $client_id));
//curl_setopt($ch, CURLOPT_POSTFIELDS, array('image' => base64_encode($image)));
curl_setopt($ch, CURLOPT_POSTFIELDS, array('image' => base64_encode($image), 'album' => 'nqxxxGE'));

$reply = curl_exec($ch);
curl_close($ch);

$reply = json_decode($reply);
printf('<img height="180" src="%s" >', $reply->data->link);

любой совет?

1 Ответ

0 голосов
/ 01 октября 2019

Если вы хотите добавить изображение в альбом, в соответствии с doc , вам нужно передать альбом id. Убедитесь, что вы сгенерировали токен, который имеет доступ к секретным альбомам. Здесь вы можете найти несколько советов о токенах.

curl_setopt($ch, CURLOPT_POSTFIELDS, 
    array(
        'image' => base64_encode($image), 
        'album' => '5' // 5 - your album id
    ) 
); 

Вы можете проверить идентификатор своих альбомов, используя this api.

Чтобы обновить токен:

Если пользователь авторизовал свою учетную запись, но у вас больше нет действительной access_token для него, то можно создать новую, используя refresh_token.

Для получения новойтокен доступа, ваше приложение выполняет от POST до https://api.imgur.com/oauth2/token. Для использования токена обновления в запросе должны быть указаны следующие параметры:

refresh_token: токен обновления, полученный при обмене кодами авторизации

client_id: идентификатор клиента, полученный при регистрации приложения

client_secret: Секрет клиента, полученный при регистрации приложения.

grant_type: Как определено в спецификации OAuth2, это поле должно содержать значение: refresh_token.

Пока пользователь не отозвал доступ, предоставленный вашему приложению, ответ содержит новый токен доступа. Ответ от такого запроса показан ниже:

{
    "access_token":"5c3118ebb73fbb275945ab340be60b610a3216d6",
    "refresh_token":"d36b474c95bb9ee54b992c7c34fffc2cc343d0a7",
    "expires_in":3600,
    "token_type":"Bearer",
    "account_username":"saponifi3d"
}

Добавьте часть обновления в начале вашего скрипта. Что-то вроде:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.imgur.com/oauth2/token');
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($ch, CURLOPT_POSTFIELDS, [
    'refresh_token' => $refreshToken, // Your refresh_token
    'client_id' => $client_id,
    'client_secret' => $clientSecret, //Your client_secret
    'grant_type' =>  'refresh_token'
]);

//Keep in mind that refreshToken and clientSecret are obtained during registration.

$reply = curl_exec($ch);
curl_close($ch);

$reply = json_decode($reply);
$accessToken = $reply->access_token;
...