将 json 保存到模型和数据库
Save json to a model and db
我正在尝试制作一个自定义 rake 任务,该任务使用 Itunes API 按名称搜索艺术家,如果存在,它将把数据存储到数据库中。
我需要两件事:1) 检查艺术家是否存在(我如何检查响应)和 2) 如果存在,使用 ActiveRecord 创建它。
我不知道如何实现它,这是我的代码到目前为止的样子。
提前致谢。
require 'net/http'
require 'json'
task :artist,[""] do |t, args|
request = ITunesSearchAPI.search(:term => "#{args}")
puts request
end
首先,不要使用请求这个词,它是一个保留词,可能会给您带来麻烦。您可以试试 result
。
如果没有找到任何内容,您将返回一个空数组。
所以您只需要检查
result.empty?
如果基于艺术家姓名,搜索会非常简单
unless Artist.exists?(name: result[0]["artistName"])
Artist.create(name: result[0]["artistName", itunes_id: result[0]["artistId"])
end
因为 Apple 使用匹配算法,您的结果集总是有可能 return 多个条目,我会先仔细检查它是否是您想要的那个。
1) check if an artist exists (how can I check the respone)
request = ITunesSearchAPI.search(:term => "#{args}")
puts request
这将取决于请求的内容或当 iTunes 上没有艺术家时 ITunesSearchAPI.search
方法的行为方式。通常,API return JSON 中的空数组。因此,您可以简单地检查结果数组是否为空。
# Provided request['artists'] is an array
if request['artists'].empty?
# no artists
else
# there are artists
end
虽然我们正在处理它,但您不必插入 args
,只需将它们打印出来或使用 .to_s
方法(如果您想将其转换为 String
) .
ITunesSearchAPI.search(:term => args.to_s)
2) create it with ActiveRecord if it exists.
您可以在没有 Rails 的情况下使用 ActiveRecord。已经 covered many times。它归结为安装 active_record gem,包括它,建立连接并继承自 ActiveRecord::Base
。
require 'active_record'
require 'sqlite3'
require 'logger'
ActiveRecord::Base.logger = Logger.new('db.log')
ActiveRecord::Base.establish_connection(
adapter: 'sqlite3',
database: 'db/mydb.sqlite3',
timeout: 5000,
pool: 5
)
class YourModel < ActiveRecord::Base
end
我正在尝试制作一个自定义 rake 任务,该任务使用 Itunes API 按名称搜索艺术家,如果存在,它将把数据存储到数据库中。
我需要两件事:1) 检查艺术家是否存在(我如何检查响应)和 2) 如果存在,使用 ActiveRecord 创建它。
我不知道如何实现它,这是我的代码到目前为止的样子。 提前致谢。
require 'net/http'
require 'json'
task :artist,[""] do |t, args|
request = ITunesSearchAPI.search(:term => "#{args}")
puts request
end
首先,不要使用请求这个词,它是一个保留词,可能会给您带来麻烦。您可以试试 result
。
如果没有找到任何内容,您将返回一个空数组。
所以您只需要检查
result.empty?
如果基于艺术家姓名,搜索会非常简单
unless Artist.exists?(name: result[0]["artistName"])
Artist.create(name: result[0]["artistName", itunes_id: result[0]["artistId"])
end
因为 Apple 使用匹配算法,您的结果集总是有可能 return 多个条目,我会先仔细检查它是否是您想要的那个。
1) check if an artist exists (how can I check the respone)
request = ITunesSearchAPI.search(:term => "#{args}")
puts request
这将取决于请求的内容或当 iTunes 上没有艺术家时 ITunesSearchAPI.search
方法的行为方式。通常,API return JSON 中的空数组。因此,您可以简单地检查结果数组是否为空。
# Provided request['artists'] is an array
if request['artists'].empty?
# no artists
else
# there are artists
end
虽然我们正在处理它,但您不必插入 args
,只需将它们打印出来或使用 .to_s
方法(如果您想将其转换为 String
) .
ITunesSearchAPI.search(:term => args.to_s)
2) create it with ActiveRecord if it exists.
您可以在没有 Rails 的情况下使用 ActiveRecord。已经 covered many times。它归结为安装 active_record gem,包括它,建立连接并继承自 ActiveRecord::Base
。
require 'active_record'
require 'sqlite3'
require 'logger'
ActiveRecord::Base.logger = Logger.new('db.log')
ActiveRecord::Base.establish_connection(
adapter: 'sqlite3',
database: 'db/mydb.sqlite3',
timeout: 5000,
pool: 5
)
class YourModel < ActiveRecord::Base
end