使用 Wikipedia-Client Gem 更新 Rails 数据库
Using Wikipedia-Client Gem to Update Rails Database
我的ruby和Rails有点生疏了。我的数据库中有一个名为 institutes
的 table,其中填充了一些列。我想使用 Wikipedia-Client gem 来填充其他一些内容。我想使用 name
属性在维基百科上查找页面,然后使用 page.summary
作为 table 中的 description
属性,使用 page.image_urls.first
作为 [=18] =] 属性。目前,我正在努力想办法解决这个问题。
我当前的代码是:
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
我显然在选择和使用名称属性来查找维基百科页面方面做错了,但无法完全解决。我认为即使我正确地提取了名称,它也不会为正确的 id 分配任何内容。
如果维基百科搜索中名称开头的 "The" 存在于 :name
中,如果还有一种方法可以删除它,那也会有所帮助,因为似乎有些机构会删除它在维基百科上。
你可以尝试使用这样的东西:
#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
我的ruby和Rails有点生疏了。我的数据库中有一个名为 institutes
的 table,其中填充了一些列。我想使用 Wikipedia-Client gem 来填充其他一些内容。我想使用 name
属性在维基百科上查找页面,然后使用 page.summary
作为 table 中的 description
属性,使用 page.image_urls.first
作为 [=18] =] 属性。目前,我正在努力想办法解决这个问题。
我当前的代码是:
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
我显然在选择和使用名称属性来查找维基百科页面方面做错了,但无法完全解决。我认为即使我正确地提取了名称,它也不会为正确的 id 分配任何内容。
如果维基百科搜索中名称开头的 "The" 存在于 :name
中,如果还有一种方法可以删除它,那也会有所帮助,因为似乎有些机构会删除它在维基百科上。
你可以尝试使用这样的东西:
#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