LoginSignup
12
8

More than 5 years have passed since last update.

TwitterのDMで自分のパソコン(Windows)を遠隔操作する奴

Last updated at Posted at 2017-10-04

モチベーション

ベッドの上でスマホをいじってるときに眠くなって、パソコンをシャットダウンとかしたい。けど動きたくない。だから簡易的に遠隔操作できるシステムがほしい。

動作例

自分自身にDMを送ると、それを実行してその結果を返してくれる。
Windows環境を想定して作成。おそらくその他環境でも動く(?)
shutdown -s -t 0とかにすればシャットダウンできる。
下の例はdirコマンドを実行した例

image.png

ソースコード

twitter_controller.py
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をスタートアップに登録してやるとバッググラウンドでやってくれる(はず)。

run.bat
python twitter_controller.py
run.vbs
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

宣伝

フォローお願いします:shinto_shrine: @redshoga

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8