Hatena::Groupnadesiko

そっとなでしこ RSSフィード


メインのブログに書くまでもない、なでしこ学習帳【記事一覧】 【このブログは何?】


特設!→【目次】なでしこ用Twitter 連携ライブラリ「なこったー」で遊ぶ


2010-09-24

コマンド入力型ランチャー「fenrir」×「なこったー」で高速ツイート!

| コマンド入力型ランチャー「fenrir」×「なこったー」で高速ツイート! - そっとなでしこ を含むブックマーク はてなブックマーク - コマンド入力型ランチャー「fenrir」×「なこったー」で高速ツイート! - そっとなでしこ

 コマンド入力型ランチャー「fenrir」のインスタントコマンドからのサクッとTwitterに投稿できるようにする「なでしこ」スクリプトを、Twitter連携ライブラリ「なこったーを使って書いてみました。我ながら、これは快適かも!

 元ネタは、こちらの記事。

 ここで紹介されていたのは、「fenrir」からmala氏が書いたRubyスクリプトを呼び出す、というアイデアでした。

 これに対しての記事では、「fenrir」から呼び出すスクリプトを、OAuth認証に対応した日本語プログラミング言語「なでしこ」で書いてみよう、ということです。

■コマンド入力型ランチャー「fenrir」

 個人的には、昨年FenrirFSのおかげでGoogle先生により引き合わせていただいたランチャー「fenrir」。

 ランチャーなのに、ランチャーから起動するアプリケーションを登録しないで使えるというのが「fenrir」の売りです。ですが、起動するアプリケーションを登録して任意のコマンドで呼び出すことも可能です。それが「インスタントコマンド」機能です。

 この「インスタントコマンド」を利用して、

/t こんにちわ!

と、「fenrir」からコマンドを入力すると、「こんにちわ!」というツイートがTwitterに投稿できるようにしてみよう!ということです。

■「fenrir」から起動する「なでしこ」バッチスクリプトのソースコード

※「OAuth認証設定」部分を、事前に取得した「コンシューマ・キー」と「コンシューマ・シークレット」、「アクセストークン」と「アクセストークンシークレット」に書き換えて実行して下さい。

#-----------------------------------------------------------------------
# OAuth認証設定
#-----------------------------------------------------------------------
# Twitterにアプリケーション登録した際に発行された
# 「コンシューマ・キー」と「コンシューマ・シークレット」を設定
CONSUMER_KEY=「****」。
CONSUMER_SECRET=「****」。
# 「アプリケーションのアクセス許可」&認証で発行された
# 「アクセストークン」と「アクセストークンシークレット」を設定
OAUTH_TOKEN=「****」。
OAUTH_TOKEN_SECRET=「****」。
#-----------------------------------------------------------------------

!「nakotter.nako」を取り込む
なこったークライアントとはNakotter。
そのoauthのコンシューマのトークンキー = CONSUMER_KEY。
そのoauthのコンシューマのシークレット = CONSUMER_SECRET。
そのoauthのトークンキー = OAUTH_TOKEN。
そのoauthのシークレット = OAUTH_TOKEN_SECRET。

もし、コマンドライン¥1が「-debug::*」にワイルドカード一致ならば
 「投稿するメッセージが入力されていません」と言う。
違えば
 引数テキストは、コマンドライン¥1の「^'」を「」へ正規表現置換。
 引数テキストは、引数テキストの「'$」を「」へ正規表現置換。 
 なこったークライアントから「{引数テキスト}」とつぶやく。
 応答テキストは、それ。
 投稿テキストは、応答テキスト@"text"。
 もし、投稿テキストが空でないならば
  「『{投稿テキスト}』{~}を投稿しました」と言う。
 違えば
  「ツイートに失敗しました{~}{応答テキスト}」と言う。
 ここまで。
ここまで。
終わる。

■「fenrir」の設定

 まず、上記の「なでしこ」スクリプトを、なでしこエディタの「ファイル」>「バッチファイル作成」から「*.bat」ファイルとして保存します。「*.nako」ファイルだと、引数付きでスクリプトを起動できないので。

 例として、以下の場所に保存したとします。

D:\data\スクリプト\なでしこ\ツイート.bat

 この場合、「fenrir」のインスタントコマンドの設定ファイルである「instant.ini」(無い場合は、「fenrir」インストール先の「data」フォルダー内に作成します)に次のように設定します。

[InstantCommand]
/t=""D:\data\スクリプト\なでしこ\ツイート.bat"" '"%A"'
/tc=""D:\data\スクリプト\なでしこ\ツイート.bat"" '"%C"'

 このように設定することで、「/t こんにちわ」とコマンド入力すると「こんにちわ」というツイートが投稿されます。また、「/tc」とコマンド入力すると、クリップボード内にコピーされている文字列がツイートとして投稿されます。ただし、クリップボードに格納されている文字列改行文字を含む場合は、改行文字以下が切れて投稿されます。

 「instant.ini」への設定のポイントは、「'"%A"'」や「'"%C"'」のように、「なでしこ」バッチスクリプトに渡す引数を「'"」で囲っている点です。なぜんな妙な書き方をしているかと言うと、まず、引数で渡される文字列の中に白文字を含む場合に白文字以下が切れてしまう問題に対処するために「"」で囲っています。さらに、コマンドライン両端のダブルクォーテーションを自動で外す機能を持つ「fenrir」の仕様の関係で、さらに「'」で囲っています。

 このため、上記の「なでしこ」スクリプトでは、コマンドライン引数で渡された文字列の文頭と文末にある「'」を正規表現を使って外す処理が書かれています。

■複数のTwitterアカウントを頻繁に切り替えて使う人は…

 上記の「なでしこ」スクリプトでは、投稿するTwitterアカウントが一つに固定されてしまいます。複数のTwitterアカウントを頻繁に切り替えて使いたいという人の場合は、拙作の「なこったー」簡易認証ツールを利用して、Twitterアカウント情報をINIファイルから読み込む形にすれば良いと思います。

 の場合の「なでしこ」バッチスクリプトのソースコードは、こんな感じになります。読み込むINIファイルの場所は、各自の環境に合わせて書き換えて使用して下さい。

INIファイル=「d:\data2\nakotter.ini」。

!「nakotter.nako」を取り込む。
なこったークライアントとはNakotter。

INIファイルのINI開いて、ハンドルに代入。
そのoauthのコンシューマのトークンキー = ハンドルで「OAuth」の「consumer_key」をINI読む。
そのoauthのコンシューマのシークレット = ハンドルで「OAuth」の「consumer_secret」をINI読む。
そのoauthのトークンキー = ハンドルで「OAuth」の「oauth_token」をINI読む。
そのoauthのシークレット = ハンドルで「OAuth」の「oauth_token_secret」をINI読む。
スクリーン名=ハンドルで「OAuth」の「screen_name」をINI読む。
ハンドルのINI閉じる。

もし、コマンドライン¥1が「-debug::*」にワイルドカード一致ならば
 「投稿するメッセージが入力されていません」と言う。
違えば
 引数テキストは、コマンドライン¥1の「^'」を「」へ正規表現置換。
 引数テキストは、引数テキストの「'$」を「」へ正規表現置換。 
 なこったークライアントから「{引数テキスト}」とつぶやく。
 応答テキストは、それ。
 ステータスIDは、応答テキスト@"id"。
 投稿テキストは、応答テキスト@"text"。
 もし、投稿テキストが空でないならば
  「『{投稿テキスト}』{~}を投稿しました」と言う。
  #「http://twitter.com/{スクリーン名}/status/{ステータスID}」を起動。#←確認用
 違えば
  「ツイートに失敗しました{~}{応答テキスト}」と言う。
 ここまで。
ここまで。
終わる。