2013-06-27 1 views
3

Я пытаюсь удалить определенный элемент из списка FourSquare, изначально я использовал камень Foursquare2, но был отлажен с HTTParty. Я делаю следующий запрос:Ruby on Rails: Foursquare удалить элемент списка дает значение 400 недействительно для идентификатора элемента

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

Я уверен, что список идентификаторов и идентификатор элемента правильно, я проверил, но я получаю следующий ответ:

param_error: Value is invalid for item id (400) 
+0

Предпочитаете ли вы использовать 'item.id' или' item.foursquare_id' в своем URL-адресе? –

+0

@theTinMan Я просто положил item.id, чтобы представить, что я делаю, значение, которое я фактически использую, - это foursquare_id этого элемента. – FletchRichman

+1

Ах. Не делай этого. Будьте конкретны, когда объясняете, потому что небольшие неточности, подобные этим, часто являются реальной проблемой в коде или заставляют вопрос иметь длинную цепочку комментариев, когда мы пытаемся разобраться с реальной проблемой из-за неточного описания. –

ответ

0

Одна вещь, которую я «d попытка заключается в создании URL программно, используя встроенный в URI класс Руби:

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 еще более всеобъемлющий, поэтому посмотрите, если вам нужно больше возможностей/мощности.

+0

Спасибо, это полезно знать. Я попробовал свой исходный код, используя eventId вместо itemId, и он сработал. Я думаю, что проблема заключалась в том, что itemId и placeId совпадают, что не делает конечную точку foursquare очень счастливой. Однако я ценю вашу помощь. – FletchRichman