[python][twitter]すてるすついっと作ってみた

[python][twitter]すてるすついっと作ってみたをはてなブックマークに追加 [python][twitter]すてるすついっと作ってみたをdel.icio.usに追加 Yahoo!ブックマークに登録 [python][twitter]すてるすついっと作ってみたをGoogle Bookmarksに追加

すてるすついっとダウンロード

stealthTwit

仕事中にこっそりtwitterをやるツール、ラーメン大陸というものがあるよとタイムラインに流れてきたので、もう限界までこっそりtwitterしてやろうというツールを作りました。

どこまでこっそりかというと、つぶやきのポストもタイムライン取得もクリップボードを経由してUI一切なしと言うドイヒーな仕組みにしました。

これなら、上司に回り込まれている状態でもタイムラインを取得することが出来ますNE!

クリップボード経由ということなので、取得したタイムラインは何処かに貼り付けないと見えないし、送るつぶやきもエディタで書こうがメーラで書こうがエクセルで書こうが、なんでもいいです。仕事してますよー的な雰囲気でサクっとクリップボードにおくってあげればおk。ctrl-xでカットしてしまえば完全にステルス仕様です。

で、セットアップについてですが、DL先のアーカイブを解凍すると、StealthPost.exeとStealthGet.exeとtwip.iniというファイルが解凍されます。

StealthPost.exeはつぶやきをポストするためのアプリで、実行するとクリップボードに貼られている内容をポストします。StealthGet.exeは自分のタイムラインを取得してクリップボードに格納してきます。

twip.iniでアカウントの設定をするか、実行ファイルの起動引数にアカウントなどを渡すかする必要があります。

[global]
user=your account
pass=your password
block=カンマ","区切りでポストをブロックするワードを入れておきます。例えばパスワードとか。
例)
user=mytwitteraccount
pass=mytwitterpassword
block=mytwitterpassword,090-0000-9999

※blockに書かれている内容がクリップボードにある場合はポスト自体しません。

解答したディレクトリをどこか(program files下にでも)に置いて2つの実行ファイルのショートカットを作ってあげて、リンク先の欄にアカウント パスワード ブロックワード(カンマ区切り)を記述して実行時の大きさを最小化にしておけば、コマンドプロンプトの窓も開かなくなります。

"C:¥Program Files¥StealthTwit¥StealthPost.exe" mytwitteraccount mytwitterpassword mytwitterpassword,090-0000-9999

"C:¥Program Files¥StealthTwit¥StealthGet.exe" mytwitteraccount mytwitterpassword

※ショートカットに起動引数を書く場合、StealthGetの方はブロックワードは必要ありません。

props

QuickLauncherなんかにこのショートカットを置いてあげて、タイムラインを取得するときは白い方のアイコンをクリックして何かポストするときは、クリップボードにコピーして黒いアイコンをクリックすればポストされます。
ポストするときにURLっぽいものが書かれてたらbit.lyに送って畳んでからポストします。140字超えてたらポスト自体しません。

editorPaste

後述のコードを見れば判るのですが、エラーがあろうがうまくいこうが何の通知もされないドイヒーな仕様です。ステルスに徹してみたと言うかめんどくさくて何もしてないだけですすみません。

このアプリはpythonで作って、py2exeでwindowsの実行形式にしているので1つの実行ファイルが3M近くあります。(pythonXX.dllも一緒に含まれるから。)ソースも置いておきますが大したことはやってません。

重要なことですが、これらのアプリを使ってなんかPCおかしくなっちゃったーとか、間違えてポストしちゃいけないようなことポストしちゃって自害しなければいけなくなっちゃったとかそういうことがあってもあっしには関わりのないことでござんすので予めご承知おきください。

このコード間違ってるんじゃない?とかバグっぽいところを報告いただけましたらモソモソ直すと思います。

■StealthGet.py

import win32clipboard
import twitter
import sys
import ConfigParser

USER = ""
PASS = ""
if len( sys.argv ) < 3 :
config = ConfigParser.RawConfigParser()
config.read(['twip.ini'])
USER = config.get('global','user')
PASS = config.get('global','pass')
else:
USER = sys.argv[1]
PASS = sys.argv[2]

if len(USER) == 0 or len(PASS) == 0: sys.exit()

api = twitter.Api(username = USER, password = PASS)
tl = api.GetFriendsTimeline()
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
toclip = ",".join([ "[%s] %s" % (s.user.screen_name, s.text) + "¥n" for s in tl ]).replace( "¥n,", "¥n" )
win32clipboard.SetClipboardText(toclip)
win32clipboard.CloseClipboard()

■StealthPost.py

import win32clipboard
import twitter
import sys
import urllib
import ConfigParser
import win32con
import re
import os, urllib2
import simplejson
import bitly

USER = ""
PASS = ""
if len( sys.argv ) < 4 :
config = ConfigParser.RawConfigParser()
config.read(['twip.ini'])
USER = config.get('global','user')
PASS = config.get('global','pass')
BLOCK = config.get('global','block')
else:
USER = sys.argv[1]
PASS = sys.argv[2]
BLOCK = sys.argv[3]

if len(USER) == 0 or len(PASS) == 0: sys.exit()
api = twitter.Api(username = USER, password = PASS)
win32clipboard.OpenClipboard()
postmsg = win32clipboard.GetClipboardData(win32con.CF_TEXT)
win32clipboard.CloseClipboard()

blockList = BLOCK.split(",")
for word in blockList:
find = re.search( word, postmsg )
if find: sys.exit()

if len( postmsg.strip() ) == 0 : sys.exit()
postmsg = postmsg + " #stealthpost"
m = re.search( "(http://[A-Za-z0-9¥'‾+¥-=_.,/%¥?!;:@#¥*&¥(¥)]+)", postmsg )
if m:
url = m.group()
bitly_api = bitly.Api(login="********", apikey="*******************************")
short_url = bitly_api.shorten( url )
postmsg = postmsg.decode('shift_jis').replace( url, short_url )
if len( postmsg ) <= 140 :
api.PostUpdate( postmsg )

タグ:

コメントをどうぞ