0

我编写了一个简短的 Ruby 脚本,它可以很好地将 ASANA 任务导出到 csv 中,但是它需要一段时间才能运行,因为我必须为每个项目中的每个任务执行 GET。我找到了一种使用 opt_expand 一次获取每个项目的所有任务数据的方法,然后将其编号为“获取”的一部分。然而,在 curl 中工作的 opt_expand 代码在 Ruby 中不起作用,它只是忽略了 expand 命令。

任何帮助将不胜感激,

正常卷曲代码[snippet1]:

curl -u <token>: https://app.asana.com/api/1.0/projects/<project_id>/tasks

工作 opt_expand curl 代码[snippet2]:

curl -u <token>: https://app.asana.com/api/1.0/projects/<project_id>/tasks?opt_expand=.

普通 Ruby 代码[snippet3]:

uri = URI.parse("https://app.asana.com/api/1.0/projects/<project_id>")

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
...

尽管使用 opt_expand,但返回与片段 3 相同的损坏的 Ruby 代码

uri = URI.parse"(https://app.asana.com/api/1.0/projects/<project_id>/tasks?opt_expand=.
")

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
...
4

2 回答 2

0

就像格雷格说的那样,你没有将参数传递给服务器。Ruby URI 解析不接受参数。尝试这样的事情:

params = { :opt_expand => 'your opt here' }
uri = URI.parse("https://app.asana.com/api/1.0/projects/<project_id>/tasks")
http = Net::HTTP.new(uri.host, uri.port)
...
uri_with_params = "#{uri.path}?".concat(params.collect { |k,v| "#{k}=#{CGI::escape(v.to_s)}" }.join('&')) if not params.nil?
req = Net::HTTP::Get.new(uri_with_params, header)
req.basic_auth(key, password)
res = http.start { |http| http.request(req) }
于 2012-06-23T05:39:36.503 回答
0

如果没有看到您收到的错误消息(或服务器返回消息),这有点难以回答。

但是,请记住,Net::HTTP 是低级的,用于这样一个简单的任务可能有点矫枉过正。您是否考虑过使用其他更容易使用的库(即:rest-client或 Faraday)。例如:

require 'rest_client'

response = RestClient.get "https://app.asana.com/api/1.0/projects/<project_id>"
if response.code == 200
  # process answer
end
于 2012-06-20T11:48:47.323 回答