Blog

毎朝の関連エントリもRubyで自動生成

先日のコンテンツがマニアック過ぎると言われ、調子に乗って今回は毎朝のチェックで作成している「関連するエントリのコンテンツ」を自動生成するスクリプトにチャレンジします(笑)



120621 0002


今まではどうやっていたかというと TextExpander を使って

という検索を実行。

その結果を 1 つずつ Safari で開いてから TextExpander で AppleScript を使って一覧コンテンツを作っていました。



しかし、毎朝完全に定型化された作業をしているんだから自動化できるはず、ということでやってみました。



Webスクレイピング

Web スクレイピングとは、Webコンテンツからデータを抽出するための技術です。たまに悪いイメージで使われることもありますが、正しい目的で使えば非常に有効な技術だと思います。

ちなみに、Wikipedia では スクリーンスクレイピング というキーワードの一つとして Web スクレイピングが記載されています。

スクリーンスクレイピング(Screen scraping)とは、あるプログラムが人間に読みやすい形で出力した結果からデータを抽出する技術のこと。

via: スクリーンスクレイピング | Wikipedia

今回は Google の検索結果を使いたいのですが、Google は検索 API の公開を止めてしまったため、この Web スクレイピングで解決したいと思います。



Rubyでスクレイピング

どうやら Ruby では Mechanize という Gem を使えば良いようです。検索すると Hpricot についての記事も見かけますが、既にメンテナンスされていないようなので、今回は Mechanize Gem を使います。



Mechanize Gem のインストールはターミナルを開いて以下のコマンドを打ち込むだけです。

あとは、この mechanize を使ったコードを書いて、Web ページから必要な要素を取り出すだけ。



何をすれば良いのか?

普段、自分が手動でやっていることを代わりにやらせれば良いので、まずは手動でやっていることを振り返ってみます。
  1. 自分のサイトをGoogleを使って検索する
  2. 検索結果を 1 つずつ開く
  3. 関連エントリのリンクを作る
このうち 2 は TextExpander からアクセスして情報を取得するために開いているだけなので、URL とタイトルが取得できれば必ずしも開く必要はありません。



そのため、Ruby で自動化させるには、こんなやり方になります。

  1. 自分のサイトをGoogleを使って検索する。
  2. 検索結果の一覧を mechanize で解析して URL とタイトルを取り出す
  3. URL とタイトルからリンクを作る
この流れで作ってみたのですが Google の検索結果をとろうとすると、タイトルが省略されてしまっていました。スクレイピングで拾うエレメントを変えてあげてもうまくいかなかったので、ちょっと強引にタイトルを抜き出すようにしました。

それから、タイトルからブログ名を外したり、Blogger は ccTLD の関係で blogger.jp にリダイレクトしてしまうので URL のドメインを blogger.com に変えたりしています。

整理すると以下のような流れに。
  1. 自分のサイトをGoogleを使って検索する。
  2. 検索結果の一覧を mechanize で解析して URLを取り出す
  3. URLを踏んでページ情報からタイトルとURLを抜き出す
  4. タイトルから空白をトリムするのとブログ名を取り除く
  5. URL のドメインを置換する
  6. URL とタイトルからリンクを作る
これを前回ご紹介したソースに組み込んで、一気にコンテンツを生成できるようにしました。

ラクチンラクチン。


ソースはこんな感じになりました。






また何かネタを思いついたら書くと思います。



関連するエントリ





最後まで読んでいただきありがとうございます。

follow us in feedly 左のアイコンをクリックして、このブログを Feedly に登録していただけると嬉しいです


Facebook ページでも情報を発信していますのでよろしかったら「いいね!」をお願いします

RSSリーダへの登録は こちら からどうぞ。

URL
TBURL

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

フェイスブックでのコメント

Return Top