2010-12-07
匿名でツイートできる正義のアカウント, @TwiLeaks を作りました。
Twitter | |
名前を隠して楽しくツイート。
使い方
@TwiLeaksをフォローしてください。一瞬でフォロー返しされるので,投稿したいツイートをTwiLeaksにダイレクトメッセージで送ります。すると一瞬でTwiLeaksがDMの内容をツイートします。
お天気リーク機能
@TwiLeaksにリプライで天気を聞くと教えてくれます。@TwiLeaksがリプライとして反応する単語は@twileaks ,@ツイリーク ,@リーク ,@正義などがあります。
@正義 大阪の明日は
お天気リーク機能の大体の仕様はフォセッタbot(Tokyo)と同じです。フォセッタ便利なのでよろしく
翻訳機能
(翻訳|trans)を文中に入れてDMを送ると(日英|英日)に翻訳されたツイートをします。日本語がよく分からない方も気軽にリークしましょう。
また、(翻訳|trans)を含んだリプライを送ると翻訳機能だけ使うことも出来ます。リプライで送った場合リプライを返します。返信爆速です。
@TwiLeaks 正義とはなんですか。翻訳してください
@dotliner What is justice? Translate
翻訳にはMicrosoftのAPIを使っています。予想以上に精度良くてびっくり。Google様よりいい感じでした。 http://www.microsofttranslator.com/
このbotについて
国家の機密情報からポエム、便所の落書きまで、自分のアカウントではしにくい発言なんでもウェルカムです。
DMの送信者は開示しませんが、送信者のログを取っているので、スパムやゴミのようにつまらないDMを送るアカウントはブロックすることがあるかもしれません。僕(@dotliner)にもアカウントを知られたくない場合は捨てアカとるのもありだと思います。
ソース
#!/usr/bin/env ruby # coding: utf-8 require 'rubygems' require 'net/https' gem "oauth", "=0.3.6" require 'oauth' require 'cgi' require 'json' endTime = 3600 #1時間で終了する pastTime = Time.now.tv_sec @log = './twileaks.log' #ログの絶対パス CONSUMER_KEY = "" #これらいれる CONSUMER_SECRET = "" ACCESS_TOKEN = "" ACCESS_TOKEN_SECRET = "" consumer = OAuth::Consumer.new( CONSUMER_KEY, CONSUMER_SECRET, :site => 'http://twitter.com' ) access_token = OAuth::AccessToken.new( consumer, ACCESS_TOKEN, ACCESS_TOKEN_SECRET ) def post(tweet,screen_name,access_token) words = tweet.gsub(/( | | |ヒューマンコンピュータ|ヒューマンコンピュータ)/,"") if /NGワード|NGワ〜ド2|amzn/i =~ words #正規表現でNGワードかく tweet = tweet + " #NG" else begin access_token.post( URI.escape("http://api.twitter.com/1/statuses/update.xml?status=#{tweet}") ) rescue => e p e end end if File.exist?(@log) file = open(@log, 'a') else file = open(@log, 'w') file.chmod( 0600 ) end file << (screen_name +": " + tweet + "\n") file.close end uri = URI.parse('https://userstream.twitter.com/2/user.json') https = Net::HTTP.new(uri.host, uri.port) https.use_ssl = true https.ca_file = './userstreams.pem'# SSL証明書の絶対パス https.verify_mode = OpenSSL::SSL::VERIFY_PEER https.verify_depth = 5 https.start do |https| request = Net::HTTP::Get.new(uri.request_uri) request.oauth!(https, consumer, access_token) buf = "" https.request(request) do |response| response.read_body do |chunk| buf << chunk while (line = buf[/.+?(\r\n)+/m]) != nil raise if Time.now.tv_sec - pastTime > endTime begin buf.sub!(line,"") line.strip! status = JSON.parse(line) rescue break end if status['event'] == 'follow' #フォロー返し user_id = status['source']['id'] begin access_token.post("http://api.twitter.com/1/friendships/create.xml?user_id=#{user_id}") rescue => e p e end end if status['direct_message'] tweet = status['direct_message']['text'] screen_name = status['direct_message']['sender_screen_name'] post(tweet,screen_name,access_token) end end end end end
スクリプト公開したら楽しそう!(http://togetter.com/li/78126)という話がけっこうあったので
受け取ったDMをツイートしてログ保存、フォローされたらフォローし返すというやつ。UserStreamsたまに接続切れたりよく分からないことになるので一時間でプログラム終了してcronやらで一時間おきに実行してる。Rubyをインストールしてアプリケーション登録&アクセストークンとか取得、公開証明書鍵を得る。Twitter User Stream API でタイムラインを表示するサンプルを参考させてもらっています。 oauthのgemが最新版だとうまく動かないので
gem install oauth --version"=0.3.6"
します。
補足
規制などで投稿できなかったDMは無視されます。時間を空けて再送してください。
NGワードで多少のフィルタリングをかけています。下ネタやめましょう。
個人中傷やめて。
@TwiLeaksの発言による責任はとりません。
突然アカウントが消える可能性もあります。
平和
nmori
2010/12/07 23:22
これって「秘密をリークしたい人」のリストになっているような気がするんですが。
kk789we
2010/12/10 21:17
翻訳機能実装以降、公式RTするとリプライが飛んでくるようになって、うかつにRTできなくなりました…。
dotliner
2010/12/10 23:15
翻訳orTrans を含んだツイートを公式RTするとリプライが飛んでくるバグを直しました。すみません。報告ありがとうございます。
206
2011/01/21 02:51
ただの荒らし誘発装置になってる・・・。まぜっ返しと煽り叩きで、有意義な議論をカオス化させて見るに耐えない。既存のハッシュタグに投稿できないようにするとか、なにか歯止めがほしい。
通りすがり
2011/01/22 22:57
スクリプトを公開してはどうか。荒らしの誘発になっているという声もあり、性格の違うリークアカウントが必要だろう。そこでスクリプトを配布して、誰でも同様のアカウントを作れてしまえば、元祖TwiLeaksは節度あるリークのみになるんでは?どうでしょう作者たん!
- 848 http://twitter.com/
- 490 http://twitter.com/TwiLeaks
- 470 http://longurl.org
- 163 http://b.hatena.ne.jp/hotentry
- 154 http://twtr.jp/user/TwiLeaks
- 129 http://b.hatena.ne.jp/hotentry/it
- 93 http://blog.livedoor.jp/antenna22/archives/51530795.html
- 76 http://b.hatena.ne.jp/
- 66 http://hootsuite.com/dashboard
- 53 http://twipple.jp/