Ruby 将JSON键值转换为CSV
我的目标是读取一个CSV文件,从该文件的记录中获取每个ID,将每个ID使用到Meetup API URL中,然后使用JSON响应中的特定值创建一个新的CSV文件 以下是我目前掌握的情况:Ruby 将JSON键值转换为CSV,ruby,json,csv,Ruby,Json,Csv,我的目标是读取一个CSV文件,从该文件的记录中获取每个ID,将每个ID使用到Meetup API URL中,然后使用JSON响应中的特定值创建一个新的CSV文件 以下是我目前掌握的情况: require "net/https" require "uri" require 'csv' require 'json' membersCSV = CSV.foreach('id-members-meetup.csv') do |row| id = row[1] uri = URI.parse("http
require "net/https"
require "uri"
require 'csv'
require 'json'
membersCSV = CSV.foreach('id-members-meetup.csv') do |row|
id = row[1]
uri = URI.parse("https://api.meetup.com/2/members?order=name&member_id=" + id + "&format=json&key=MY_KEY")
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
CSV.open("ghmeetup.csv", "w", {:col_sep => ";"}) do |csv|
JSON.parse(response.body)["other_services"].each do |single|
csv << [single["twitter"]["identifier"], single["facebook"]["identifier"], single["linkedin"]["identifier"]]
end
end
end
有什么想法吗?通过
\use\u ssl=
HTTP连接启用HTTPS
此代码使用Ruby 2.2.0在我的系统上获得成功响应:
require 'net/http' # Not HTTPS
key="..." # Get your personal API key from Meetup
uri = URI.parse("https://api.meetup.com/2/members?order=name&member_id=1&format=json&key=#{key}")
Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
request = Net::HTTP::Get.new uri
response = http.request request
p response.body
end
在Ruby的早期版本中,您需要要求“net/https”
才能使用https。这是
你能在你的系统上试试上面的代码吗
如果行得通,那太好了。如果它不起作用,那么你可以简化你的问题代码,例如省略CSV、循环、JSON等。你试过使用http吗?use_ssl=true?Yep:/仍然有同样的错误,我建议你减少你的问题代码。如果需要“net/http”,然后省略CSV、循环和JSON,会发生什么?例如,如果您尝试只获取一个成员,您会得到什么样的响应主体?如果可以,请编辑更多,以用最少的代码触发erorr。此外,还需要将“net/https”更改为“net/http”。您可能希望省略API密钥。
require "uri"
require 'csv'
require 'json'
require 'net/http'
ghCSV = CSV.foreach('id-gh-meetup.csv') do |row|
id = row[1]
key="KEY"
uri = URI.parse("https://api.meetup.com/2/members?order=name&member_id=#{id}&format=json&key=#{key}")
Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
request = Net::HTTP::Get.new uri
response = http.request request
parseResponse = JSON.parse(response.body)['results'][0]
p "working"
CSV.open("ghmeetup.csv", "w") do |csv|
p "working 2"
parseResponse.each do |single|
p "working 3"
csv << single
end
end
end
end
ghmeetup.rb:15:in `block (2 levels) in <main>': undefined method `[]' for nil:NilClass (NoMethodError)
{
results: [
- {
- other_services: {
twitter: {
identifier: "@HugoAmsellem"
require 'net/http' # Not HTTPS
key="..." # Get your personal API key from Meetup
uri = URI.parse("https://api.meetup.com/2/members?order=name&member_id=1&format=json&key=#{key}")
Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
request = Net::HTTP::Get.new uri
response = http.request request
p response.body
end