2

投票APIを機能させようとしていますが、エラー.error.USER_REQUIREDが表示されます。理由はわかりませんが、ログインが正常に行われるため、modhashまたはセッションCookieを間違った方法で送信している必要があると思います

私のコードは次のようになります。

UP = {'user': username, 'passwd': password, 'api_type': 'json',}

client = requests.session()

r = client.post('http://www.reddit.com/api/login', data=UP)

j = json.loads(r.text)

mymodhash = j['json']['data']['modhash']

url = 'http://www.reddit.com/api/vote/.json'
postdata = {'id': thing, 'dir': newdir, 'uh': mymodhash}
vote = client.post(url, data=json.dumps(newdata))

エラー:

{"jquery": [[0, 1, "refresh", []], [0, 2, "attr", "find"], [2, 3, "call", [".error.USER_REQUIRED"]], [3, 4, "attr", "show"], [4, 5, "call", []], [5, 6, "attr", "text"], [6, 7, "call", ["please login to do that"]], [7, 8, "attr", "end"], [8, 9, "call", []]]}
4

2 に答える 2

3

ログインするには、クレデンシャルをプレーンテキストで投稿しないように投稿する必要がありますssl.reddit.comまた、ユーザーエージェントを設定する必要があります。

以下は、/ r/redditdevの提出に投票するための実用的な例です。

import requests
# Login                                                                                                
client = requests.session(headers={'User-Agent': 'Requests test'})
data = {'user': 'USERNAME', 'passwd': 'PASSWORD', 'api_type': 'json'}
r = client.post('https://ssl.reddit.com/api/login', data=data)
modhash = r.json['json']['data']['modhash']

# Vote                                                                                                 
data = {'id': 't3_11mr32', 'dir': '1', 'uh': modhash, 'api_type': 'json'}
r = client.post('http://www.reddit.com/api/vote', data=data)
print r.status_code  # Should be 200                                                                   
print r.json  # Should be {}

また、redditのAPIが内部でどのように機能するかに本当に興味がない限り、PRAWを使用することをお勧めします。

于 2012-10-17T16:11:52.627 に答える
0

withステートメントでセッションオブジェクトを使用できます。

import requests

UP = {'user': username, 'passwd': password, 'api_type': 'json'}
url_prefix = "http://www.reddit.com"
with requests.session() as client:
    client.post(url_prefix + '/login', data=UP)

    <...something else what you want...>
于 2012-10-17T14:24:18.243 に答える