暴落検知時にLINEに通知してみる

IT

当ブログは、レンタルサーバー「ロリポップ」で動作しています。
契約しているプランによるのですが、Pythonを実行できることがわかりましたので、株価情報等を定期的にスクレイピングして、ある程度の暴落を検知したら、LINEに通知するプログラムを組んでみました。

SSH接続の有効化

ロリポップのユーザー専用ページにログインして、SSHを有効化します。
「サーバーの管理・設定」-「SSH」で、「SSHを有効にする」を押下します。
表示される、サーバー、アカウント、接続ポート、SSHパスワードをメモしておきます。

Pythonの実行準備

Pythonでimportするモジュールをあらかじめインストールしておきます。
まずは、pipを使えるようにします。

pipの導入

以下を実行します。

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py --user

PATHを通す

viを使用して、.bash_profileにPATHを通します。

PATH=$PATH:/home/users/1/sub.jp-teto/.local/bin
export PATH

PATHを有効化するために、SSHを接続しなおすか、以下を実行してください。

source .bash_profile

pipの動作確認

pipがうまく動作するか以下を実行。
リストが出てこれば成功です。

pip3 list

importするモジュールのインストール

自分のPythonで使用するモジュール(numpyなど)をインストールします。
ロリポップにTeraTerm等のターミナルソフトを使ってSSH接続します。

pip install numpy

定期実行

Pythonのプログラムを定期的に実行したいことがあります。
ロリポップではcronが10個まで使用できます。

まずは、定期実行したいPythonファイルをwebディレクトリ配下に格納します。
例えば、webディレクトリ配下にpythonディレクトリを作成し、ファイル名をhello.pyとします。
WinSCPなどのソフトを使ってもいいですし、TeraTermなどで作成してもよいと思います。

注意点は、ファイルのパーミッションを700にしてください。
ターミナルで実施するなら以下となります。

cd web
mkdir python
cd python
vi hello.py
chmod 700 hello.py

cronの設定

ロリポップのユーザー専用ページにログインしてcronの設定をします。
「サーバーの管理・設定」-「cron設定」
ここで、cronの設定名を適当に記載し、定期実行したい日にちや時間等を設定します。
実行ファイルパスに、先ほど作成したファイルパスを記載します。

python/hello.py

LINE Notify

LINEにつぶやくには、LINE Notifyを使用すればよいです。
参考URL https://www.smilevision.co.jp/blog/tsukatte01/

LINE Notifyで生成したトークンをhttps://notify-api.line.me/api/notifyにPOST送信してやれば、LINEでつぶやくことができます。

以下、サンプルプログラムです。

import urllib.request
import sys

LINE_TOKEN = "<生成したトークン>"
LINE_NOTIFY_URL = "https://notify-api.line.me/api/notify"

def line_notify(msg):
    method = "POST"
    headers = {"Authorization": "Bearer %s" % LINE_TOKEN}
    payload = {"message": msg}
    try:
        payload = urllib.parse.urlencode(payload).encode("utf-8")
        req = urllib.request.Request(
            url=LINE_NOTIFY_URL,
            data=payload,
            method=method,
            headers=headers)
        urllib.request.urlopen(req)
    except Exception as e:
        print ("Exception Error: ", e)
        sys.exit(1)

msg変数につぶやきたいメッセージを入れて、line_notify()関数を呼べば、LINEでつぶやいてくれます。

コメント

タイトルとURLをコピーしました