【develop】Railsで検索サービスを作る 〜wikipediaで情報取ってくる編〜
情報の宝庫、Wikipekiaさんから情報を取ってくるようrubyで実装してみました。
天下のWikipediaさんですから実装例なんて腐るほどあるだろう、と思っていましたが
意外とないのね。
(英語だったらあるのかも)
そのものズバリ「Wikipedia api」なるものがあるようなのですが、
お手軽なwikipekia用のgemを使いました。
〜参考にさせて頂きました!〜
RubyでWikipediaApiを使うUGUISS ブログ
wikipedia-clientを使う
Gemfileに書く場合、
gem 'wikipedia-client'
でbundle install実行。
使い方は超簡単。
例えば私の好きなバンド「GRAPEVINE」を検索する場合は、
page = Wikipedia.find('GRAPEVINE')
で情報を取得できます。
何が返ってきてるかはpageの中身を見ればわかりますが、
page.title #タイトル(検索ワード) page.content #内容
などが取得できます。
詳しくはコチラ。
kenpratt/wikipedia-client · GitHub
wikiclothを使う
で、情報取得できたのはいいんですけど、内容がwiki記法のまんま返ってきます…(*_*;
読める形式に直さねば…
で、上記の参考にさせていただいたエントリにもあるように、
「wikicloth」なるものを使ってhtml形式に出力することにしました。
同じようにGemfileに
gem 'wikicloth'
でbundle install実行でOK。
例えば先ほど取得した内容をHTMLで出力する場合は、
# ↓2014/01/20ご指摘を受けて修正! content = WikiCloth::Parser.new(data: page.content) #page.contentはさっき取得した内容 content_html content.to_html
で変換できます。
他にもいろんな形式に変換できるみたいですよ!
nricciar/wikicloth · GitHub
Sanitizeを使う
完成じゃーと思ったら、表示されるリンクがwikipediaの内部リンクのため
リンクをクリックするとことごとくエラー。
…ほんとはリンク先もうまいことしてあげたいけど、とりあえずはテキストで表示することに。。
「Sanitize」を使って、htmlタグを削除します!
もちろん同じようにGemfileに
gem 'sanitize'
でbundle install実行でOK。
先ほどのHTMLのタグを消すだけなら
content_text = Sanitize.clean(content_html) #content_htmlが変換対象
でできるー
(ちょっとゴミ残ったりするけど)
はい、これでとりあえず取得した内容の表示ができました!?
ただwikipediaから情報を取得した場合、
「〜から転送」とか「複数該当する項目があります」とかになることが多いので、
あまり検索キーワードから情報取得して表示、まあ便利!とはならないですね。
結局詳しいことはリンク先行って見てくださいみたいな(´・ω・`)
次回、youtube編へ続く?