Интеграция python-decouple с PRAW?

Я пытался понять, могу ли я использовать python-decouple для размещения учетных данных бота в отдельном файле .env.

Метод аутентификации в основном прямо из praw doc:

    reddit = praw.Reddit(
        client_id=config('CLIENT_ID'),
        client_secret=config('CLIENT_SECRET'),
        password=config('PASSWORD'),
        user_agent=config('USER_AGENT'),        
        username=config('USERNAME')
    )

Однако всякий раз, когда я пытаюсь это сделать, он, кажется, возвращает ошибку аутентификации 403. Я возвращаюсь назад, заменяя конфиги разделения строками фактических деталей, но, похоже, это не выполняется, и возникающие ошибки кажутся случайными в зависимости от того, что и когда я вынимаю.

Это проблема с тем, как работает развязка?

Спасибо.


person Mat Stornel    schedule 19.09.2019    source источник
comment
Вы пытались в окне, когда Reddit возвращал ошибки: reddit.statuspage.io   -  person Anon Coward    schedule 19.09.2019
comment
Нет, это было давно, когда работал Reddit.   -  person Mat Stornel    schedule 19.09.2019


Ответы (1)


Я пытался понять, могу ли я использовать python-decouple для размещения учетных данных бота в отдельном файле .env.

Почему бы не использовать файл praw.ini? Это задокументировано здесь в PRAW. документация. Это формат хранения учетных данных Reddit в отдельном файле от вашего кода. Например, файл praw.ini может выглядеть так:

[bot1]
client_id=Y4PJOclpDQy3xZ
client_secret=UkGLTe6oqsMk5nHCJTHLrwgvHpr
password=pni9ubeht4wd50gk
username=fakebot1

[bot2]
client_id=6abrJJdcIqbclb
client_secret=Kcn6Bj8CClyu4FjVO77MYlTynfj
password=mi1ky2qzpiq8s59j
username=fakebot2

Затем вы используете определенные учетные данные в своем коде следующим образом:

import praw

reddit = praw.Reddit('bot2', user_agent='myBot v0.1')
print('Logged in as', reddit.user.me())

Думаю, это лучшее решение для работы с учетными данными PRAW.


Однако, если вы действительно хотите сделать это с помощью python-decouple, вот рабочий пример:

Содержимое файла .env:

username=k8IA
password=REDACTED
client_id=REDACTED
client_secret=REDACTED

Содержимое файла connect.py:

import praw

from decouple import config

reddit = praw.Reddit(username=config('username'),
        password=config('password'),
        client_id=config('client_id'),
        client_secret=config('client_secret'),
        user_agent='myBot v0.1')

print('Logged in as', reddit.user.me())

Вывод при запуске python3 connect.py:

Logged in as k8IA
person jarhill0    schedule 23.09.2019
comment
Спасибо за ответ, хотя мне было больше любопытно, как decouple обрабатывает переменные таким образом, что это не работает, хотя в файле readme упоминается, как они должны возвращаться в виде строк, и поэтому мое любопытство. - person Mat Stornel; 24.09.2019
comment
@MatStornel Мне не удалось воспроизвести, как python-decouple не работал с PRAW, поэтому я не могу ответить на ваш вопрос по этому поводу. Можете ли вы привести пример, в котором это не работает? - person jarhill0; 25.09.2019
comment
Кажется, что OAuthExeception для invalid_grant возникает, когда я настраиваю имя пользователя. Я подозреваю, что это связано с тем, что имя пользователя включает тире и/или подчеркивание, потому что авторизация, похоже, принимает переменную user_agent с пробелами и все остальное. - person Mat Stornel; 25.09.2019
comment
@MatStornel Мне кажется, что это что-то о ваших конкретных учетных данных. Если, например, ваш пароль Hello_there-world!, попробуйте print(config('password') == 'Hello_there-world!'), чтобы увидеть, правильно ли python-decouple сохраняет ваш пароль. - person jarhill0; 25.09.2019