Bash/Curl пример карманного входа в систему oAuth
Я пытаюсь получить простой скрипт bash, работающий с карманным API. Все, что я хочу сделать, это проверить подлинность с помощью кармана и загрузить мой список статей (на самом деле, только количество)
Меня немного смущает то, как работает процесс oauth.
- Я зарегистрировал свое приложение с карманным API и получил потребительский ключ
- это помечено как "развитие" - я не уверен, если это важно.
Что меня смущает, так это то, что поток oAuth работает с его перенаправленным Uris, и он работает только с графическим интерфейсом (т. Е. С браузером). Возможно ли это сделать с помощью скрипта bash?
Вот что я имею ниже. это работает до тех пор, пока у меня не будет ЖЕТОН, но тогда я не уверен, что делать дальше.
#!/bin/bash
REDIR="redirect_uri=pocketapp1234:authorizationFinished"
KEY=21004-xxxxxxabcabcabc # you can assume this is the consumer key pocket issues for my app.
CODE=`curl -X POST --data "consumer_key=$KEY&$REDIR" https://getpocket.com/v3/oauth/request`
echo "OK - code is $CODE"
TOKEN=$(echo $CODE | awk -F"=" '{print $2}')
echo "OK - token is $TOKEN"
AUTH="consumer_key=$KEY&$CODE"
# This line seems not to work
curl -v "https://getpocket.com/auth/authorize?request_token=$TOKEN&$REDIR"
1 ответ
Да, браузерная часть обязательна. На этапе авторизации есть страница от getpocket.com, предлагающая пользователю войти в систему и авторизовать скрипт bash для доступа к учетной записи Pocket пользователя.
Вы можете обратиться к шагу 3 из Документов Pocket API.
Это скрипт Python v3.8, который я использую и, похоже, работает.
#!/usr/bin/env python
from os import environ as env
import requests
import webbrowser
def authorize_pocket_app():
data = {
"consumer_key": env['POCKET_CONSUMER_KEY'],
"redirect_uri": env['POCKET_APP_NAME'],
}
resp = requests.post(url="https://getpocket.com/v3/oauth/request", data=data)
code = resp.text.split("=")[1]
webbrowser.open(f"https://getpocket.com/auth/authorize?request_token={code}"
"&redirect_uri=https://duckduckgo.com")
input("Authorize %s app in the browser, then click enter" % env['POCKET_APP_NAME'])
get_token(code)
def get_token(code):
resp = requests.post(
url="https://getpocket.com/v3/oauth/authorize",
data={
"consumer_key": env["POCKET_CONSUMER_KEY"],
"code": code,
})
token = resp.text.split("&")[0].split("=")[1]
print("Secret token:", token)
if __name__ == "__main__":
authorize_pocket_app()
Чтобы использовать его как есть, вам необходимо установить requests
внешняя библиотека и экспорт POCKET_CONSUMER_KEY
а также POCKET_APP_NAME
в среде вашей оболочки. Например
pip install requests
export POCKET_CONSUMER_KEY=xxx-yyy-zzz
export POCKET_APP_NAME=my-pocket-app
python <filename>.py
HTH