今天閒著沒事,來做了一個可以發送每日響的 Telegram BOT,如果你只是想看看,請使用這個連結。

http://t.me/hibikiiii_bot

由於幾乎每週上課遇到同學,都會問每日響看了沒,為了省下麻煩的功夫,特別弄了一個會上網撈資料的 bot。

製造成分

Python 2.7  
   - requests
   - python-telegram-bot

Telegram Bot Father

這個 bot father 是專門管理 telegram bot 之類的 bot ,加入他到聊天對象就可以幫自己申請一個 Bot (@BotFather)。

簡單幾個指令就可以建立一個 bot ,此時你會拿到 token key,用來操作 REST API 的。

然後像這樣的指令提示,你必須自己設定,跟 @BotFather 說 (/setcommands)

這個 /setcommands 要注意的是他是一次設定所有的 command 指令,像這樣:

Python Telegram Bot

這 python 套件解決了你還要再弄 REST API 的問題,很簡單就可以寫好第一個指令 bot,那就是 /start ,只要一進入 bot 就會打開 /start ,當然使用者也可以自行呼叫就是。

from telegram.ext import Updater  
from telegram.ext import CommandHandler

#token 輸入 bot father 給你的 bot 專屬 token key
updater = Updater(token='xxxxxxxxx');  
dispatcher = updater.dispatcher

#start 方法
def start(bot, update):  
    bot.sendMessage(chat_id=update.message.chat_id, text="Thanks for your subscribe.")

#第一個參數是接受的指令 `\start` 的字串。
start_handler = CommandHandler('start',start)

#告訴 api 增加一個新的指令處理方法 (註冊)
dispatcher.add_handler(start_handler)

#進入無限迴圈,也就是開始監聽。
updater.start_polling()  

另外就是 telegram 發圖片的 API ,我以為需要自己寫串流,上傳到 REST API ,不過直接填上 url 也可以,超方便,所以就寫個迴圈直接把它發到爆。

bot.sendMessage(chat_id=update.message.chat_id, text=("---Daily Hibiki Pictures---"));

for pic_link in bahamute.get_images_on_article(link):  
    bot.sendPhoto(chat_id=update.message.chat_id, photo=pic_link)

每日響 Bot

其實沒什麼好說的,我只使用 Regular 正規表達式匹配網頁上的 html ,搜尋一下找文章。

不過由於我的撈的網站是 巴哈姆特,搜尋文章那邊他們似乎把搜尋參數拿掉了,翻了一下 <form> 把參數填上去,就又正常的出現搜尋頁面:

https://forum.gamer.com.tw/listtype.php?bsn=60076&subbsn=0&sval=每日響&stype=1  

不過後面參數就會被拿掉就是,不影響 requests 套件運作。

如果你對這個專案有興趣,可以到 Github 研究:

https://github.com/hpcslag/daily-hibiki-bot