IRCで年末やクリスマスを過ごす人用のツールをRubyで作った

Rubyで遊んでいて、ふとこういうの欲しいなと思ったので作ってみました。

TwitterIrcGatewayのようなTwitterをIRCでやり取りすのではなく、最低限の簡単な機能で色々なユーザのツイートや気になる検索文字列を含むツイートを、チャンネルにjoinしているみんなで眺めてガヤガヤするといったような使い方を目的にしており、シンプルで簡単にみんなで楽しめる事を第一にしています。

これでIRCのチャンネルに自分しかいなくてもこれで寂しくないですよ!年末もクリスマスもこれできっと楽しく過ごせます。

指定したユーザーリストから最新ツイートをランダムでIRCに書き込む

githubに上げていますが、ソースは短いのでそのまま貼り付けます。

[program lang=’ruby’ escaped=’true’]

#!/usr/bin/env ruby
# encoding: utf-8

require 'carrier-pigeon'
require 'twitter'
require 'kconv'

Twitter.configure do ¦config¦
  config.consumer_key       = ''
  config.consumer_secret    = ''
  config.oauth_token        = ''
  config.oauth_token_secret = ''
end 

server  =   'irc.media.kyoto-u.ac.jp:6667'
channel =   '#channel'

interest_users = [
  "twitter_user1",
  "twitter_user2",
  "twitter_user3",
]

user    = interest_users[rand(interest_users.length)]
message = Twitter.user_timeline(user).first.text.tojis.force_encoding("US-ASCII").sub("¥n", "")
color   = "¥x0312"

# color code of message
# ¥x03 + color number
# 
# 0 white
# 1 black
# 2 blue (navy)
# 3 green
# 4 red
# 5 brown (maroon)
# 6 purple
# 7 orange (olive)
# 8 yellow
# 9 light green (lime)
# 10 teal (a green/blue cyan)
# 11 light cyan (cyan) (aqua)
# 12 light blue (royal)
# 13 pink (light purple) (fuchsia)
# 14 grey
# 15 light grey (silver)

CarrierPigeon.send(
  :uri      => "irc://" + user + "tter@" + server + '/' + channel,
  :message  => color + message,
  :ssl      => false,
  :join     => false
)

[/program]

まずは例のごとく、TwitterのTOKENやKEYの取得・設定とIRCサーバのホストとチャンネル名を指定しましょう。

[program lang=’ruby’ escaped=’true’]

Twitter.configure do ¦config¦
  config.consumer_key       = ''
  config.consumer_secret    = ''
  config.oauth_token        = ''
  config.oauth_token_secret = ''
end 

server  = 'irc.media.kyoto-u.ac.jp:6667'
channel = '#channel'

[/program]

次に、interest_usersにIRCに出力したいtwitterのユーザ名を複数アカウント渡しとくと、その中からランダムに最新ツイートをIRCの任意のチャンネルに書き込みます。

[program lang=’ruby’ escaped=’true’]

interest_users = [
  "twitter_user1",
  "twitter_user2",
  "twitter_user3",
]

[/program]

個人的に興味のある人や、自分の会社関係のアカウントのツイートをIRCからシームレスに確認したい場合に使うと良いと思います。

また、colorにIRCのカラーコードを指定する事で任意の色にする事もできます。

[program lang=’ruby’ escaped=’true’]

color   = "¥x0312"

[/program]

IRCのチャンネルのオプションで-nをしておくと、チャンネルにいちいちjoinしなくてもツイートが出力されると思います。

IRCのユーザ名はツイートのユーザ名+tterで書き込まれます。

個人的にハマった所は、IRCの文字コードであるISO-2202-JPに変換するのに、単純にkconvの.tojisだったらだめで、.tojis.force_encoding(“US-ASCII”)としなければならなかったところです。

[program lang=’ruby’ escaped=’true’]

message = Twitter.user_timeline(user).first.text.tojis.force_encoding("US-ASCII").sub("¥n", "")

[/program]

後は、.subで改行文字を適当に取り除いてあげましょう。

で、これをcronなどの定期ジョブに登録しておくと、以下のようにIRCチャンネルに気になる人のツイートが出力されます。

[program lang=’text’ escaped=’true’]

19:55:02 <matsumotorytter> 複数のtwitterユーザの最新tweetをIRCに色つきで書き込んだり、複数の検索文字列から最新のtweetを書き込んだりできるようにした。 / “matsumoto-r/randammer  GitHub” http://t.co/EYMQLYsO

[/program]

指定した文字列にマッチしたツイートをIRCに書き込む

ソースは以下です。上記のソースとほとんど同じですが、このツールは不特定多数のツイートの中から、検索文字列(クリスマス、大晦日、カップル等)にマッチした最新のツイートをランダムで表示します。

[program lang=’ruby’ escaped=’true’]

#!/usr/bin/env ruby
# encoding: utf-8

require 'carrier-pigeon'
require 'twitter'
require 'kconv'

Twitter.configure do ¦config¦
  config.consumer_key       = ''
  config.consumer_secret    = ''
  config.oauth_token        = ''
  config.oauth_token_secret = ''
end 

server  = 'irc.media.kyoto-u.ac.jp:6667'
channel = '#channel'

search_words = [
  "クリスマス",
  "大晦日",
]

word    = search_words[rand(search_words.length)]

r       = Twitter.search(word).results.first
message = r.text.tojis.force_encoding("US-ASCII").sub("¥n", "")
user    = r.user.screen_name  + "tter"

color   = "¥x0312"

# color code of message
# ¥x03 + color number
#
# 0 white
# 1 black
# 2 blue (navy)
# 3 green
# 4 red
# 5 brown (maroon)
# 6 purple
# 7 orange (olive)
# 8 yellow
# 9 light green (lime)
# 10 teal (a green/blue cyan)
# 11 light cyan (cyan) (aqua)
# 12 light blue (royal)
# 13 pink (light purple) (fuchsia)
# 14 grey
# 15 light grey (silver)

CarrierPigeon.send(
  :uri      => "irc://" + user + "@" + server + "/" + channel,
  :message  => color + message,
  :ssl      => false,
  :join     => false
)

[/program]

search_wordsに適当に検索した文字列を追加すると、その中からランダムに選択された文字列にヒットした最新の日本語ツイートをIRCに書き込みます。

[program lang=’ruby’ escaped=’true’]

search_words = [
  "クリスマス",
  "大晦日",
]

[/program]

自分が気になっていたり、注目している検索文字列をリストにしておくと良いと思います。

[program lang=’text’ escaped=’true’]

23:16:54 (matsumotorytter) 書いた。これでIRCチャンネルに1人でも頑張れる。TweetIrcGatewayとかまで高機能じゃなくてよくてRuby動く環境で試したい人用。 / “人間とウェブの未来 - IRCで年末やクリスマスを過ごす人用のツールをRubyで作った” http://t.co/4LvrDxKd

[/program]

単純なツールですが、身内のツイートや気になる文字列の不特定多数のツイート等をみていると結構面白くて盛り上がるので是非試してみてください。carrier-pigeonとtwitterライブラリがとても簡単で使い易いです。

僕の場合は、「うんこなう」ってツイートがランダムのはずなのに沢山IRCに出力されていてシュールでした。