読者です 読者をやめる 読者になる 読者になる

ここにタイトルが入ります

デザイン&プログラミングのことも書くし、それ以外のことも書く。

【develop】Railsで検索サービスを作る 〜wikipediaで情報取ってくる編〜

my works ruby web service

情報の宝庫、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編へ続く?