htsign's blog

ノンジャンルで書くつもりだけど技術系が多いんじゃないかと思います

TwiProwl を Pushalot 対応にする

前置き

いろんなスマートフォン向けOSに興味があるので、Lumia 920(Windows Phone), iPhone5(iOS), RAZR M(Android), Xperia SX(Android)を普段から持ち歩いています。
タブレットもICONIA W3-810(Windows), iPad(iOS), Nexus 7(Android)を外出時はかばんに入れておいています。

同時に、3,4年ほど前まではTwitterも1日に平均500件程度つぶやく、軽度のツイ廃でした。
今でこそ1日に0~50件弱程度の健全なTwitter生活をしていますが、それでもなんとなくエゴサーチはしておきたいものです。


そんな自分にTwiProwlは欠かせないツールです。
このツールを使うがためだけにServersMan@VPSのEntry(税込みで月約500円)を契約した程度にはTwitter使ってます。


ただ、TwiProwlが標準で対応しているNotificationサービスは

の3つのみです。

ご覧の通り、標準で対応しているモバイルプラットフォームはiOSAndroidのみとなっています。
一応Growlを通してWindows Phoneに通知を送れる仕組みは作れるようですが、個人的によくGrowlの仕組みを理解できていません。

そこでググっていたところ、どうやらPushalotというWindowsプラットフォームのみを対象とした稀有なNotificationサービスがあるようです。
丁度それを説明していたブログ記事があったので、参考にさせていただきました。
あれ: Pushalot - WindowsPhoneにPush通知

本題

さて、TwiProwlはGitHubで公開されているオープンソースRubyアプリケーションです。
takuo/TwiProwl · GitHub

TwiProwlのセットアップについては本エントリでは扱わないので、とりあえず使いたいだけの人はググるなりREADME.md読むなりしてください。

前書きに書いた通り、コードを参考にさせて頂いているので改めて書く必要がどの程度あるかは謎ですが、追加したコードは以下の通りです。
※以下の編集を行った後のファイルは下の方に置いてあります。書き換えがめんどくさいという方はどうぞお好きに持って行ってください。

コード冒頭、TwiProwlクラスの定数宣言部で

PUSHALOT_API_SENDMESSAGE = "https://pushalot.com/api/sendmessage"

360行目辺り、同クラス中のprowlメソッドやnmaメソッドが定義してある辺りの直後に

def pushalot( icon, params={}, user = nil )
  pushalot_params = {
    :AuthorizationToken => @@conf['Pushalot']['APIKey'],
    :Title => params[:event],
    :Body => params[:description],
    :Source => params[:application] }
  pushalot_params[:Link] = params[:url] if params[:url]
  
  begin
    info "Notify with Pushalot..."
    uri = URI.parse( PUSHALOT_API_SENDMESSAGE )
    http = http_new( uri )
    request = Net::HTTP::Post.new( uri.request_uri )
    request.content_type = "application/x-www-form-urlencoded"
    query = pushalot_params.map do |key, val| "#{key}=#{post_escape(val.to_s)}" end
    res = http.request( request, query.join( '&' ) )
    debug "Pushalot Response: #{res.code}"
  rescue
    error "Error while Prowling: #{$!}"
  end
end

params[:url]については、Pushalot対応とは別のカスタマイズで、通知にURLが追加されるようにした時のものです。
mentionが来たりRTされたりするとそのtweet urlが付いてきます。

この辺の改造は、TwiProwlのフォークとして配布されているEgoProwlを参考にしています。

私と同じような改造をしなくても、if文で記述してあるので、無いなら無いで誤動作することはないと思います。

以上の変更*1を施したtwiprowl-modを下記に置いておきます。
https://www.dropbox.com/s/ignuagwqu6s84jg/twiprowl-mod
ライセンス的に問題はないと思っていますが、ヤバければ取り下げます。


さて、設定ファイルの方も書き換えねばいけません。
設定ファイルは~/.twiprowl.conf、またはtwiprowlと同ディレクトリのconfig.ymlです。
あるいは-cスイッチを使っている場合はそのパスのものです。

ここに

Prowl:
  APIKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

NMA:
  APIKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Growl:
  Sticky: 0    # lowest priority to enable stikcy option

とあるので、直後に

Pushalot:
  APIKey: yourkey

を追加します(yourkeyは取得したAPIキー)

また、

NotifyMethods:
    - "prowl" # Prowl for iPhone
#   - "nma"   # Notify My Android for Android
#   - "growl" # use growlnotify, it requires growl.gem and growlnotify

の直後にも

    - "pushalot"

を追加します。

コード追加後、TwiProwlディレクトリ内で

$ ./twiprowl -q
$ ./twiprowl

として、TwiProwlのプロセスを立て直してください。

確認

ここまで成功していたら、ふぁぼられたり空中リプライが飛んでくる度に、PushalotがインストールされたWindows Phone端末にtoast表示がされるはずです。
Twitterイベントの度に騒がしくなる部屋を堪能してください。

*1:tweet url付きNortificationのカスタマイズ含む