3

我正在尝试从 FourSquare 列表中删除特定项目,我最初使用的是 Foursquare2 gem,但一直在使用 HTTParty 进行调试。我正在执行以下请求:

HTTParty.post("https://api.foursquare.com/v2/lists/#{list.id}/deleteitem?v=20120321&itemId=#{item.foursquare_id}&oauth_token=#{ENV['FOURSQUARE_TOKEN']}")

我确定列表 id 和项目 id 是正确的,我仔细检查了,但我得到以下响应:

param_error: Value is invalid for item id (400)
4

1 回答 1

0

我会尝试的一件事是使用 Ruby 的内置URI类以编程方式构建 URL:

require 'ostruct'
require 'uri'

#
# set up some variables just for example values
#
list = OpenStruct.new('id' => 'some_list_id')
item = OpenStruct.new('foursquare_id' => 'some_foursquare_id')
ENV['FOURSQUARE_TOKEN'] = 'foo'

uri = URI.parse("https://api.foursquare.com/v2/lists/#{ list.id }/deleteitem")
uri.query = URI.encode_www_form(
  'itemId' => item.foursquare_id,
  'oauth_token' => ENV['FOURSQUARE_TOKEN'],
  'v' => 20120321,
)

uri.to_s
=> "https://api.foursquare.com/v2/lists/some_list_id/deleteitem?itemId=some_foursquare_id&oauth_token=foo&v=20120321"

这是一个好主意的原因是某些值必须在 URL 中编码。简单地把它们塞进一根绳子不会为你做到这一点。相反,依靠一个将这些东西考虑在内的类。

Addressable::URI gem 更加全面,因此如果您需要更多功能/功能,请查看那里。

于 2013-06-27T16:29:43.447 回答