ちょっと思うところがあって 以前 Perl で作っていた Tweet からブログエントリのコンテンツを自動生成する Perl スクリプトを Ruby で書き直しました。
Ruby はだいぶ昔にかじったことはあるのですが、本格的には使っていなかったので見苦しいコードもあるかもしれません。そういうものがあったら是非教えてください。
下準備
OS X Lion 10.7.4 (Ruby は 1.8.7) をベースにしているので環境によっては若干違うかもしれません。まず、今回の Ruby プログラムを動かすのに必要な準備として以下のコマンドを実行してください。これで Ruby から利用する Twitter のライブラリがインストールされます。
1 |
> sudo gem install --reomte twitter |
あとでもう少し調整しますが、ひとまずはこれだけで事前準備完了です。
補足すると Ruby は RubyGems というライブラリ管理の仕組みを持っています。RumyGems は gem というコマンドを使って必要となるライブラリをインストールすることができます。今回は Twitter Ruby Gems を gem コマンドを使ってインストールしています。
Ruby スクリプトを動かす
次に、以下のファイルをどこか適当なところにダウンロードして展開してください。
1 |
<a href="http://dl.dropbox.com/u/3140056/getTweet.rb.zip">http://dl.dropbox.com/u/3140056/getTweet.rb.zip</a> |
ターミナルを立ち上げて、先ほど展開したファイル (getTweet.rb) のあるディレクトリに移動して、このスクリプトを実行します。
私は、ユーザフォルダの下に temp というフォルダを作りましたので、そこを例に取ってコマンド例を書きます。
1 2 |
> cd ~/temp > ruby getTweet.rb |
このようにターミナルで実行すると、このディレクトリの中に新しいファイル (例えば 20120621_shareTweet.txt のようなファイル) が出来て、コンテンツができていると思います。
あとは、このファイルを MarsEdit に張り込むなりをしてください。
自分用にカスタマイズする方法
それほど難しくないと思いますが、 7 〜 9 行目を直せば、そのまま使えると思います。
1 2 3 |
GetCount = 50 # 取得するツィートの数 ScreenName = "azur256" # Twitterのスクリーン名 REGEXPKeyword = /(.*)\[SHARE\](.*)☞(.*)/i |
ちょっと面倒なのは 9 行目でしょうか。正規表現という方法で自分のツィートのパターンを表現する必要があります。私の場合は、
1 |
コメント [SHARE] ブログのタイトル ☞ URL |
というフォーマットなので
1 |
(.*)\[SHARE\](.*)☞(.*) |
と表現しています。最後の i は大文字と小文字を区別しないというオプションです。[SHARE] でも [share] でも 引っかけてくれるようにするためです(良くテンプレを間違うんですよ…汗)。
あとはコンテンツの整形は 94 行目あたりを修正してみてください。今のコンテンツは、 CSS を定義してあげる必要があります。このまま使うなら、先日ご紹介した CSS を定義してください。
1 2 3 4 5 6 7 8 |
contents += "<div id=\"check\">" contents += "<div id=\"check_img\">" contents += make_capture_tag(url) + "<br /></div>" contents += "<div id=\"check_title\">" contents += "<a href=\"" + url + "\" target=\"_blank\">" contents += title + "</a><br /></div>" contents += "<div id=\"check_comment\">" + comment + "<br /></div>" contents += "</div><br id=\"check_clear\">\n\n" |
実行した時に出る警告メッセージを消す
実行した時に警告が出たと思います(出てないときは無視してください)。動作にはあまり影響はないのですが、気持ち悪いので消すことにしたいと思います。まずは 1 つ目のメッセージ
1 |
Faraday: you may want to install system_timer for reliable timeouts |
system_timer をインストールするように言われているので、インストールします。
1 |
> sudo gem install --remote system_timer |
2 つ目は json のライブラリを変えたほうがイイ、と言っています。
1 |
[WARNING] MultiJson is using the default adapter (ok_json). We recommend loading a different JSON library to improve performance. |
yajl-ruby をインストールします。
1 |
> sudo gem install --remote yajl-ruby |
これで警告は表示されなくなったと思います。
ここも補足すると Twitter Ruby Gems が使っている Faraday というライブラリが system_timer Gem を使うことを推奨しているのでインストールしました。
また、同じように MultiJson Gem が もっと性能の良い JSON のライブラリを使うことを推奨しているので yajl-ruby Gem をインストールしています。
また、同じように MultiJson Gem が もっと性能の良い JSON のライブラリを使うことを推奨しているので yajl-ruby Gem をインストールしています。
参考情報
今回、一番悩んだのが短縮 URL の展開方法。短縮 URL の展開は Ruby のリファレンスにも載っているんですが、このやり方だと Body も取ってきてしまって重たいのです
そこで、こちらを参考にさせていただき Head のみを取って、でもレスポンスコードを見て繰り返すように改造して使っています。
Rubyを勉強してみたい、という方はここが初心者向けとして良いかも
当然、ドットインストールもオススメです。
正規表現について丁寧に解説されています。
複雑なパターンを作成するために用意されたのが正規表現です。正規表現で用意されている構文や特殊な文字を組み合わせる事で、複雑な条件を持つ検索パターンを簡潔に定義することが出来ます。
自己満足ですが、こういうのが楽しいなぁ。
自動化は心がこもらないという向きもおられると思いますが、たとえコンテンツ生成を自動化しても、コメントを出す時と発行する前にエントリを見直す時に心を込めたいな、と思います。
今回の Ruby スクリプトの全文を Gist に上げておきました。
関連するエントリ
最後まで読んでいただきありがとうございます。
左のアイコンをクリックして、このブログを Feedly に登録していただけると嬉しいです
Facebook ページでも情報を発信していますのでよろしかったら「いいね!」をお願いします
RSSリーダへの登録は こちら からどうぞ。
コメントを残す