2017-02-16 178 views
1

我一直在试图学习Python这几天,我遇到了一个问题,我不太清楚如何解决。我正在尝试制作一个简单的reddit机器人并学习praw reddit API。当我运行下面的机器人:SSL认证验证失败

import praw 
import time 

r = praw.Reddit('testmachine11968986531') 
test = r.submission(id="5u7q8x") 

comment_user = set() # to avoid duplicates 

for i in xrange(0,10): # Run the loop 10 times 
    #comments = r.comments(submission) 
    for comment in test.comments: 
     body = comment.body.lower() 
     if body.find("think") != -1 or body.find("please") != -1: 
      comment_user.add(comment.author) 
    #time.sleep(120) # Sleep for 2 minutes 

print "Here are some comments:" 
for user in polite_users: 
    print user 

我得到一个错误:

RequestException: error with request [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)

我周围戳,看到我可以在一个get插入类似

verify = False 

()类的实例,但我不确定这是否会在这个特定的例子中起作用。一切工作正常我相信 - 我可以使用PIP就好了,等等。

任何帮助,将不胜感激。万分感谢。

编辑:完整的错误回溯是

Traceback (most recent call last): 
    File "C:\Users\**\Desktop\Bottest\startBot.py", line 16, in <module> 
    for comment in test.comments: 
    File "C:\Python27\lib\site-packages\praw\models\reddit\base.py", line 31, in __getattr__ 
    self._fetch() 
    File "C:\Python27\lib\site-packages\praw\models\reddit\submission.py", line 133, in _fetch 
    'sort': self.comment_sort}) 
    File "C:\Python27\lib\site-packages\praw\reddit.py", line 320, in get 
    data = self.request('GET', path, params=params) 
    File "C:\Python27\lib\site-packages\praw\reddit.py", line 404, in request 
    params=params) 
    File "C:\Python27\lib\site-packages\prawcore\sessions.py", line 133, in request 
    self._authorizer.refresh() 
    File "C:\Python27\lib\site-packages\prawcore\auth.py", line 328, in refresh 
    password=self._password) 
    File "C:\Python27\lib\site-packages\prawcore\auth.py", line 138, in _request_token 
    response = self._authenticator._post(url, **data) 
    File "C:\Python27\lib\site-packages\prawcore\auth.py", line 29, in _post 
    data=sorted(data.items())) 
    File "C:\Python27\lib\site-packages\prawcore\requestor.py", line 48, in request 
    raise RequestException(exc, args, kwargs) 
RequestException: error with request [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661) 
+0

你在哪里得到错误? –

+0

@ claymore-adrendamar我继续编辑它在身体 – AON

+0

这可能是有帮助的。但不知道。 http://stackoverflow.com/questions/27835619/ssl-certificate-verify-failed-error – Marviel

回答

0

您的问题可能驻留在您user_agent内。 Reddit需要一个独特的user_agent。你user_agent是你如何唯一识别你的脚本。 Reddit API wiki页面(https://github.com/reddit/reddit/wiki/API)对user_agent字符串和其他所有内容都有官方和更新的建议。阅读它强烈建议。

此外,您的user_agent字符串必须从来没有包含字符串bot。这意味着你前人的精力更改行:

r = praw.Reddit('bot1') 

到这样的事情:

r = praw.Reddit('Name of your bot [version] by [Your Reddit username or your name]') 

[你可能需要阅读关于此事的精彩教程https://praw.readthedocs.io/en/v3.6.0/pages/getting_started.html#connecting-to-reddit]

否则,你可以添加此创建对象后:

r.config._ssl_url = None 

不建议这意味着所有的信息可以通过一个中间人

被拦截,你也可以:

附加

r.login('bot_username', 'bot_password') 

r = praw.reddit([...])

变化test = r.submission(id="5u7q8x")test = r.get_submission(submission_id='5u7q8x')

和添加后:

test = praw.helpers.flatten_tree(test.comments) 

你现在应该能够遍历test而不是test.comments

如果这不起作用,我不知道什么可以。

+0

我确实看到一个_recommendation_不在用户代理中使用** bot **,但我认为这只会导致问题,当机器人将张贴/发送代替刚刚阅读和打印回给我。无论如何,我试图改变它,并导致相同的错误。我更新了身体以反映它 – AON

+0

也是我的第一个简单文件:'import praw reddit = praw.Reddit(client_id ='xx', client_secret =“xx”,password ='xx', user_agent ='testmachine11968986531' ,用户名='xx') 提交reddit.front.hot(): 打印(提交)'导致了相同的错误 – AON

+0

我更新了我的答案与另一个*修复*问题 –