我知道Snoo似乎没有维护,但我想使用ruby框架,因为我试图提高我的Ruby技能。
我尝试添加一些功能,从订阅和取消订阅subreddits开始。 Link to API doc.
我的第一次尝试是使用内置的post方法返回404错误
def subscribe(subreddit)
logged_in?
post('/api/subscribe.json',body:{uh: @modhash, action:'sub', sr: subreddit, api_type: 'json'})
end
由于内置post方法给了我404,我决定尝试HTTParty post方法:
def subscribe(subreddit)
logged_in?
HTTParty.post('http://www.reddit.com/api/subscribe.json',body:{uh: @modhash, action:'sub', sr: subreddit, api_type: 'json'})
end
返回:
pry(main)> reddit.subscribe('/r/nba')
=> {"json"=>{"errors"=>[["USER_REQUIRED", "please login to do that", nil]]}}
有没有人知道我是否需要在正文中传递更多信息,或者我是否只是发送了一个格式错误的请求?谢谢!
此外,在运行之前" reddit.subscribe"我已经确认我已使用Cookie,modhash登录,可以访问我的帐户信息等。
答案 0 :(得分:2)
找到解决方案:
def subscribe(subreddit)
#query the subreddit for it's 'about' info and get json back
subreddit_json = self.subreddit_info(subreddit)
#build the coded unique identifier for the targeted subreddit
subreddit_id = subreddit_json['kind'] + "_" + subreddit_json['data']['id']
#send post request to server
server_response = self.class.post('/api/subscribe.json',
body:{uh:@modhash, action:'sub', sr: subreddit_id, api_type:'json'})
end
Reddit API不接受subreddit名称作为传递给' sr'的值(例如sr:' / r / funny')。它需要subreddit" type" (对于subreddits总是' t5')和唯一的论坛ID。传递的参数类似于:sr:" t5_2qo4s"。如果您转到目标subreddit并添加about.json,则可以获得此信息,例如www.reddit.com/r/funny/about.json