搜圖助理 - 聊天機器人
Chatbot學習筆記-Day2
--
Day1我們成功作出可以自動回覆相同內容的對話機器人了,但Messaging API提供的功能如此豐富,若止步於此就太可惜了對吧!
Message types
Line Messaging API總共有9種訊息格式可以傳送:
- Text message
- Sticker message
- Image message
- Video message
- Audio message
- Location message
- Imagemap message
- Template message
- Flex Message
我們今天則是選擇了 "Image message",目標是使用者在輸入訊息後,Linebot可以自動回傳相關的圖片,如下圖所示:
擷取網頁資訊
在正式撰寫Linebot程式碼之前,必須先了解如何從網路上擷取圖片位置,在Google搜尋"Linebot"會出現類似以下的結果:
若將圖二的網址用Python的split函數以 "&" 分隔,可以得到以下結果:
可以發現,Google的圖片搜尋是利用 "q=搜尋內容" 以及 "tbm=isch(圖片)" 兩個key作為導引。因此,我們如果試著將網址改成:
"https://www.google.com/search?q=line+bot&tbm=isch"
應該可以得到與圖二相同的結果,那就趕快來試一下吧!
得知這樣的資訊後,我們就可以透過更改網址的查詢方式來改變網頁顯示的內容。但問題來了,如果碰到中文怎麼辦呢?
這個問題可以透過Python的urllib模組來解決,用 "parse.urlencode" 函數,輕鬆得到編碼後的結果。
再加上Google的根網址,就成功還原搜尋囉。
知道搜尋的網址後,也該來思考如何取得每張照片的位置了對吧?
這時就可以再次利用Python的urllib模組取得網頁的原始碼
進一步觀察網頁原始碼發現,
大部分的圖片都以 "https://encrypted-tbn0.gstatic.com" 為開頭。
我們可以利用Regex(正規表達式)來取得每張圖片的位置,程式碼如下:
因為有些圖片的位置實在太過冗長,我在這邊只取長度在150以下的連結加入list當中。
到這邊,基本上就只剩下與Linebot程式碼的整合了,我們希望使用者輸入訊息後,Linebot可以傳送相關的圖片給使用者。
因此,今天會用到 "Image message" 的格式來傳送訊息。
Image Message
Linebot Image Message的寫法如下:
所以只要將我們剛剛爬梳下來的圖片位置貼入,就可以讓Linebot回傳圖片訊息給使用者囉。當然,在圖五的部分 "q" 可以改成使用者輸入的訊息。
因此,整理後的程式碼會像是:
最後再上傳至Heroku更新app就會有圖一的效果囉,
程式碼的部分整理在這邊,那今天的部分就大功告成啦!
系列文章
- 【Day1】 打造你的第一隻聊天機器人
- 【Day3】 為聊天機器人連結資料庫
- 【Day4】 利用聊天機器人對資料庫下指令吧!
- 【Day5】 讓聊天機器人開啟爬蟲技能!
- 【Day6】 聊天機器人的Quick replies
- 【Day7】 用Flex Messages呈現爬蟲
- 【Day8】 為聊天機器人加上圖文選單