Search code examples
pythonpython-2.7praw

PRAW 4: 400 ERROR when trying to download a users comments


I'm trying to create a Reddit bot that when a username is mentioned it gets the users comments and sends it to an API to analyze them and return a request but when I try to download them it gives me

prawcore.exceptions.BadRequest: received 400 HTTP response

This is the code:

    if text.startswith('/u/PersonalityInsights'):
        print "Mentioned!"
        print comment
        username = text.split()[1]
        print username
        if username.startswith('/u/'):
            validusername = username[3:]
            print validusername
            global redditor
            redditor = bot.redditor(username)
        else:
            global redditor
            redditor = bot.redditor(username)
        file = codecs.open('userscommentsreddit.txt', 'w+', encoding='utf8')
        for comment in redditor.get_comments(limit=None):
            print comment.body

The method I'm using is: get_comments(limit=None)

in PRAW 3 it worked but here it fails. I tried lowercasing the username but it failed with the same error. The account I'm trying to download the comments is mine: /u/UnknownDeveloper

I tried lowering the username but the same error, Replaced the for loop with this: for comment in redditor.comments.new(limit=None): and still an error 400

If you are interested in the full code here is a link to a GitHub gist.

Version of Praw 4.1.0


Solution

  • I know this is almost a year old, and chances are you have moved on or solved this already, but I really like doing research and answering SO questions so here we go!:

    Here is what the 400 error means, so we are on the same page:

    The HTTP 400 Bad Request response status code indicates that the server could not understand the request due to invalid syntax.source

    Now into the actual answer:

    The method I'm using is: get_comments(limit=None)

    in PRAW 3 it worked but here it fails. I tried lowercasing the username but it failed with the same error.

    The get_comments() call was depreciated, and I assume you figured this out based on the fact you also tried the comments.new() function.

    But that doesn't matter at all, because the real issue is in redditor = bot.redditor(username). That call takes the raw username (without the /u/) So the solution to your code would be to remove the /u/ from the username variable before calling redditor = bot.redditor(username), or you could make things simpler by using regex to identify a valid username but only return the part after the /u/.