iT邦幫忙

2

(番外篇-架構介紹)[不做怎麼知道系列之Android開發者的30天後端養成故事 Day23] - 來問問你認識的Youtuber的訂閱數吧~ #Django #GAE #LineChatBot

Sam 2020-03-04 17:02:04717 瀏覽

https://ithelp.ithome.com.tw/upload/images/20200304/201245480aIimTwlIr.png

哈囉,我們又見面了,因為這三個禮拜一直在做同樣的系列,覺得有點無聊,前陣子我的精神導師做了一款「台南帶路雞」,它可以透過簡單的對話來查詢點對點的搭公車路線,確認完目的地後,直接導向 GoogleMap,引導你去最近的公車站點。因為精神導師的故事,引起了我對聊天機器人的興趣!所以就有了這篇 XD,順便給自己個精神休假。

今天我們要來完成的是「輸入你喜愛的 Youtuber,就告訴你這個 Youtuber 的訂閱數」,恩,很沒路用的東西,但就是練練功麻 XD

先上結果圖:

https://ithelp.ithome.com.tw/upload/images/20200304/20124548TMZoDtWlpI.jpg

這個專案所使用到的工具、平台有以下三個

  • LineBot SDK: 將應用(app)整合到 LineBot 所需的工具
  • Django(Python): 存放我們 app 的網站框架(web framework),可以參考我前面所做的 Django 文章,除了基本的使用 Django 的方法之外,今天還會講到以前文章沒提到的: 爬蟲(crawler/scraper),當收到 Youtuber 的名字後,我們要根據名字,抓取這個 Youtuber 的訂閱數字
  • Google App Engine(GAE): 存放 Django 的雲端運算平台

整體流程與概念

以兩個角度來看這個應用,使用者開發者 的角度。

對使用者來說

使用者透過 Line 對機器人輸入一個 Youtuber 的頻道名字,然後機器人吐出查詢訂閱數的結果。

https://ithelp.ithome.com.tw/upload/images/20200304/20124548UOXKR0Z1qH.jpg

對開發者來說

從下圖就可以看出我沒什麼設計的天份 QQ,整體概念是以 Django 為核心出發,將整個 Django 應用架設在 Google App Engine,Django 透過複雜的轉傳機制,收到 Youtuber名字 的輸入訊息,再利用爬蟲(crawler),查詢 Social Blade 網站的相關 Youtuber 資訊,並擷取其中的 訂閱數,將這筆訂閱數透過 LineBot SDK 打包成為一則 Line 的文字訊息,回傳給使用者。

https://ithelp.ithome.com.tw/upload/images/20200304/20124548ruCwWZ0WqU.png

資料是怎麼跑的 ?

使用者輸入的訊息,會透過網路,將訊息封包(packets)傳到 GAEGAE 再轉傳至 DjangoDjango 內部有 WSGI(Web Server Gateway Interface) 的機制,會參考 urls.py,把封包轉傳至相關的 views.py,再透過 LineBot SDK 分析訊息,讀取出 Youtuber名字 的輸入資訊,收到這個名字的參數後,再呼叫爬蟲去擷取 Youtuber訂閱數,最後將訂閱數以 LineBot SDK,重新打包成 Line 的文字訊息,以反向原途徑(Django→GAE→LineUser),將搜尋訊息傳回去給使用者。

寫到這邊,概念應該是懂了,但是實際該怎麼做呢 ?

建立新的 Django Project

詳情參考 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,這是我的 不做怎麼知道系列 文章,我們 明天見。


https://ithelp.ithome.com.tw/upload/images/20200219/20124548meDsnCPamL.png


尚未有邦友留言

立即登入留言