Аккаунт требуется даже если хотим загружать картинки как anonymous.
Аккаунт есть, теперь идем на страницу создания(добавления) приложения. Заполняем поле Application name.
Следующее поле Authorization type заполняется в зависимости от того как мы хотим загружать картинки. Как пользователь с авторизацией(тут можно загружать картинки в выбранный альбом в свой аккаунт) или без авторизации(тут даже не знаю куда они загружаются).
Сначала разберемся с более простым вариантом - загрузкой картинок без авторизации.
Выбираем тип Anonymous usage without user authorization и заполняем поле Email.
Заполняем капчу и нажимаем кнопку submit.
Тут столкнемся с ошибкой что необходимо заполнить поле Authorization callback URL - это баг на форме.
Нужно выбрать тип OAuth 2 authorization without a callback URL, а затем снова наш тип Anonymous usage without user authorization.
После это можно нажимать кнопку submit.
После этого увидим 2 поля Client ID и Client secret.
Нам понадобиться только Client ID
Теперь можем написать такой скрипт
Код: Выделить всё
#!/bin/bash
client_id=123abc
file=@$1
response=$(curl -s -H "Authorization: Client-ID $client_id" -H "Expect: " -F "type=file" -F "image=$file" https://api.imgur.com/3/image)
status=$(echo $response | jq -r '.status') #получаем статус ответа
if [[ $status -eq 200 ]]
then
echo $response | jq -r '.data.link' | xclip -selection clipboard #копируем ссылку в буфер обмена
url=$(echo $response | jq -r '.data.link')
notify-send "Отправка в Imgur" "Картинка загружена на Imgur<br>Ссылка скопирована в буфер обмена<br><a href=\"$url\">$url</a>" #показывает сообщение о том что картинку удачно загружена и что ссылка скопирована в буфер обмена
else
error=echo $response | jq -r '.error'
notify-send -u critical "Отправка в Imgur" "Отправка не удалась<br>$error" #показываем сообщение об ошибке
fi
Expect
честно взял тутДля работы скрипта необходимо установить
xclip
и notify-send
client_id
заменить на свойСкрипт подготовлен чтоб его использовать для действия в ФМ. Я делал действие Dolphin(KDE)
Теперь разберемся как загружать картинки в альбом своего аккаунта
Тут нам понадобиться Postman(в документации советуют его, только интерфейс поменялся)
Выбираем тип OAuth 2 authorization with a callback URL, заполняем поле Email.
Поле Authorization callback URL заполняем такой ссылкой
https://www.getpostman.com/oauth2/callback
Заполняем капчу и нажимаем кнопку submit.
После этого увидим 2 поля Client ID и Client secret.
Тут нам нужны оба поля
Теперь открываем Postman(он требует залогиниться, вроде, без этого им не воспользоваться, хз, у меня просто есть аккаунт)
Создаем новый http-запрос Переходим на вкладку Authorization
Выбираем Type
OAuth 2.0
Далее заполняем поля
Grant Type
Authorization Code
Callback URL
https://www.getpostman.com/oauth2/callback
Auth URL
https://api.imgur.com/oauth2/authorize
Access Token URL
https://api.imgur.com/oauth2/token
Client ID
123abc
- заменить на своеClient Secret
123abc
- заменить на своеИ нажимаем кнопку Get New Access Token
Появится окно где необходимо ввести логин/пароль Imgur. Окно закроется.
Нужно подождать и появится еще окно с данными от Imgur.
Оттуда нам понадобится 2 поля: access_token и refresh_token
Теперь можем написать такой скрипт
А перед этим получим id альбома
Код: Выделить всё
curl -s -H "Authorization: Client-ID 123abc" https://api.imgur.com/3/account/login/albums
Client-ID
и login
подставить своиВ полученной портянке(json) найти нужный альбом и посмотреть его ID
Код: Выделить всё
#!/bin/bash
client_id=123abc
client_secret=123abc
access_token=123abc
album_hash=123abc
file=@$1
response=$(curl -s -H "Authorization: Bearer $access_token" -H "Expect: " -F "type=file" -F "image=$file" -F "album=$album_hash" https://api.imgur.com/3/image)
status=$(echo $response | jq -r '.status')
if [[ $status -eq 200 ]]
then
echo $response | jq -r '.data.link' | xclip -selection clipboard
url=$(echo $response | jq -r '.data.link')
notify-send "Отправка в Imgur" "Картинка загружена на Imgur<br>Ссылка скопирована в буфер обмена<br><a href=\"$url\">$url</a>"
else
error=echo $response | jq -r '.error'
notify-send -u critical "Отправка в Imgur" "Отправка не удалась<br>$error"
fi
Expect
честно взял тутДля работы скрипта необходимо установить
xclip
и notify-send
client_id
заменить на свойclient_secret
заменить на свойaccess_token
заменить на свойalbum_hash
заменить на свойСкрипт подготовлен чтоб его использовать для действия в ФМ. Я делал действие Dolphin(KDE)
Важно
access_token
выдается на время, это время можно увидеть в Postman, когда получили данные от Imgur поле expires
(не помню точно). Если правильно помню там было 3600. В каких единицах хз, подозреваю что в секундах.Когда закончится срок действия
access_token
нужно получить новый.Я делаю таким скриптом
Код: Выделить всё
#!/bin/bash
client_id=123abc
client_secret=123abc
refresh_token=123abc
responce=$(curl -s -F "refresh_token=$refresh_token" -F "client_id=$client_id" -F "client_secret=$client_secret" -F "grant_type=refresh_token" https://api.imgur.com/oauth2/token)
new_access_token=$(echo $responce | jq -r '.access_token')
new_refresh_token=$(echo $responce | jq -r '.refresh_token')
if [[ -z "$new_access_token" ]]
then
echo $response
else
echo "new_access_token: $new_access_token"
echo "new_refresh_token: $new_refresh_token"
fi
Полей в ответе будет больше, но нам нужны только эти.
Теперь заменяем старые токены новыми.
И тут в ответе будет поле expires_in со значением
315360000
(если в секундах - то это 10 лет) И еще - если потеряли refresh_token то нужно будет снова через Postman делать авторизацию