2010/05/29

ブログへの投稿をmixi日記へ投稿するスクリプト


mixi日記をやめてブログへのリンクを貼るようにできますが、それじゃあmixi日記がもったいないのでブログへの投稿を自動的にmixi日記に投稿できないかなと考えました。できればリンク貼るだけじゃなくて本文も少し貼って、つづきはこちらとリンクでブログに誘導するのが理想。が、色々ネット上を探してみてもすぐ使えそうなものは見つかりませんでした。メールで投稿するのはありましたが、なんか面白くない。じゃあ自分で作ってみようと考えて3日くらい、やっとできました。

仕組みとしては、このブログのRSSを定期的にチェックして新しい投稿があればそれをmixi日記に書き込むというシンプルなものです。僕はシェルスクリプトしかわからない(しかも全然詳しくない)ので、今回もシェルのコマンドのみで作りました(いくつか自宅サーバでTwitterのbotを動かしてますが、全部シェルスクリプトですw)。grepとかsedとかawkをパイプするしかできない僕ですが、なんとかなるもんですね。ちなみにUbuntu上で動かしてます。

RSSを取り込む部分ですが、最初はwgetでいいかと思ったのですがちょっと探したらコマンドラインのRSSリーダーが見つかったのでそれを使いました。rsstailです。aptで簡単に導入できます。

mixiに書き込む部分ですが、APIがないようなのでこっちもwgetで書こうと思ったのですが、フリーのパフォーマンス測定ツールとして有名なJmeterがコマンドラインから使えるのでこちらを使いました。wgetだとcookieの取扱いとか面倒なので。Jmeterはjavaが入ってればzip落として来て解凍すればすぐ動きます。10.04ならaptでもOK。

まずJmeterのProxy機能を使って実際のmixi日記への書き込みをキャプチャします。それを利用してテストシナリオを作り、*.jmxファイルを保存します。コマンドラインから-n -t <シナリオ>.jmxでそれを呼び出して使います。コマンドラインからmixi日記の書き込みができるようになれば、もう半分完成です。ちなみにJmeterは仕事のパフォーマンステストで半年位毎日使ってたので、シナリオ作成はお手の物です。HTTP Cookieマネージャを使いましょう。

次にrsstailでRSSを確認し、mixi日記に投稿する内容を作ります。僕は rsstail -1 -d -p -l -b 600 -n 10 -H -u $rss_url、って感じで投稿時間、本文600バイト、最新10の投稿を取得しています。取得したら各投稿の投稿時間をmd5でハッシュ化し保存しておきます。次回以降はそのハッシュリストと比較し、新しい投稿だけを処理するようにしました。この辺の作りはTwitterの@otchyに教わったperlスクリプトの動きを何となく真似しました。でも僕perlわからないから。。。投稿時間だけをハッシュに使ったのは、ちょくちょく本文とかタイトル修正する癖があるからです。ここは適宜。

で、あとはrsstailでmixi日記のタイトルと本文を変数にしてJmeterに渡せばOKです。Jmeterへコマンドラインから変数の渡し方がわからなかったのですが、これまたTwitterで@sunflower09さんから引数での渡し方を教えてもらい解決しました。jmeter.sh -n -s <シナリオ>.jmx -JParam1=xxx -JParam2=yyyとすればOKです。そしてJmeterのシナリオの中にはJParam1に対応する変数として${__P(Param1,1)}を、JParam2に対応する変数として${__P(Param2,1)}を書いておけばバッチリです。

というわけで、何となく全体像が完成。実際にRSS→Jmeterのあたりはすぐ動きましたが、その後か文字コードのあたりで相当ハマってmixi日記が文字化けしまくり。スクリプトの中にexport LANG=〜とか書いて解決しました。文字コードとかよく理解してません。。。

さて、実際のスクリプトをここに貼るのが親切なんでしょうが、恥ずかしくてとてもお見せできません。。。25行位のスクリプトなんですが、とても衆目にさらす勇気がありません。万が一興味のある人はTwitterででも声かけてください。もしくはメールとか。Jmeterのシナリオもあります。

とりあえず今の時点で修正したいのは、

  • 本文の最後に"?"が入ってしまうところ。
  • 短縮URLでリンクを貼りたい。
あたりでしょうか。1点目はrsstailでバイト単位でぶった切るので2バイトの文字がおかしくなるせいなんだと思いますが、末尾をsedで切ったりしてみたけどうまく行きませんでした。取り合えず放置。

cronでこのスクリプトを回しているんですが、見事この投稿がmixi日記に反映したらお慰みです。

@otchyからもperl覚えれば?と言われているんですが、やれやれ今回もシェルスクリプトでなんとかなってしまったので、また先の話になるのかな。。。w

Related Posts Plugin for WordPress, Blogger...