📢 本文由 gemini-3-flash-preview 翻譯
從 ???? 我記不清了 開始喜歡上 ASMR 後就接觸到了音聲,不過高昂的價格顯然會驅使我去廣袤的網路(Internet)上搜尋,於是便知道了這個網站,但此網站只有登入後才可以看到更多內容,而每年也幾乎是不定期開放註冊,這使我很好奇這個網站。
於是我便想著讓伺服器執行程式偵測是否可以註冊,然後發出通知。
GitHub:
yexca/hvdb
目標
偵測是否可以註冊,如果可以便透過 Telegram 通知。
偵測是否可以註冊
在靈夢廣場的一個貼文回覆中可以獲知,當開放註冊時 login 的下方會出現 register。
那便可以用一種最簡樸的方法,爬取這個網頁,檢查是否有此單字。
Bot 配置
使用 Telegram 的 Bot 通知需要先註冊一個 Bot。
對話
https://t.me/BotFather
輸入 /newbot 指令,按照步驟建立一個 Bot。
和剛建立的 Bot 對話,發送 hello。
然後訪問 (將 TOKEN 替換為自己的 token)
1
| https://api.telegram.org/botTOKEN/getUpdates
|
會得到一個 JSON 檔案,找到 id,此 id 即為 chat_id。
參考:
使用Telegram Bot来实现推送通知
Python
透過 Python 是最簡單的 (我也懶得看其他語言了)。
爬取使用 Requests 函式庫,通知的話使用
pyTelegramBotAPI
。
多餘的就不解析了,直接放程式碼 (此檔名不要命名為 http.py 或 requests.py):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| import telebot
import requests
import time
# 替換自己的 token
bot = telebot.TeleBot("TOKEN", parse_mode="MARKDOWN") # You can set parse_mode by default. HTML or MARKDOWN
def inform():
web = requests.get("https://hvdb.me/")
str = web.text
a = str.find("register")
if a != -1:
# 替換自己的 chat_id
bot.send_message("chat_id", "[hvdb](http://hvdb.me/) register start")
t = 0
while True:
inform()
# 每小時執行一次
time.sleep(3600)
# 計時是否執行了 24 小時
t += 1
# 每天提醒一次程式在執行
if t == 24:
t -= 24
local_time = time.ctime(time.time())
inform_str = "{} 已執行".format(local_time)
# 替換自己的 chat_id
bot.send_message("chat_id", inform_str)
|
參考資料
关于报错“AttributeError:partially initialized module‘requests‘has no attribute‘get‘的解决方法
requests - 廖雪峰的官方网站
Python time sleep()方法 - 菜鸟教程
Python 日期和时间 - 菜鸟教程
Docker 封裝
檔案結構
1
2
3
| D:\DOCKER\HVDB
Dockerfile
inform.py
|
Dockerfile 檔案
1
2
3
4
5
6
| FROM python:3.11-alpine
RUN pip install requests \
&& pip install pyTelegramBotAPI
COPY ./inform.py /app/inform.py
CMD [ "python", "/app/inform.py" ]
|
同目錄下執行命令打包映像檔(Image)
1
| docker build -t hvdb:v1.0 .
|
轉移到伺服器
Windows 下
1
| docker save -o hvdb.tar hvdb:v1.0
|
等待打包完成,複製到伺服器
1
| scp .\hvdb.tar username@hostname:/path
|
複製完成後,伺服器執行
1
| docker load -i hvdb.tar
|
參考:
docker load报错:Error processing tar file(exit status 1): archive/tar: invalid tar header