Hatena::Diary

daybook Twitter

2010-12-07

匿名でツイートできる正義のアカウント, @TwiLeaks を作りました。

| 21:39 | 匿名でツイートできる正義のアカウント, @TwiLeaks を作りました。を含むブックマーク

名前を隠して楽しくツイート

f:id:dotliner:20101207205056j:image

使い方

@TwiLeaksをフォローしてください。一瞬でフォロー返しされるので,投稿したいツイートをTwiLeaksにダイレクトメッセージで送ります。すると一瞬でTwiLeaksがDMの内容をツイートします。

お天気リーク機能

@TwiLeaksにリプライで天気を聞くと教えてくれます。@TwiLeaksがリプライとして反応する単語は@twileaks ,@ツイリーク ,@リーク ,@正義などがあります。

@正義 大阪の明日はless than a minute ago via web

@dotliner 大阪、明日のお天気は晴時々曇。最高気温12度、最低気温6度。近畿地方は、気圧の谷の影響で曇っている所が多く、北部や南部の一部で弱い雨が降っています。less than a minute ago via TwiLeaks

お天気リーク機能の大体の仕様はフォセッタbot(Tokyo)と同じです。フォセッタ便利なのでよろしく

翻訳機能

(翻訳|trans)を文中に入れてDMを送ると(日英|英日)に翻訳されたツイートをします。日本語がよく分からない方も気軽にリークしましょう。

また、(翻訳|trans)を含んだリプライを送ると翻訳機能だけ使うことも出来ます。リプライで送った場合リプライを返します。返信爆速です。

@TwiLeaks 正義とはなんですか。翻訳してくださいless than a minute ago via web

翻訳にはMicrosoftAPIを使っています。予想以上に精度良くてびっくり。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 でタイムラインを表示するサンプルを参考させてもらっています。 oauthgemが最新版だとうまく動かないので

gem install oauth --version"=0.3.6"

します。

補足

規制などで投稿できなかったDMは無視されます。時間を空けて再送してください。

NGワードで多少のフィルタリングをかけています。下ネタやめましょう。

個人中傷やめて。

@TwiLeaksの発言による責任はとりません。

突然アカウントが消える可能性もあります。

平和

nmorinmori 2010/12/07 23:22 これって「秘密をリークしたい人」のリストになっているような気がするんですが。

kk789wekk789we 2010/12/10 21:17 翻訳機能実装以降、公式RTするとリプライが飛んでくるようになって、うかつにRTできなくなりました…。

dotlinerdotliner 2010/12/10 23:15 翻訳orTrans を含んだツイートを公式RTするとリプライが飛んでくるバグを直しました。すみません。報告ありがとうございます。

206206 2011/01/21 02:51 ただの荒らし誘発装置になってる・・・。まぜっ返しと煽り叩きで、有意義な議論をカオス化させて見るに耐えない。既存のハッシュタグに投稿できないようにするとか、なにか歯止めがほしい。

通りすがり通りすがり 2011/01/22 22:57 スクリプトを公開してはどうか。荒らしの誘発になっているという声もあり、性格の違うリークアカウントが必要だろう。そこでスクリプトを配布して、誰でも同様のアカウントを作れてしまえば、元祖TwiLeaksは節度あるリークのみになるんでは?どうでしょう作者たん!