Ruby on Rails - 如何合并来自 2 个独立 API 的输出数据并将它们添加到数据库中



在我的应用程序中,我需要从 2 个单独的(第三方)API收集一些数据,并将它们添加到我的数据库中,以便更好地分析。

两个API具有相同数量的原始数据(例如,当我请求相册 X 的images时,它会显示该相册中所有图像的数据)

因此,两个API将具有相同数量的images不同的字段和字段名称。

在我的应用程序中,我只对从两个API获取 5 个字段的数据感兴趣。我从第一个API 获得field_1field_3field_5,而从第二个 API获得field_2field_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

最新更新