Использование Wikipedia-Client Gem для обновления базы данных Rails

Мой ruby ​​​​и Rails немного заржавел. У меня есть таблица в моей базе данных под названием institutes, в которой некоторые столбцы заполнены. Я хочу использовать гем Wikipedia-Client, чтобы заполнить некоторые другие. Я хочу использовать атрибут name, чтобы найти страницу в Википедии, затем использовать page.summary для атрибута description в моей таблице и page.image_urls.first для атрибута picture. На данный момент я изо всех сил пытаюсь понять, как бы я это сделал.

Мой текущий код:

require 'Wikipedia'
Institute.each do |institute|
   school = institute.pluck(:name)
   page = Wikipedia.find(school)
   description = page.summary
   picture = page.image_urls.first
   Institute.update!(description: description, picture: picture)
end

Я явно делаю что-то не так, когда выбираю и использую атрибут name для поиска страницы Википедии, но не могу разобраться. Я думаю, даже если бы я правильно выбрал имя, оно ничего не присвоило бы правильному идентификатору.

Если есть также способ удалить «The» в начале имени в поиске в Википедии, если он существует в :name, это также было бы полезно, поскольку кажется, что некоторые институты опускают это в Википедии.


person Dave C    schedule 21.01.2017    source источник


Ответы (1)


Вы можете попробовать использовать что-то вроде этого:

#use https://github.com/kenpratt/wikipedia-client
require 'wikipedia'

#select all Institutes through AR model
Institute.all.each do |institute|
  #'institute' is an object, so we can get its name by dot operator
  school = institute.name

  #try to find school as is
  #then try to find without 'The'
  #and go ahead only if page exists
  page = Wikipedia.find(school)
  page = Wikipedia.find(school[3..-1].strip) if page.content.nil? and school[0..2].downcase == 'the'
  next if page.content.nil?

  description = page.summary
  picture = page.image_urls.first
  #update Institute object
  institute.update!(description: description, picture: picture)
end
person Pavel K    schedule 21.01.2017
comment
Это сработало как шарм. Я был недалек, но большое спасибо за комментарии в коде. Я доберусь туда однажды! - person Dave C; 21.01.2017