#Pythonを使用したGmailによるコンピューターのリモートコントロールシステム「Pymote PC on Gmail」の開発
##概要
「Pymote PC on Gmail」では、Pythonを使用して、Gmailで受信したコマンドを実行します。
筆者は自分の部活の空き時間でこれを作りました。
##使用したもの
開発環境:windows10 home,Anaconda
使用ライブラリ:httplib2, base64,email,time,subprocess, apiclient, oauth2client,
使用した技術: Python, base64, Json, HTTP, Gmail, OAuth, APIs
###言葉の説明
Pythonとは
文法を単純化して、読みやすく、また書きやすくすることで作業性とコードの信頼性を高めることを重視してデザインされた高水準プログラミング言語です。インターネット上に様々なライブラリ(機能を拡張できるツール群)が用意されています。最近は人工知能の開発に用いられています。
Anacondaとは
Anaconda はデータサイエンス向けのPythonパッケージなどを提供する統合型開発環境です。(Python以外の言語のプログラミングも使用可能。)
httpとは
HTTP(Hyper Text Transfer Protocol)は、WWW(World Wide Web)上でWebサーバとクライアントが、 HTML(Hyper Text Markup Language)で書かれた文書などの情報をやりとりする時に使われる通信手順(プロトコル)を意味しています。
APIとは
APIとはソフトウェアやアプリケーションなどの一部を外部に向けて公開することにより、第三者が開発したソフトウェアと機能を共有できるようにしたものです。これが今回は中心です。
OAuthとは
OAuthとは、SNSやWebサービス間で「アクセス権限の認可」を行うためのプロトコルのことで、現在では2012年に発行されたOAuth 2.0が標準化されています。
JSONとは
Json(JavaScript Object Notation)は、データフォーマットの一種です。
Base64とは
電子メールにおいて、バイナリーデータを送信するための規約であり、テキストデータにエンコードする方式の一つです。RFC 2045で定義されています。
Gmail APIとは
Gmail APIは、Gmailメールボックスへのアクセスとメールの送信に使用できるAPIです。 大部分のアプリケーションでは、Gmail APIは、ユーザーのGmailデータへの承認されたアクセスに最適といえます。
##仕組み
GmailのAPIと連携し、5秒ごとに最新のメールをプログラムで受信し、コマンドかそうでないかの条件分岐を行い、コマンドの場合はそれをコンピューター内で実行することによって、Gmailとプログラムを仲立ちにして、間接的にコンピューターを遠隔操作できるようにしました。
##やったこと
-
GmailのAPIと連携する
Google Developer ConsoleのAPI ManagerからGmail APIを有効にし、認証データclient_id.json をダウンロードします。
その後、PythonからAPIと連携させ、client_id.jsonをもとに、credentials-gmail.jsonを生成し ます。これがGmailにアクセスする鍵です。
-
Gmailのサービスにアクセスし、メッセージを取得できるようにする。
プログラムでAPIを使えるように設定をし、ユーザーのメッセージを取得します。
メールの暗号化(base64)を解析し、本文を取得します。
-
コマンドかそうではないかの認識
本文を文字列にし、例えば、「cmd:」で本文が始まるならcmd:を取り除いたほかの部分をコマンドとしてコンピューター内で実行するようにします。
##改善が必要な点
- 一回届いたコマンドを新しいメールが届くまで何回も実行してしまう点
- そのまま。
- 個人情報の保護
- このプログラムが作動しているときは、cmd:という認識用の文字列(今はこれをパスワードとするしかない)とメールアドレスが第三者に知られてしまうと、コンピューター上で任意のコードを実行することができてしまうので、送信元のメールアドレスを取得し、そのアドレス以外からの実行は受け付けないようにしたいです。また、Googleアカウントに登録していないデバイスから来たコマンドについては実行はするものの、その詳細をGoogle アカウントに通知できるようにしたいと思います。
- 使いやすさの向上
- 実行結果を返信で知らせることができるようにしたいです。また、GmailのAPIをさらに活用することによって、自動化できる処理を増やしたいです。
- 理想
- パスワードで保護されたwebアプリをPythonで作成し、画面を作成して同じことができるようにしたいです。最終的には、他の言語も利用しながらそれをデスクトップアプリケーション化したいです。(Electron×Bottle.pyなど)
##参考文献
退屈なことはPythonにやらせよう 2017/6/3 Al Sweigart (著), 相川 愛三 (翻訳)
Web API: The Good Parts 2014/11/21 水野 貴明 (著)
Electronではじめるアプリ開発 ~JavaScript/HTML/CSSでデスクトップアプリを作ろう 2017/3/28 野口 将人 (著), 倉見 洋輔 (著)
Web技術の基本 2017/3/16 小林 恭平 (著), 坂本 陽 (著), 佐々木 拓郎 (監修)