哈囉,我們又見面了,因為這三個禮拜一直在做同樣的系列,覺得有點無聊,前陣子我的精神導師做了一款「台南帶路雞」,它可以透過簡單的對話來查詢點對點的搭公車路線,確認完目的地後,直接導向 GoogleMap,引導你去最近的公車站點。因為精神導師的故事,引起了我對聊天機器人的興趣!所以就有了這篇 XD,順便給自己個精神休假。
今天我們要來完成的是「輸入你喜愛的 Youtuber,就告訴你這個 Youtuber 的訂閱數」,恩,很沒路用的東西,但就是練練功麻 XD
先上結果圖:
這個專案所使用到的工具、平台有以下三個
LineBot SDK
: 將應用(app)整合到 LineBot 所需的工具Django(Python)
: 存放我們 app 的網站框架(web framework),可以參考我前面所做的 Django 文章,除了基本的使用 Django 的方法之外,今天還會講到以前文章沒提到的: 爬蟲
(crawler
/scraper
),當收到 Youtuber 的名字後,我們要根據名字,抓取這個 Youtuber 的訂閱數字Google App Engine
(GAE): 存放 Django
的雲端運算平台以兩個角度來看這個應用,使用者 和 開發者 的角度。
使用者透過 Line 對機器人輸入一個 Youtuber 的頻道名字,然後機器人吐出查詢訂閱數的結果。
從下圖就可以看出我沒什麼設計的天份 QQ,整體概念是以 Django
為核心出發,將整個 Django
應用架設在 Google App Engine
,Django 透過複雜的轉傳機制,收到 Youtuber名字
的輸入訊息,再利用爬蟲(crawler
),查詢 Social Blade 網站的相關 Youtuber 資訊,並擷取其中的 訂閱數,將這筆訂閱數透過 LineBot SDK
打包成為一則 Line 的文字訊息,回傳給使用者。
使用者輸入的訊息,會透過網路,將訊息封包(packets)傳到 GAE
,GAE
再轉傳至 Django
,Django
內部有 WSGI(Web Server Gateway Interface) 的機制,會參考 urls.py
,把封包轉傳至相關的 views.py
,再透過 LineBot SDK
分析訊息,讀取出 Youtuber名字 的輸入資訊,收到這個名字的參數後,再呼叫爬蟲去擷取 Youtuber訂閱數,最後將訂閱數以 LineBot SDK
,重新打包成 Line 的文字訊息,以反向原途徑(Django→GAE→LineUser),將搜尋訊息傳回去給使用者。
寫到這邊,概念應該是懂了,但是實際該怎麼做呢 ?
詳情參考 Day4,這邊以 Windows 的指令來示範。
(venv)$ django-admin startproject linebot
(建立名為 linebot
的專案)
(venv)$ cd linebot
(進到專案資料夾)
(venv)$ python manage.py startapp webhook
(建立名為 webhook
的 app)
(venv)$ python manage.py startapp crawler
(建立名為 crawler
的 app)
(venv)$ python manage.py runserver
(跑起來,到 http://127.0.0.1:8000/ 測試)
其中 webhook
就是用來跟 Line 對接,再由 webhook
去呼叫 crawler
進行爬蟲。
今天就先到這邊,下一篇來看看爬蟲怎麼寫。
其實原本這專案只是做好玩的,沒有想要把它寫成文章,可是實作的過程中,又出現了許多我第一次遇到的事情,索性就寫成文章,除了讓自己印象深刻,下次要再一次實作類似的功能,就能參考了。
關於我這幾天沒發文的故事說來話長,簡單來講是因為,我的親哥哥最近發生車禍住院了,我在醫院過夜照顧他,耽誤到一點進度,所以就變成這樣了。最近的心情真的是有點複雜,很難靜下來專心做事。
我是 RS,這是我的 不做怎麼知道系列 文章,我們 明天見。