Ruby on Rails - Как объединить выходные данные из 2 отдельных API и добавить их в базу данных - PullRequest
0 голосов
/ 14 октября 2018

В моем приложении мне нужно собрать некоторые данные из 2 отдельных (сторонних) API и добавить их в мою базу данных для записи для лучшего анализа.

Обе API имеют одинаковое количество необработанных файлов (Например, когда я запрашиваю images для альбома X, он покажет мне данные для ВСЕХ изображений в этом альбоме)

Так что оба API будет иметь одинаковое количество images НО различных полей и имен полей.

В моем приложении мне интересны только данные для 5 полей из обоих API .Я получаю field_1, field_3 & field_5 от первого API , в то время как я получаю field_2 & field_4 от второго API .

Вот как я делаю это сейчас, чтобы только получить значение поля из первого 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 изображение.

1 Ответ

0 голосов
/ 14 октября 2018

Вы можете получить элементы из хеша с помощью .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
...