Nexmoe

Nexmoe

一个开发者。关于勇敢与热爱,互联网/创造/赛博朋克
twitter
github

在树莓派上挂自挂签到脚本

由于某学習プラットフォームは、腾讯云と阿里云の 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を使用してスクリプトをテスト実行します。

gif

準備が整いましたので、本文の本命に入りましょう。

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
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。