0

我使用 rails 和 crunchbase api 来拉取公司的信息,我整晚都在与这个错误作斗争。它成功完成了一个请求,在构建第二个请求后它崩溃了,我收到了这个错误:

Error/Users/Rich/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/2.0.0/psych.rb:205:in `parse':
(<unknown>): control characters are not allowed at line 1 column 1 (Psych::SyntaxError)

我可以根据需要发布尽可能多的代码。非常感谢所有帮助,因为我是红宝石新手。

def get_data(company_links)
  while i < company_links.length
    puts "USING URL #{URL}#{company_links[i]}.js?#{API_Key}"
    resp = RestClient.get("#{URL}#{company_links[i]}.js?#{API_Key}")
    arr = Crack::JSON.parse(resp)
    i += 1
  end
end

调用方法

links_array = ["dropbox","twitter"]
get_data(links_array)

找到编辑答案 真的不知道它为什么起作用,但我没有抱怨它已解决。感谢所有提供帮助的人,我真的很感激:)

def get_data(links_array)
    links_array.each 做|公司|
    提出“使用 URL #{URL}#{company}.js?#{API_Key}”
    resp = RestClient.get("#{URL}#{company}.js?#{API_Key}")
    arr = JSON.parse(resp)
    放 arr["name"]
  结尾
结尾

4

2 回答 2

2

看起来您的问题在于您要返回的 JSON,而不是获取它。诊断:

def get_data(company_links)
  company_links.each do |company|
    puts "USING URL #{URL}#{company}.js?#{API_Key}"
    resp = RestClient.get("#{URL}#{company}.js?#{API_Key}")
    puts "RETURNS: #{resp}"
    arr = Crack::JSON.parse(resp)
  end
end

也试试

links_array = ["twitter","dropbox"]
get_data(links_array)

看看它是否在第一个或第二个请求上失败。

编辑:我打赌你在 JSON 字符串的开头有一些 Crack/Psych 不喜欢的字符,它是一个“控制字符”;)

Edit2:如果打印到控制台的 JSON 有效,请尝试arr = Crack::JSON.parse(resp.to_s)arr = Crack::JSON.parse(resp.inspect). 我对这里的很多重要细节都很模糊。

于 2013-05-31T07:25:27.453 回答
1

我不确定为什么会发生这种情况,但是您可以考虑使用线程来运行多个请求,而不是使用 while 循环。我个人认为循环请求不是一个好主意。

看看这个例子:

Ruby on Rails 同时发出多个 HTTP 请求?

于 2013-05-31T07:05:40.877 回答