Скрипт для загрузки картинки на Imgur
Добавлено: 07 сен 2023, 19:22
Для загрузки потребуется аккаунт на Imgur.
Аккаунт требуется даже если хотим загружать картинки как 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
Теперь можем написать такой скрипт
Установка заголовка
Для работы скрипта необходимо установить
Скрипт подготовлен чтоб его использовать для действия в ФМ. Я делал действие Dolphin(KDE)
Теперь разберемся как загружать картинки в альбом своего аккаунта
Тут нам понадобиться Postman(в документации советуют его, только интерфейс поменялся)
Выбираем тип OAuth 2 authorization with a callback URL, заполняем поле Email.
Поле Authorization callback URL заполняем такой ссылкой
Заполняем капчу и нажимаем кнопку submit.
После этого увидим 2 поля Client ID и Client secret.
Тут нам нужны оба поля
Теперь открываем Postman(он требует залогиниться, вроде, без этого им не воспользоваться, хз, у меня просто есть аккаунт)
Создаем новый http-запрос Переходим на вкладку Authorization
Выбираем Type
Далее заполняем поля
Grant Type
Callback URL
Auth URL
Access Token URL
Client ID
Client Secret
И нажимаем кнопку Get New Access Token
Появится окно где необходимо ввести логин/пароль Imgur. Окно закроется.
Нужно подождать и появится еще окно с данными от Imgur.
Оттуда нам понадобится 2 поля: access_token и refresh_token
Теперь можем написать такой скрипт
А перед этим получим id альбома
В полученной портянке(json) найти нужный альбом и посмотреть его ID
Установка заголовка
Для работы скрипта необходимо установить
Скрипт подготовлен чтоб его использовать для действия в ФМ. Я делал действие Dolphin(KDE)
Важно
Когда закончится срок действия
Я делаю таким скриптом
В ответ придет json в нем будут поля access_token и refresh_token.
Полей в ответе будет больше, но нам нужны только эти.
Теперь заменяем старые токены новыми.
И тут в ответе будет поле expires_in со значением
И еще - если потеряли refresh_token то нужно будет снова через Postman делать авторизацию
Аккаунт требуется даже если хотим загружать картинки как 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 делать авторизацию