モチベーション
ベッドの上でスマホをいじってるときに眠くなって、パソコンをシャットダウンとかしたい。けど動きたくない。だから簡易的に遠隔操作できるシステムがほしい。
動作例
自分自身にDMを送ると、それを実行してその結果を返してくれる。
Windows環境を想定して作成。おそらくその他環境でも動く(?)
shutdown -s -t 0
とかにすればシャットダウンできる。
下の例はdirコマンドを実行した例
ソースコード
from twython import TwythonStreamer
from twython import Twython
import subprocess
# ご自身のアプリのキーとか入れてください
consumer_key = ""
consumer_secret = ""
access_token = ""
access_token_secret = ""
head_message = '[result from TwiCon]'
twitter = Twython(consumer_key, consumer_secret, access_token, access_token_secret)
# https://qiita.com/kentarosasaki/items/033751ba8b26cc51cf2a
def res_cmd(cmd):
r = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True).communicate()[0]
return r.decode('shift-jis').strip()
# https://github.com/ryanmcgrath/twython/blob/master/examples/stream.py
class MyStreamer(TwythonStreamer):
# https://twittercommunity.com/t/how-do-i-stream-direct-messages/61936/2
def on_success(self, data):
if 'direct_message' in data:
msg = data['direct_message']
if msg['sender']['id'] == msg['recipient']['id']:
cmd_text = msg['text']
if cmd_text.find(head_message) != 0: # ループ防止
ret_str = res_cmd(cmd_text)
twitter.send_direct_message(
screen_name = msg['sender']['screen_name'],
text = head_message + "\n" + ret_str
)
def on_error(self, status_code, data):
print( status_code, data )
if __name__ == "__main__":
stream = MyStreamer(consumer_key, consumer_secret, access_token, access_token_secret)
stream.user()
なんでTwython?
TweepyをつかってDMの着信を取りたかったが、うまくいかなった。on_direct_message
が息してない。
だから、Twythonを使った。
注意点
当たり前だが、TwitterのアプリケーションのパーミッションをDMが読み取れるように設定しないといけない。
これの設定を忘れてもエラーを吐いてくれない場合があったので、要注意。
使うにあたって
PCではPythonとTwythonが使えるように準備が必要。
またスタートアップで実行しておくと便利。
以下のようなファイルを同じディレクトリ内に作って、run.vbsをスタートアップに登録してやるとバッググラウンドでやってくれる(はず)。
python twitter_controller.py
Set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.Run("run.bat", 0, true)
その他
・スクショとかを送ってくれたりしたら便利そう。
・exe化した方がもっと使いやすい。
参考したサイト
ソースコードに記載してるサイトの一覧です。
Pythonでシェルコマンドの実行結果をリストで渡す方法 - Qiita
twython/stream.py at master · ryanmcgrath/twython · GitHub
How do I stream direct messages? - Streaming APIs - Twitter Developers
宣伝
フォローお願いします @redshoga