SlideShare una empresa de Scribd logo
1 de 17
Descargar para leer sin conexión
Rebuild DB
enable to search rebuild.fm episodes
@jacoyutorius, 2015 1
Rebuild.fm Database
Rebuild.fmいつも楽しく聴いていますが、
1エピソードあたりの情報量がとても多く、話題が多岐に渡っ
ているので、
「あれ?あの話どのエピソードで話してたっけ・・・?」
となることが多い。
@jacoyutorius, 2015 2
検索できればいいのでは?
@jacoyutorius, 2015 3
作り方
4 RSSから全エピソードのタイトルとShownotesのタイトル
及びURLが取得できるのでそれらをDB化
4 (本当は全ての会話をsearchableにしたいけど)
4 DBを操作したいのとcronを使いたいのでRailsで
4 getで条件を受け取って検索結果をjsonで返す
@jacoyutorius, 2015 4
gem
4 gem "nokogiri"
4 gem "ransack"
4 gem "rxjs-rails"
@jacoyutorius, 2015 5
schema.rb
ActiveRecord::Schema.define(version: 20150705144513) do
create_table "episodes", force: :cascade do |t|
t.string "episode_no"
t.string "title"
t.string "subtitle"
t.text "link"
t.text "description"
t.datetime "pubdate"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "shownotes", force: :cascade do |t|
t.integer "episode_id"
t.string "title"
t.string "url"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
end
@jacoyutorius, 2015 6
Tables
(デフォルトで用意されるid, createdat, updatedat は省略)
@jacoyutorius, 2015 7
rebuild.rake
url = "http://feeds.rebuild.fm/rebuildfm"
list = RSS::Parser.parse(url)
list.items.each do |row|
begin
episode_no = URI.parse(row.link).path.delete("/")
next if Episode.find_by(episode_no: episode_no)
episode = Episode.create(
episode_no: episode_no,
title: row.title,
subtitle: row.itunes_subtitle,
link: row.link,
description: row.description,
pubdate: row.pubDate
)
doc = Nokogiri::HTML.parse(row.description)
doc.css("li").each do |url|
episode.shownotes.create(
title: url.children.text,
url: url.children.css("a").first.attribute("href").value
)
end
ensure
end
end
@jacoyutorius, 2015 8
rake rebuild:db:update
@jacoyutorius, 2015 9
URL
/search
4 title, shownotes_title
@jacoyutorius, 2015 10
Condition
title
4 エピソードのタイトル
shownotes_title
4 shownotesのタイトル
@jacoyutorius, 2015 11
curl https://rebuilddb.herokuapp.com/
search?
title=ruby&shownotes_title=rubykaig
i
@jacoyutorius, 2015 12
[
{
id: null,
episode_no: "10",
title: "10: RailsConf, Ruby 2.0, Rails 4 (mrkn,
r7kamura)",
link: "http://rebuild.fm/10/"
}
]
@jacoyutorius, 2015 13
@jacoyutorius, 2015 14
Console
4 https://rebuilddb.herokuapp.com/
4 Rx.js
4 Web+DB Press vol85のサンプルコードそのまま
@jacoyutorius, 2015 15
URL
https://rebuilddb.herokuapp.com/
Github
https://github.com/jacoyutorius/rebuild_database
@jacoyutorius, 2015 16
Rebuild DB
enable to search rebuild.fm episodes
END
@jacoyutorius, 2015 17

Más contenido relacionado

Más de Yuto Ogi (9)

Rails application template
Rails application templateRails application template
Rails application template
 
Ruby with AWS DynamoDB
Ruby with AWS DynamoDBRuby with AWS DynamoDB
Ruby with AWS DynamoDB
 
DMLを実行するrubyスクリプトをmigrationファイルのように管理するRailsプラグインを作った
DMLを実行するrubyスクリプトをmigrationファイルのように管理するRailsプラグインを作ったDMLを実行するrubyスクリプトをmigrationファイルのように管理するRailsプラグインを作った
DMLを実行するrubyスクリプトをmigrationファイルのように管理するRailsプラグインを作った
 
Web制作者のためのサーバー勉強会@沼津
Web制作者のためのサーバー勉強会@沼津Web制作者のためのサーバー勉強会@沼津
Web制作者のためのサーバー勉強会@沼津
 
Hamamatsurb#30
Hamamatsurb#30Hamamatsurb#30
Hamamatsurb#30
 
Introducing aws ruby sdk
Introducing aws ruby sdkIntroducing aws ruby sdk
Introducing aws ruby sdk
 
20130310 jaws tokai2013
20130310 jaws tokai201320130310 jaws tokai2013
20130310 jaws tokai2013
 
20130112_出張JAWSUG浜松_Androidの会浜松支部
20130112_出張JAWSUG浜松_Androidの会浜松支部20130112_出張JAWSUG浜松_Androidの会浜松支部
20130112_出張JAWSUG浜松_Androidの会浜松支部
 
リーダブルコード 第二章
リーダブルコード 第二章リーダブルコード 第二章
リーダブルコード 第二章
 

RebuildDB -enable to search Rebuild.fm episodes-