【问题标题】:Integrating python-decouple with PRAW?将 python-decouple 与 PRAW 集成?
【发布时间】:2019-09-19 00:47:30
【问题描述】:

我一直在尝试查看是否可以使用 python-decouple 将我的机器人凭据放在单独的 .env 文件中。

Auth 方法基本上就在 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 身份验证错误。我回去工作,用实际详细信息的字符串替换解耦配置,但它似乎没有贯彻执行,并且发生的错误似乎是随机的,具体取决于我取出的内容和时间。

这是解耦函数的问题吗?

谢谢。

【问题讨论】:

  • 当 Reddit 返回错误时,您是否在窗口中尝试:reddit.statuspage.io
  • 不,这是不久前 Reddit 上线的时候。

标签: python-3.x praw decoupling python-decouple


【解决方案1】:

我一直在尝试查看是否可以使用 python-decouple 将我的机器人凭据放在单独的 .env 文件中。

为什么不使用praw.ini 文件?这在 PRAW 文档中记录了 here。这是一种将 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

【讨论】:

  • 感谢您的回答,尽管我更好奇解耦如何以一种使其无法工作的方式处理变量,即使自述文件提到它们应该如何作为字符串返回,所以我的好奇心。
  • @MatStornel 我无法重现 python-decouple not 与 PRAW 一起使用的任何方式,因此我无法回答您的问题。你能举一个它不起作用的例子吗?
  • 在我配置用户名时似乎发生了针对 invalid_grant 的 OAuthExeception。我怀疑这与用户名包含破折号和/或下划线这一事实有关,因为 auth 似乎接受带有空格的 user_agent 变量,其余部分。
  • @MatStornel 这对我来说听起来像是关于您的特定凭据的东西。例如,如果您的密码是 Hello_there-world!,请尝试 print(config('password') == 'Hello_there-world!') 以查看 python-decouple 是否正确存储了您的密码。
猜你喜欢
  • 2012-05-14
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 2011-01-12
相关资源
最近更新 更多