由于某学習プラットフォームは、腾讯云と阿里云の 2 つのサービスプロバイダの IP をブロックしているため、私は 2015 年に購入したアンティークの Raspberry Pi 3B を引っ張り出してスクリプトを実行するために使用しました。
私の Raspberry Pi は 24 時間絶えず電力供給されていないため、常にオンラインであることを保証することができません。そのため、起動時に自動的にスクリプトを起動することを望んでいます。
そして、私はスクリプトがサインインがある場合にのみServer 酱を通じて通知されることを望んでいます。
システムのフラッシュ#
正直言って、SD カードは今では非常に珍しいものですが、私は家中を探し回ってようやく 8GB のジャンクカードを見つけました。ただし、使用できれば問題ありません。Raspberry Pi にシステムをフラッシュするのは本当に便利で、公式のソフトウェアを使用するだけです。
Python2 を削除して Python3 に切り替える#
スクリプトを直接実行できると思っていたときに、Raspberry Pi がデフォルトで Python2 を使用していることがわかりました。そのため、2 番目のステップでは Python2 を削除して Python3 に切り替えます。ターミナルで次のコマンドを実行します。
sudo apt remove python # Python2をアンインストールする
sudo apt autoremove # Python2をクリーンアップする
sudo apt install python3 # 通常、システムには既にPython3がインストールされていますので、このステップはスキップできます
sudo ln -s /usr/bin/python3.7 /usr/bin/python # 新しいリンクを作成してPython3を指す
スクリプトのクローン#
git clone https://hub.fastgit.org/mkdir700/chaoxing_auto_sign.git # GitHubのアクセラレーションソースを使用しています
スクリプトの設定とテスト実行#
chaoxing_auto_sign/local/config.py
に移動して、スクリプトを設定します。
次に、ターミナルでcd {パスを入力}/chaoxing_auto_sign/local/
を実行し、python main.py timing
を使用してスクリプトをテスト実行します。
準備が整いましたので、本文の本命に入りましょう。
Screen のインストール#
ターミナルで次のコマンドを実行します。
sudo apt install screen
起動時にスクリプトを自動実行する#
/home/pi/Desktop/
にstart.sh
を作成し、編集と検索を容易にするためのファイルを作成し、以下の内容を記述します。
#!/bin/sh
CreateScreen()
{
screen -dmS $1
screen -x -S $1 -p 0 -X stuff "$2"
screen -x -S $1 -p 0 -X stuff '\n'
}
CreateScreen "chaoxing" "/home/pi/Desktop/chaoxing.sh"
/home/pi/Desktop/
にchaoxing.sh
を作成し、編集と検索を容易にするためのファイルを作成し、以下の内容を記述します。
#!/bin/sh
cd {パスを入力}/chaoxing_auto_sign/local/
python main.py timing
ターミナルで次のコマンドを実行します。
sudo nano /etc/rc.local
exit 0
の上に以下のコードを挿入して、システムが起動時にstart.sh
を自動実行するようにします。
su pi -c "exec /home/pi/Desktop/start.sh"
編集が完了したら、キーボードショートカットCtrl+O
を押して Enter キーを押して保存し、その後 Raspberry Pi を再起動することができます。再起動後、ターミナルで次のコマンドを入力します。
screen -r chaoxing
スクリプトが正常に実行されているかどうかを確認します。
(拡張)サインイン時にのみ Server 酱を通知する#
2021 年 9 月 17 日:Python があまりわからないので、変更した後、サインインに成功しても通知されないようです。
スクリプトはデフォルトで実行するたびに通知を行いますが、頻度が非常に高くて非常に迷惑です。そのため、この変更を行います。
chaoxing_auto_sign\local\message.py
のコードを以下のように変更します。
from datetime import datetime
import aiohttp
from config import SERVER_CHAN_SEND_KEY
async def server_chan_send(dataset):
"""server酱にメッセージを送信する"""
if SERVER_CHAN_SEND_KEY == '':
return
msg = ("| アカウント | コース名 | サインイン時間 | サインインステータス |\n"
"| :----: | :----: | :------: | :------: |\n")
msg_template = "| {} | {} | {} | {} |"
for datas in dataset:
if datas:
for data in datas:
msg += msg_template.format(data['username'], data['name'], data['date'], data['status'])
params = {
'title': msg,
'desp': msg
}
async with aiohttp.ClientSession() as session:
async with session.request(
method="GET",
url="https://sctapi.ftqq.com/{}.send?title=messagetitle".format(SERVER_CHAN_SEND_KEY),
params=params
) as resp:
text = await resp.text()
else:
msg = "現在、サインインタスクはありません!\{}".format(datetime.now().strftime('%Y年%m月%d日 %H:%M:%D'))
break