Archives of #projects

徐長卿君🤖️ – 中醫經典古籍搜尋Chatbot 發布|Release of Cynanchun kun🤖️ – TCM Classics Search-bot

徐長卿君🤖️是一個教學用的中醫搜尋chatbot,提供《黃帝內經素問》(中、英文版)、《傷寒論》、《神農本草經》及《難經》搜尋。Cynanchum kun🤖️is a tutorial-based classics searching chatbot, providing Inner Canon of the Yellow Emperor - Basic Questions (in English or Chinese), Treatise on Cold Damage Diseases (in Chinese), Shennong’s Classic of Materia Medica (in Chinese) and Classic of Difficult Issues (in Chinese) for searching.

如何在Telegram利用python-telegram-bot建立一個中醫經典古籍《素問》搜尋chatbot

【前言】 Telegram最近在香港和台灣開始比較為人所知而使用。一方面是相對比較安全,而且有group chat、channel等功能;另一方面是,比起LINE,Telgram的chatbot的限制沒這麼多,而且是免費!免費!免費!(這是重點之重🤫)對於開發budget非常不多的人來說,Telegram是一個不錯的選項。 用Python寫Telegram chatbot最大的好處是有現成的package可用,例如python-telegram-bot和pyTelegram,當然也能透過Flask、requests自行搗鼓出來。以套件來說,tutorial方面,不管是中、英文,套件以python-telegram-bot比較多,而且有專屬自己的、在Telegram討論group發問(不過感覺有時候不太friendly就是,而且問的人很多,有時候一不小心有人回答了對話也飄走了);pyTelegram則在YouTube教學比較多。經過評估,最後決定用python-telegram-bot的套件。 寫完這個chatbot的tutorial,暫時不會再隨意寫程式,因為想要回歸中醫本行去開發別的東西,而且想要去乖乖上課improve CS知識方便之後寫web app。寫這篇收山之作,是因為之前寫算盤子君🤖️(@glochidion_bot,大概暫時是唯一一個尋找和查詢有招收香港學生的台灣的大學系所和老師專長資料的Telegram chatbot)困難重重,一是不少python-telegram-bot的tutorial已經過期,二是碰壁試過撞牆多次後才求救叫天不應叫地不聞,有人聞了卻一句戳說是伸手黨,之前撞牆本來就煩躁,加上一個「伸手黨」把自己曾經努力過被抹殺,煩躁就如星火燎原那般燃燒起來,更TM的不爽了。既然如此,就決定再寫一個Telegram chatbot,專門給新手入門和伸手黨使用🤓,讓撞牆撞到了無生趣、非專業背景但想要入門的同好有個好開端。這個《素問》搜尋🔍chatbot是節取自徐長卿君🤖️(@cynanchum_bot,大概算是首個中醫經典古籍搜尋chatbot,除了《素問》,還有《傷寒論》、《神農本草經》和《難經》)的《素問》搜尋部分。沒有中醫背景的人沒關係,就當作是設計一個搜尋機器人去看就好,因為框架都差不多。 至於看完這個tutorial會學到啥? 如何從零開始設計chatbot – 從寫之前要注意的到寫程式到放到Google Cloud Platform的Compute Engine上跑 如何用python-telegram-bot寫chatbot – 除了一般對話對應,還有如何加入inline keyboard(inline keyboard讓我撞牆很久簡直是崩潰邊緣,這部分簡直是血書…因為python-telegram-bot的demo寫的很莫名其妙根本不知道想要表達啥,其他tutorial要不過期要不就不work) 【開始寫之前 – 注意事項】 在開始實際寫之前,先說下一個Telegram chatbot設計需要注意的事項。 首先,Telegram的chatbot default是不能主動跟user有任何動作,即使曾經使用過也不行🙅‍♂️。 對於首次使用某個chatbot的user,第一個command給chatbot就是/start,這是每個bot設計的時候非常強烈建議要有(我沒試過設計沒有/start的,所以也不知道後果會怎樣,推測可能chatbot會不理你吧)。之後可以直接用其他command去跟chatbot溝通,也可以繼續用/start。 其次,根據個人需求,可以設計/help幫助指引user如何使用chatbot。這個設計對於使用有多功能的chatbot來說很重要。就如第一次去有目的的逛大的shopping mall,為了省事方便,都會找顧客服務中心問,同樣道理。 第三,非常強烈建議設計chatbot時要規範使用範圍。這是啥意思呢?意思是當用戶輸入一些用途以外的字眼,chatbot不會愣在哪不回應或甚至直接down機(user很會把機器玩壞滴~),而是有feedback給user,例如說“挖垮薄吼請重新輸入”之類的。 第四,在程式部分要有error log,這是方便開發時出現error會有指引告訴你哪裡出問題,不管是自己debug還是找別人求救時有個方向。 第五,建議開始動手寫chatbot之前先想好、設計好chatbot的流程。例如會想要chatbot做啥、達到「做啥」這個目的需要有什麼步驟和需要啥部件;仔細一點的話,可以順便想對話內容,例如想chatbot的語氣、回應方式之類的。 接下來會根據接下來要寫的《素問》搜尋chatbot,寫一個chatbot設計流程。 【開始寫之前 – 寫設計流程】 在開始寫chatbot之前先寫設計流程,除了可以幫助釐清自己的想法,也可以更清楚看到整體架構,從而看到整體架構有否缺陷。同時會更清楚自己寫的時候在寫什麼,不會出現東寫一塊、西加一塊。以下就開始寫個《素問》搜尋🔍chatbot的設計流程吧! [設計流程] 這個chatbot可以幹嘛:讓user input keyword搜尋《素問》內容句子。 開發環境:Python 3.7 使用套件:python-telegram-bot 特別點:python-telegram-bot中,一個command和非command功能會以一個def對應一個dispatcher的方式才能運作 檔案架構: # 建議使用虛擬環境venv,獨立開個folder儲存運行。以下也會預設在獨立folder的venv進行。若不知道如何設置虛擬環境,可參考這裡。 主程式:cynanchum_bot.py 存放搜尋用資料的資料夾:data #資料以JSON形式儲存 […]

在Python使用scraparazzie尋找新聞並透過LINE Notify發送

當初做scraparazzie這個套件的目的,是希望可以抓自己有興趣的topic和keywords的新聞傳送到某個IM的bot,就能根據之後自己再設定隨時看到新聞,方便自己炒股和追蹤農業災害新聞(啊…因為想要炒commodity嘛🤫)。但我並不需要內文,只需要標題、新聞來源和發布時間就好,有興趣再click連結去看。偶然看到LINE Notify的教學,就拿來實作一下吧。 開發環境:Python 3.7 另外也需要LINE Notify的權杖,因此會需要有LINE帳號。接下來先step-by-step介紹申請LINE Notify權杖的部分。 STEP 1: 至 https://notify-bot.line.me/zh_TW/ 進行登入 點選右上方 帳號名稱選單中的「個人頁面」(My page) 點選【發行權杖】(Generate token) 輸入自訂「權杖名稱」, 這邊設定的名稱會在出現在提醒訊息的Title 選擇第一個【透過1對1聊天接受LINE Notify的通知】(1-on-1 chat with LINE Notify) ,然後按下「發行」(Generate token) 按下「發行」後,就會顯示權杖。請將權杖內容「複製」並記下來!程式與LINE Notify溝通就是靠這個權杖! LINE Notify設定的部分大概到這裡結束。 STEP 2: 建立 lineNotifyMessage.py 檔案 在token部分,記得將剛剛在LINE Notify記下的權杖貼上去 由於想要用多個關鍵字找新聞,因此就直接寫個def和迴圈跑。location當然也可以設多個。若要找不同語言,強烈建議分開跑新聞,不然很容易會出現找不到結果的狀況。同時也不建議找太多篇新聞,因此max_result別設太大。其他設定可以去scraparazzie的github看看。 STEP 3: 測試執行如下: 然後就能收到在LINE Notify傳送來的新聞 這個程式只是跑新聞出來而已。若想要變成定時,或者放在雲端跑的話,可以尋找相關的文章設定。 除了LINE Notify,也可以做成Slack bot,定時發新聞去workspace裡面。唔…想起以前曾經短暫時間在某機關工作,早上看到一堆人埋首在一疊報紙看報導剪報🤭,有這樣的程式還真方便多了😬

scraparazzie 發佈|Release

一個能利用關鍵字或選擇特定topic搜尋Google News feeds的Python 套件|A Python package for searching specific topic or keywords of Google News feeds