在我的应用程序中,我需要从 2 个单独的(第三方)API收集一些数据,并将它们添加到我的数据库中,以便更好地分析。
两个API具有相同数量的原始数据(例如,当我请求相册 X 的images
时,它会显示该相册中所有图像的数据)
因此,两个API将具有相同数量的images
但不同的字段和字段名称。
在我的应用程序中,我只对从两个API获取 5 个字段的数据感兴趣。我从第一个API 获得field_1
、field_3
和field_5
,而从第二个 API获得field_2
和field_4
。
这就是我现在只从第一个 API 获取字段值的方式(我仍然坚持如何将两个API放在一起)。
## My Image Model
class Image < ActiveRecord::Base
private
def self.add_image_data_to_database(object, field_1, field_2, field_3, field_4, field_5)
object.create(
field_1: field_1,
field_2: field_2,
field_3: field_3,
field_4: field_4,
field_5: field_5,
)
end
end
## My Images Controller
class ImagesController < ApplicationController
first_site_api = "api.website-1.com"
first_api_results = HTTParty.get(first_site_api)
first_api_json = JSON.parse(first_api_results)
second_site_api = "api.website-2.com"
second_api_results = HTTParty.get(second_site_api)
second_api_json = JSON.parse(second_api_results)
first_api_json.each do |data|
Image.add_image_data_to_database(
data['field_1'],
data['field_3'],
data['field_5']
)
end
end
基本上我需要并且想知道如何做的是从第一个 API 获取一些字段值,从第二个 API 获取一些字段值并将它们放在一起,以便我可以将它们全部添加到 1 张图像中。
您可以使用.keep_if
从哈希中获取项目,以便您可以尝试:
# My Image Model
class Image < ActiveRecord::Base
private
def self.add_image_data_to_database(object, hash)
object.create(hash)
end
end
## My Images Controller
class ImagesController < ApplicationController
first_site_api = "api.website-1.com"
first_api_results = HTTParty.get(first_site_api)
hash = JSON.parse(first_api_results)
.keep_if{|k, _v| [ 'field_1', 'field_3', 'field_5'].include?(k)}
second_site_api = "api.website-2.com"
second_api_results = HTTParty.get(second_site_api)
hash.merge( JSON.parse(second_api_results)
.keep_if{|k, _v| ['field_2', 'field_4'].include?(k) }
)
Image.add_image_data_to_database(hash)
end