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

Другие вопросы по тегам