banner
sakiko🐘

sakiko🐘

可怜的孩子 不再胆怯
twitter
twitter
discord server

クラウドサーバー自動追跡

この半年間、私は次元図書館でアニメを追いかけていましたが、最近彼女に問題が発生し、アニメが更新されなくなったため、自分でこの追跡ツール小祥の小窝を作ることにしました。

小窝を構築していた数日間は本当に手探りで混乱していましたが、問題が少しずつ解決していくと本当に嬉しかったです。この喜びがこの小さな文章を通じて伝わればいいなと思っています。実際、自分もこのプロセスを楽しんでいました。

この小窝の材料は:

  • 月額 3 ドルの 1 コア 1G、ハードディスク 10G、月間トラフィック 500G、帯域幅 50Mbps のサーバーで、宝塔パネルがインストールされています。
  • porkbun で購入した.top ドメイン、初年度 1.6 ドル、更新料 4.9 ドル。
  • 勇敢な心。

この小窝の構造は:

  • Rclone を使用して Onedrive をマウントし、アニメを保存。
  • qBittorrent が RSS を通じてアニメを自動ダウンロード。
  • qBittorrent のダウンロード完了後に自動的に Onedrive にアップロードするように設定。
  • 最後に AList を使用して Onedrive を Web 上で表示。

この小窝の構築プロセスは:

Microsoft E5 アカウントを取得し、Onedrive を設定#

参考

白嫖微软 E5 开发者 免费使用 Office 正版、OneDrive 5T 存储空间! PDF

Microsoft の E5 開発者アカウントを使用すると、Onedrive のストレージスペース 5T*26(主アカウントと 25 のサブアカウントそれぞれに 5T)が無料で利用できます。

E5 開発者アカウントの申請#

公式サイトにアクセスし、join now をクリックして申請します https://developer.microsoft.com/en-us/microsoft-365/dev-program 、ガイドに従って進めば大丈夫です。

image-20231201130634905

申請が完了すると、この画面にリダイレクトされます。

image-20231201133121617

ここで、先ほど申請した開発者アカウントの主アカウントが表示されます。「ユーザー名 @ドメイン.onmicrosoft.com」

サブアカウントと Onedrive の設定#

(実際には主アカウントを直接使用することもできますが、新しいサブアカウントを作成する方が良いと感じます)

現在、Microsoft 365 管理センターのユーザー管理ページにアクセスします
https://admin.microsoft.com/#/users

image-20231201135840739

「Add a user」をクリックしてサブアカウントを追加します。

image-20231201142400248

次に、この「Assign product licenses」の部分はどう記入すればいいのか分かりませんが、実際には私のサブアカウントは自動的に作成されており、こう記入されていました。

image-20231201142839550

その後、次へ進んで追加を完了します。

サブアカウントを追加した後、サブアカウントをクリックし、ポップアップのアカウント管理ページで OneDrive をクリックし、Storage used を見つけて Edit をクリックすると、ストレージを 5T に設定できます。ユーザー作成時のデフォルトストレージは 1T で、Manage default storage をクリックして変更することもできます。

image-20231201141527828

今、サブアカウントで Onedrive にログインすると、5T のストレージが表示されます。

image-20231202103427211

E5 の更新問題について#

E5 開発者アカウントの初回サブスクリプションでは 90 日のサブスクリプション期間が付与され、更新には厳密な条件はありません。重要なのは、Microsoft のアルゴリズムが私たちが開発活動を行っていると見なすかどうかです。

その後使用する rclone と alist は、毎日アニメをアップロードダウンロードするために自分が作成したアプリの API を呼び出す必要があるため、自動更新の成功率はかなり高いはずです。

自動更新が失敗した場合でも、30 日間のデータ保持期間があり、別の E5 アカウントを申請してデータを移行することができます。また、私に連絡して保存を手伝ってもらうこともできます()。自動更新が失敗してから 60 日後には再度 E5 アカウントを申請できるようです。

Microsoft Authenticator の認証を無効にする#

アカウント作成後、ログイン時にこの画面が表示されることがあります。

Pasted image 20231110230940

Office365 強制 Microsoft Authenticator 验证登录如何关闭_office365 双重验证_高远科技 - Project 软件服务的博客 - CSDN 博客
上記を参考にしてください。ただし、設定画面は変更されている可能性があるため、再度探ってみました。

Microsoft 365 admin centerのメニューで「Show all」をクリックし、Identityを見つけます。

image-20231201150626196

クリックするとMicrosoft Entra 管理センターに入ります。

image-20231201151733639

「アイデンティティ - 概要 - 属性」を見つけ、ページの最後で「管理セキュリティの既定」をクリックして無効に設定します。

image-20231201151834072

この時点で再度ログインすると、Microsoft Authenticator の認証が表示されなくなります。

Rclone で Onedrive をマウント#

参考

Linux 上使用 Rclone 挂载 OneDrive 或 GoogleDrive 并设置开机自启 - 知乎 PDF

在 Debian/Ubuntu 上使用 rclone 挂载 OneDrive 网盘 - Rat's Blog PDF

Rclone 进阶使用教程 – 自建私有 API 挂载 OneDrive | 安云网 – AnYun.ORG PDF

Rclone に付属の API(ID とキーは空白のままでも可)を使用することも、自分で API を作成してマウントすることもできます。自作 API の方が E5 の更新に役立つと思います。

Windows コンピュータに Rclone をダウンロードしてトークンを取得します。ダウンロードリンクはhttps://rclone.org/downloads/ です。

Linux に Rclone をインストールするには:curl https://rclone.org/install.sh | bash

自作プライベート API#

自作プライベート API では、クライアント ID:client_idクライアントシークレット:client_secretを取得する必要があります。

https://portal.azure.com/#home にログインし、主アカウントとサブアカウントを区別し、どのアカウントの Onedrive をマウントするかを決めてください。

アプリ登録を検索し、サービス - アプリ登録をクリックして新規登録をクリックします。
名前は rclone(適当に設定)と入力します。
サポートされるアカウントの種類:任意の組織ディレクトリ (...) 内のアカウントと個人の Microsoft アカウント (...) を選択します。
リダイレクト URI:Web http://localhost

Pasted image 20231119113214

登録が完了すると、アプリケーション(クライアント)ID(client_id)が得られます。

image-20231201180737360

次に「証明書とパスワード」を選択し、「新しいクライアントパスワード」をクリックします。説明は適当に書いても構いません。最も長い期間を選択し、「追加」をクリックします。

image-20231201181420468

その後、クライアントパスワード client_secret を取得します。

image-20231201182019817

(注:client_secret は「値」であり、「機密 ID」ではありません。追加後にパスワードが消えるため、早めに記録してください。)

API 権限の設定
API権限をクリックし、「Microsoft Graph」をクリックして、Files.ReadFiles.ReadWriteFiles.Read.AllFiles.ReadWrite.Alloffline_accessUser.Readの権限を追加します(検索して追加できます)。

image-20231201182619972

権限を更新した後、再度権限を確認します。

Pasted image 20231119121121

Rclone を使用して自作 API で Onedrive をマウント#

トークンの取得

ローカルコンピュータに rclone をダウンロードします。Windows の例として、解凍してrclone.exeがあるフォルダに移動し、エクスプローラーのアドレスバーにcmdと入力して Enter を押すと、現在のパスでコマンドプロンプトが開きます。

前のステップで取得したクライアント ID:client_idクライアントシークレット:client_secretを使用して、以下のコマンドのClient_IDClient_secretを置き換えて実行します。
rclone authorize "onedrive" "Client_ID" "Client_secret"

ブラウザに表示される Microsoft のログインウィンドウにログインして承認すると(ログインするアカウントを間違えないように注意)、コマンドプロンプトウィンドウにトークンが表示されるので、コピーして保存します。

Rclone 接続設定

Linux でrclone configコマンドを入力し、指示に従って設定します。
TIPS: RCLONE は時々更新されるため、この記事を読んでいる時点でメニューオプションがわずかに変更されている可能性がありますが、基本的な考え方は変わりません。無思考で操作を真似しないでください。

[root@xxxxxxx ~]# rclone config
2023/11/10 11:51:37 NOTICE: Config file "/root/.config/rclone/rclone.conf" not found - using defaults
No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n #ここでnを入力して接続を作成

Enter name for new remote.
name> onedrive #名前を入力します。ここではonedrive(自由に記入可)

Option Storage.
Type of storage to configure.
Choose a number from below, or type in your own value.
 1 / 1Fichier
   \ (fichier)
 2 / Akamai NetStorage
   \ (netstorage)
 3 / Alias for an existing remote
   \ (alias)
 4 / Amazon Drive
   \ (amazon cloud drive)
....
31 / Microsoft OneDrive
   \ (onedrive)
....
Storage> 31 #31を選択、Microsoft OneDriveを選択します。注意:このシーケンス番号は随時変わるので、よく確認してから入力してください。

Option client_id.
OAuth Client Id.
Leave blank normally.
Enter a value. Press Enter to leave empty.
client_id> xxxx-xxx #!!!自作APIのクライアントID:client_idを入力します。

Option client_secret.
OAuth Client Secret.
Leave blank normally.
Enter a value. Press Enter to leave empty.
client_secret> xxxx-xxx #!!!自作APIのクライアントシークレット:client_secretを入力します。

Option region.
Choose national cloud region for OneDrive.
Choose a number from below, or type in your own string value.
Press Enter for the default (global).
 1 / Microsoft Cloud Global
   \ (global)
 2 / Microsoft Cloud for US Government
   \ (us)
 3 / Microsoft Cloud Germany
   \ (de)
 4 / Azure and Office 365 operated by Vnet Group in China
   \ (cn)
region> 1 #そのままEnterを押すか1を入力します。

Edit advanced config?
y) Yes
n) No (default)
y/n> n #そのままEnterを押すかnを入力します。

Use web browser to automatically authenticate rclone with remote?
 * Say Y if the machine running rclone has a web browser you can use
 * Say N if running rclone on a (remote) machine without web browser access
If not sure try Y. If Y failed, try N.

y) Yes (default)
n) No
y/n> n #nを入力します。

Option config_token.
For this to work, you will need rclone available on a machine that has
a web browser available.
For more help and alternate methods see: https://rclone.org/remote_setup/
Execute the following on the machine with the web browser (same rclone
version recommended):
        rclone authorize "onedrive"
Then paste the result.
Enter a value.
config_token> #先ほど取得したトークンを入力します。

Option config_type.
Type of connection
Choose a number from below, or type in an existing string value.
Press Enter for the default (onedrive).
 1 / OneDrive Personal or Business
   \ (onedrive)
 2 / Root Sharepoint site
   \ (sharepoint)
   / Sharepoint site name or URL
 3 | E.g. mysite or https://contoso.sharepoint.com/sites/mysite
   \ (url)
 4 / Search for a Sharepoint site
   \ (search)
 5 / Type in driveID (advanced)
   \ (driveid)
 6 / Type in SiteID (advanced)
   \ (siteid)
   / Sharepoint server-relative path (advanced)
 7 | E.g. /teams/hr
   \ (path)
config_type> 1 #1を入力してOneDriveを選択します。

Option config_driveid.
Select drive you want to use
Choose a number from below, or type in your own string value.
Press Enter for the default (xxxxxx).
 1 / OneDrive (business)
   \ (xxxxxx)
config_driveid> 1 #プロンプトに従って1を選択します。

Drive OK?

Found drive "root" of type "business"
URL: https://xxxx-my.sharepoint.com/personal/xxx_xxxx_onmicrosoft_com/Documents

y) Yes (default)
n) No
y/n> y #yを入力します。

Configuration complete.
Options:
- type: onedrive
- token: {"access_token":xxxxxxxxx}
- drive_id: xxxxxx
- drive_type: business
Keep this "onedrive" remote?
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y #yを入力します。

Current remotes:

Name                 Type
====                 ====
onedrive             onedrive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q #qを選択して終了します。

Onedrive をマウント

マウントディレクトリを作成し、個人の好みに応じて場所を選択します。私は /home/onedrive を選びました。

#新しいローカルフォルダを作成します。パスは自分で決めてください。以下のLocalFolder
mkdir /home/onedrive

#ディスクとしてマウントします。以下のDriveName、Folder、LocalFolderのパラメータは説明に従って置き換えてください。
rclone mount DriveName:Folder LocalFolder --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000

#私のコマンドは
rclone mount onedrive:/ /home/onedrive --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000

DriveNameは初期設定で入力したnameFolderOneDrive内のフォルダ、LocalFolderVPS上のローカルフォルダです。

マウント中にNOTICE: One drive root 'test': poll-interval is not supported by this remoteエラーが表示された場合は、無視しても構いません。

"fusermount3" を含むエラーが表示された場合は、fuse3 をインストールする必要があります:yum install fuse3

マウントコマンドを実行した後、新しいターミナルウィンドウでdf -hコマンドを入力して確認します。

image-20231202102411407

マウントが成功したことを確認したら、ctrl+cで停止するか、マウントコマンドを実行しているウィンドウを閉じ、起動時の自動起動を設定します。

起動時の自動起動#

systemctlコマンドを使用する Linux に適しています。

#以下を、上記の手動実行コマンドのrclone以外のすべてのパラメータに変更します。
command=" mount onedrive:/ /home/onedrive  --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000"
#以下は一つのコマンドです。SSHクライアントにコピーして実行します。
cat > /etc/systemd/system/rclone.service <<EOF
[Unit]
Description=Rclone
After=network-online.target

[Service]
Type=simple
ExecStart=$(command -v rclone) ${command}
Restart=on-abort
User=root

[Install]
WantedBy=default.target
EOF

起動:systemctl start rclone
起動時の自動起動を設定: systemctl enable rclone
再起動:systemctl restart rclone
停止:systemctl stop rclone
状態:systemctl status rclone

再起動して、問題がなければ、rclone の Onedrive マウントが完了です。

qBittorrent-nox のインストールと設定#

参考

qBittorrent+Rclone 实现自动上传到 Onedrive,Google Drive 等储存,并自动删除本地文件 – 极客轩 PDF

yum でインストールした qb のバージョンが古すぎる(AutoBangumi が接続できず、長い間困っていました)、コンパイルインストールは面倒で大きなメモリが必要なようなので、実行可能な qb を使用します。これは上記の記事で言及されているものです。
Releases · userdocs/qbittorrent-nox-static

qbittorrent-nox のインストール#

#ダウンロード
wget "https://github.com/userdocs/qbittorrent-nox-static/releases/download/release-4.6.0_v2.0.9/x86_64-qbittorrent-nox"
#プログラムディレクトリに移動し、qbittorrent-noxに名前を変更
mv ./x86_64-qbittorrent-nox /usr/bin/qbittorrent-nox
#実行権限を付与
chmod a+x /usr/bin/qbittorrent-nox

qb の初期化

完了後、qbittorrent-noxコマンドを実行し、yと入力して Enter を押して利用規約を確認します。http://サーバーのパブリックIPアドレス:8080にアクセスして qb を制御します。8080 ポートを開放する必要があります。

Web UI の初期ユーザー名はadmin、初期パスワードはadminadminです。ログイン後、すぐに新しいユーザー名とパスワードを設定して保存します。

image-20231202113937707

すべてが正常であれば、ターミナルでCtrl + Cを押して qb を停止し、起動時の自動起動を設定します。

起動時の自動起動を設定

cat > /etc/systemd/system/qbittorrent.service << EOF
[Unit]
Description=qBittorrent Daemon Service
After=network.target

[Service]
LimitNOFILE=512000
User=root
ExecStart=/usr/bin/qbittorrent-nox
ExecStop=/usr/bin/killall -w qbittorrent-nox

[Install]
WantedBy=multi-user.target

EOF

起動:systemctl start qbittorrent
起動時の自動起動を設定: systemctl enable qbittorrent

これで qBittorrent-nox のインストールはほぼ完了です。以下は自分の状況に応じた設定です。

qBittorrent-nox の設定

qb のリスニングポートを開放します。

image-20231202114747908

image-20231202115159633

ダウンロード - すべてのファイルにディスクスペースを事前に割り当てて、ダウンロードスペースが不足しないようにします。

速度 - グローバル速度制限を設定し、ダウンロード速度を制限して、後で設定する Onedrive への自動アップロードに追いつけるようにします。

BitTorrent - トレントのキューを設定し、最大アクティブダウンロード数を 1 に設定します。

BTTracker:https://github.com/XIU2/TrackersListCollection/blob/master/README-ZH.md

ダウンロード完了後の自動アップロード#

自動アップロードスクリプトの準備

自動アップロードスクリプト:qBittorrent+Rclone 实现自动上传到 Onedrive,Google Drive 等储存,并自动删除本地文件 – 极客轩

アニメを適切なディレクトリに保存するために、少し修正を加えました:qb_auto.sh

スクリプトの設定を自分の情報に合わせて修正し、スクリプトをサーバーにアップロードしました。私は/root/qbauto/qb_auto.shに保存しました。

スクリプトに実行権限を付与します chmod a+x /root/qbauto/qb_auto.sh

#!/bin/bash
torrent_name=$1
content_dir=$2
root_dir=$3
save_dir=$4
files_num=$5
torrent_size=$6
file_hash=$7
qb_version="4.6.0"    # 自分のqbitバージョンに変更
qb_username="xxxxxx"    # qbitユーザー名
qb_password="xxxxxxxxx"    # qbitパスワード
qb_web_url="http://localhost:8080"    # qbit webuiアドレス
leeching_mode="true"    # 吸血モード、trueはダウンロード完了後にローカルのトレントとファイルを自動削除
log_dir="/root/qbauto"    # ログ出力ディレクトリ
rclone_dest="onedrive"    # rclone設定のストレージ名
rclone_parallel="32"    # qbitアップロードスレッド、デフォルトは4
auto_del_flag="rclone"    # アップロード済みのトレントを識別するためのタグまたはカテゴリを追加 v4.0.4+バージョンでは「rclone」タグを追加、低バージョンでは「rclone」カテゴリを追加して識別
# 上記のパラメータを変更すれば良いです。

# 2023-11-15, Sakikoによる追加
# クラウドの保存パス、ホスト上のダウンロードパスからクラウドの保存パスを抽出
# 例えばダウンロードパスが/root/Downloads/Sakiko/Bangumi/xxxの場合、/Sakiko/Bangumi/xxxを抽出し、クラウドにこのパスで保存します。
# 自分のダウンロードパスに応じて「/root/Downloads」を変更してください。
rclone_dest_save_dir=${save_dir#*/root/Downloads}

if [ ! -d ${log_dir} ]
then
        mkdir -p ${log_dir}
fi

version=$(echo $qb_version | grep -P -o "([0-9]\.){2}[0-9]" | sed s/\\.//g)

function qb_login(){
        if [ ${version} -gt 404 ]
        then
                qb_v="1"
                cookie=$(curl -i --header "Referer: ${qb_web_url}" --data "username=${qb_username}&password=${qb_password}" "${qb_web_url}/api/v2/auth/login" | grep -P -o 'SID=\S{32}')
                if [ -n ${cookie} ]
                then
                        echo "[$(date '+%Y-%m-%d %H:%M:%S')] ログイン成功!cookie:${cookie}" >> ${log_dir}/autodel.log

                else
                        echo "[$(date '+%Y-%m-%d %H:%M:%S')] ログイン失敗!" >> ${log_dir}/autodel.log
                fi
        elif [[ ${version} -le 404 && ${version} -ge 320 ]]
        then
                qb_v="2"
                cookie=$(curl -i --header "Referer: ${qb_web_url}" --data "username=${qb_username}&password=${qb_password}" "${qb_web_url}/login" | grep -P -o 'SID=\S{32}')
                if [ -n ${cookie} ]
                then
                        echo "[$(date '+%Y-%m-%d %H:%M:%S')] ログイン成功!cookie:${cookie}" >> ${log_dir}/autodel.log
                else
                        echo "[$(date '+%Y-%m-%d %H:%M:%S')] ログイン失敗" >> ${log_dir}/autodel.log
                fi
        elif [[ ${version} -ge 310 && ${version} -lt 320 ]]
        then
                qb_v="3"
                echo "古いバージョンです。早急にアップグレードしてください。"
                exit
        else
                qb_v="0"
                exit
        fi
}

function qb_del(){
        if [ ${leeching_mode} == "true" ]
        then
                if [ ${qb_v} == "1" ]
                then
                        curl -X POST -d "hashes=${file_hash}&deleteFiles=true" "${qb_web_url}/api/v2/torrents/delete" --cookie ${cookie}
                        echo "[$(date '+%Y-%m-%d %H:%M:%S')] 削除成功!トレント名:${torrent_name}" >> ${log_dir}/qb.log
                elif [ ${qb_v} == "2" ]
                then
                        curl -X POST -d "hashes=${file_hash}&deleteFiles=true" "${qb_web_url}/api/v2/torrents/delete" --cookie ${cookie}
                else
                        curl -X POST -d "hashes=${file_hash}&deleteFiles=true" "${qb_web_url}/api/v2/torrents/delete" --cookie ${cookie}
                        echo "[$(date '+%Y-%m-%d %H:%M:%S')] 削除成功!トレントファイル:${torrent_name}" >> ${log_dir}/qb.log
                        echo "qb_v=${qb_v}" >> ${log_dir}/qb.log
                fi
        else
                echo "[$(date '+%Y-%m-%d %H:%M:%S')] アップロード済みトレントを自動削除しません" >> ${log_dir}/qb.log
        fi
}

# 2023-11-15, Sakikoによるコメント
# function rclone_copy(){
#         if [ ${type} == "file" ]
#         then
#                 rclone_copy_cmd=$(rclone -v copy --transfers ${rclone_parallel} --log-file  ${log_dir}/qbauto_copy.log "${content_dir}" ${rclone_dest}:/qbit/)
#         elif [ ${type} == "dir" ]
#         then
#                 rclone_copy_cmd=$(rclone -v copy --transfers ${rclone_parallel} --log-file ${log_dir}/qbauto_copy.log "${content_dir}"/ ${rclone_dest}:/qbit/"${torrent_name}")
#         fi
# }

# 2023-11-15, Sakikoによる追加
# rclone_copy関数を修正し、クラウドにアップロードする際にカスタマイズされた自動抽出後のダウンロードパスに保存します。
function rclone_copy(){
        if [ ${type} == "file" ]
        then
                rclone_copy_cmd=$(rclone -v copy --transfers ${rclone_parallel} --log-file  ${log_dir}/qbauto_copy.log "${content_dir}" ${rclone_dest}:"${rclone_dest_save_dir}"/)
        elif [ ${type} == "dir" ]
        then
                rclone_copy_cmd=$(rclone -v copy --transfers ${rclone_parallel} --log-file ${log_dir}/qbauto_copy.log "${content_dir}"/ ${rclone_dest}:"${rclone_dest_save_dir}"/"${torrent_name}")
        fi
}

function qb_add_auto_del_tags(){
        if [ ${qb_v} == "1" ]
        then
                curl -X POST -d "hashes=${file_hash}&tags=${auto_del_flag}" "${qb_web_url}/api/v2/torrents/addTags" --cookie "${cookie}"
        elif [ ${qb_v} == "2" ]
        then
                curl -X POST -d "hashes=${file_hash}&category=${auto_del_flag}" "${qb_web_url}/command/setCategory" --cookie ${cookie}
        else
                echo "qb_v=${qb_v}" >> ${log_dir}/qb.log
        fi
}
 
if [ -f "${content_dir}" ]
then
   echo "[$(date '+%Y-%m-%d %H:%M:%S')] タイプ:ファイル" >> ${log_dir}/qb.log
   type="file"
   rclone_copy
   qb_login
   qb_add_auto_del_tags
   qb_del
#   rm -rf ${content_dir}
elif [ -d "${content_dir}" ]
then 
   echo "[$(date '+%Y-%m-%d %H:%M:%S')] タイプ:ディレクトリ" >> ${log_dir}/qb.log
   type="dir"
   rclone_copy
   qb_login
   qb_add_auto_del_tags
   qb_del
#   rm -rf ${content_dir}
else
   echo "[$(date '+%Y-%m-%d %H:%M:%S')] 不明なタイプ、アップロードをキャンセル" >> ${log_dir}/qb.log
fi
 
echo "トレント名:${torrent_name}" >> ${log_dir}/qb.log
echo "コンテンツパス:${content_dir}" >> ${log_dir}/qb.log
echo "ルートディレクトリ:${root_dir}" >> ${log_dir}/qb.log
echo "保存パス:${save_dir}" >> ${log_dir}/qb.log
echo "ファイル数:${files_num}" >> ${log_dir}/qb.log
echo "ファイルサイズ:${torrent_size}Bytes" >> ${log_dir}/qb.log
echo "HASH:${file_hash}" >> ${log_dir}/qb.log
echo "Cookie:${cookie}" >> ${log_dir}/qb.log
echo -e "-------------------------------------------------------------\n" >> ${log_dir}/qb.log

qb の自動アップロード設定

qbit の設定に移動し、ダウンロードオプションでトレント完了時に外部プログラムを実行するオプションを見つけ、チェックを入れ、以下のコマンドを入力します。/root/qbauto/qb_auto.shは私のスクリプトのパスで、あなたのものに変更してください。最後に保存します。

bash /root/qbauto/qb_auto.sh  "%N" "%F" "%R" "%D" "%C" "%Z" "%I"

image-20231202140049439

これで自動アップロード機能が実現しました。マグネットリンクを試してみてください。

申し訳ないことに、ずっと吸血していて本当にごめんなさい。ハードディスクが本当に小さくて🥺、ハードディスクを追加すると毎月 1 ドル余分にかかります😢

RSS を通じてアニメをダウンロード#

実際、今は AutoBangumi を使ってダウンロードしています。しかし、作者が法律などの問題を心配しているとツイートしていたので、少し罪悪感を感じています。やはり控えめに使った方が良いでしょう。

AB は必須ではなく、qb にも RSS 購読機能がありますが、少し面倒です。

主に以下のアニメダウンロードサイトを使用しています:

一、蜜柑計画
ウェブサイトアドレス : https://mikanani.me/ https://mikanime.tv/

二、アニメ花園
ウェブサイトアドレス : https://share.dmhy.org/

【ウェブサイトのお気に入り】アニメダウンロードサイトの推奨

蜜柑計画を通じてアニメをダウンロード

ホームページのリンクを通じて、または検索してアニメのページにアクセスし、好きな字幕グループを選択します(個人的には ANI が好きです)。

image-20231202155743825

次に RSS アイコンをクリックし、遷移したページでアドレスをコピーします。

image-20231202160042198

自分の qb を開き、右上の RSS をクリックし、新しい RSS 購読をクリックして、先ほどコピーしたリンクを入力して確定します。

image-20231202174134105

RSS 購読が追加された後、右上の RSS ダウンローダーをクリックし、プラスボタンをクリックしてダウンロードルールを追加し、名前を付けます。

image-20231202175759335

RSS 購読が追加された後、ルールを設定します。保存先ディレクトリを設定し、正しい購読元アプリケーションルールを選択します。
また、\d+-\dを含まないように設定して、シリーズをダウンロードしないようにします(蜜柑の [ANI] は通常シリーズがありませんが、追加しておくと良いでしょう)。

image-20231202190613753

保存をクリックすると、右側に一致するアニメが表示され、ダウンロードが開始されます。

ダウンロードが完了した後、自動アップロードスクリプトが設定した保存パスに基づいて Onedrive の/Sakiko/Bangumi/狩龍人ラグナ/Season 1ディレクトリにアップロードされます。

RSS 購読源の更新間隔はデフォルトで 30 分です。オプション - RSS で設定できます。30 分ごとにアニメの更新をチェックしてダウンロードします。

簡繁フィルタリング

蜜柑には簡体字と繁体字の字幕グループがある場合があり、その場合は簡体字を含む必要があります。より複雑なフィルタリングには正規表現を使用できます。

アニメ花園のアニメダウンロード

アニメ花園では、検索を柔軟に使用してアニメをフィルタリングし、RSS を取得します。

image-20231202192855184

AList を使用して Onedrive をマウントする#

Github Repo not found

The embedded github repo could not be found…

Home | AList 文書

インストール#

公式のチュートリアルに従ってインストールします。私は Docker を使用してインストールしました。

公式チュートリアル:https://alist.nn.ci/zh/guide/install/docker.html

# docker-cli
docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" xhofe/alist:latest

# インストール完了後、手動でパスワードを設定する必要があります。
# ランダムにパスワードを生成
docker exec -it alist ./alist admin random
# 手動でパスワードを設定、`NEW_PASSWORD`は設定したいパスワードを指します。
docker exec -it alist ./alist admin set NEW_PASSWORD

インストール後、http://サーバーのパブリックIPアドレス:5244にアクセスして Alist にログインします。ユーザー名は admin、パスワードは先ほど設定したものです。

image-20231202194715507

ログイン後、ページ下部の管理をクリックして再度ユーザー名とパスワードを設定し、アイコンやタイトルも設定できます。

Onedrive をマウント#

公式チュートリアル:https://alist.nn.ci/zh/guide/drivers/onedrive.html

AList 管理ページでストレージを選択し、追加をクリックしてドライバーを Onedrive に選択すると、以下のページが表示されます。

image-20231202201004366

これらのオプションの中で、主に取得する必要があるのはクライアント ID、クライアントシークレット、リフレッシュトークンです。

これらは上記の Rclone で Onedrive をマウントする際に取得したものと同じ性質のもので、上記のようにアプリを作成して取得する必要があります。

少し異なる点は、公式チュートリアルを確認することです https://alist.nn.ci/zh/guide/drivers/onedrive.html 、アプリ登録時のリダイレクト URL は https://alist.nn.ci/tool/onedrive/callback です。

アプリを登録した後、クライアント ID、クライアントシークレットを取得し、https://alist.nn.ci/tool/onedrive/request に記入するとリフレッシュトークンが得られます。

これでOnedrive の追加内容を記入できます。

ドライバー		onedrive
マウントパス	/onedrive	#AListインターフェースの/onedriveディレクトリにマウント
シリアル番号		デフォルトは0
備考		
キャッシュの有効期限	デフォルトは30
Webプロキシ	デフォルトはオフ
WebDAVポリシー	デフォルトは302リダイレクト
ダウンロードプロキシURL		デフォルトは空
ソート		デフォルトは空
ソート方法		デフォルトは空
抽出フォルダ	デフォルトは空
署名を有効にする	デフォルトはオフ
ルートフォルダパス	/	#OnedriveのルートパスをAListインターフェースの/onedriveディレクトリにマウント(上記で設定したマウントパス)
地域		グローバル
Sharepointかどうか	いいえ
クライアントID	先ほど取得したものを記入
クライアントシークレット	先ほど取得したものを記入
リダイレクトUri	https://alist.nn.ci/tool/onedrive/callback
リフレッシュトークン	先ほど取得したものを記入
サイトID	デフォルトは空
分割サイズ	デフォルトは5

追加をクリックして完了します。

image-20231202205435281

今、ホームページにアクセスすると Onedrive フォルダが表示されます。

image-20231202210120707

ゲスト設定#

現在、自分の AList はログイン後にしか表示できませんが、ゲストアカウントを設定することでログインせずに表示できるようにします。

AList 管理ページでユーザーを選択し、ゲストアカウントを有効にします。

image-20231202210750990

基本パスを設定することで、指定したディレクトリをホームページにすることができます。現在、ゲストが見るディレクトリは Sakiko です。

image-20231202211052419

以下の紹介については、Onedrive の / Sakiko ディレクトリに readme.md をアップロードすれば完了です。

今のところ、IP + ポート番号でアクセスしていますが、リバースプロキシを設定すればドメインでアクセスできるようになります。

リバースプロキシを設定してドメインをマッピング#

AList の公式チュートリアルを参照してください:https://alist.nn.ci/zh/guide/install/reverse-proxy.html

宝塔パネルを使用している場合は非常に簡単で、qbittorrent にも同様に設定できます。

最終的な効果はこのようになります。オンラインで視聴またはダウンロードでき、速度は比較的速いです。サーバーのトラフィックを経由せず、直接 Onedrive からダウンロードされるため(おそらく WebDAV ポリシー 302 リダイレクト?)、これは非常に良い点です。

image-20231202212136159

F-_m7xZaYAE0LgZ

その他#

qb がダウンロードしていないときに再起動#

私は宝塔パネルで毎週月曜日の午前中にサーバーを再起動するように設定していますが、qb にダウンロードタスクがあると問題が発生する可能性があります。

そのため、再起動スクリプト内でダウンロードディレクトリにファイルが残っているかどうかを判断し、ファイルがない場合はダウンロードタスクがないことを示し、再起動します。

#!/bin/bash  
  
folder="/root/Downloads"  
files=$(find "$folder" -type f)  

echo "$(date +%Y-%m-%d)"
if [ -n "$files" ]; then  
    echo "ダウンロード中の疑い:"  
    echo "$files"  
    echo "再起動をキャンセル"
else  
    echo "状態正常、再起動を実行"  
    reboot
fi

Alist のページが遅い問題を解決#

Alist 管理バックエンド - 設定 - グローバルで、カスタムヘッダーコンテンツを阿里云 CDN に置き換えます Alist のページが遅い、読み込みが遅い問題を解決 - 哔哩哔哩

元のヘッダー:<script src="https://polyfill.io/v3/polyfill.min.js?features=String.prototype.replaceAll"></script>
阿里云:<script src="https://polyfill.alicdn.com/v3/polyfill.min.js?features=String.prototype.replaceAll"></script>

後記#

ああ、ついに書き終えました。その中には多くのバカなところがあるかもしれませんが、皆さんに教えていただければ幸いです。

小窝のインスピレーションは、次元図書館の館長の私のアニメ追跡解決策から来ています。最初に見たときは少し衝撃を受けました。実際、この期間、私は Docker さえ知らなかったのですが、この小窝とこの小さな文章が私に多くのことを学ばせてくれました。xlog にドメインを設定し、MetaMask ウォレットを作成することができ、憧れに少し近づくことができました。

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