2014-10-07 81 views
3

我知道Snoo似乎沒有維護,但我想使用ruby框架,因爲我試圖提高我的Ruby技能。(REDDIT)嘗試通過API訂閱subreddits時出錯

我想添加一些功能,從訂閱和取消訂閱subreddits開始。 Link to API doc.

我第一次嘗試用內置的崗位方法,返回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]]}} 

有誰知道我f我需要在身體中傳遞更多信息,或者如果我只是發送格式錯誤的請求?謝謝!

而且在運行「reddit.subscribe」我已經驗證了我在登錄時用一個cookie,一個modhash之前,可以訪問我的帳戶信息等

回答

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

相關問題