将 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