[Python] Flask + Requests 試玩 Line Bot API

Line 的官方 API 好像在 2016 年四月就已經有了,不過那時候有其他事情要做就沒特別去摸,後來暑假去當兵就更沒時間 QQ

現在開學終於有時間玩玩看了~XDDD

 

展示

 

事前準備

  • BOT API Trial Account

先去 BOT API Trial Account 的網站註冊一下,前提是你需要有手機版的 Line 才能登入申請,目前是開放免費申請使用,限制為 50 好友。

 

  • Ubuntu

寫 Python 就是要用 Linux,不要問我怎麼在 Windows 上面弄,我的 Windows 只跑 Visual Studio 、 Office 跟 LOL

 

Python

有 Linux 環境後,建議安裝 pyenv 來建立虛擬 Python 環境,而不會影響原本系統上面的 Python 環境,如果覺得沒差的話可以不用裝。

用來和 LINE API 溝通,提交 POST 超級方便!!之前我是用他來寫 Web Bot ,用來自動填單..XD

接收 LINE 的 POST 用,舉個例子,有人傳訊息給你的 BOT 時,LINE 就會發送一個 POST Request 給你(JSON) ,官方文件有解釋JSON的內容。這好像稱為 callback url,我不是很了解,希望有開發 API 經驗的大大可以補充。Flask 的官方文件看不懂可以看這篇:用 Flask 與 SQLite 架抽籤網站,直接看範例學習比較快(我看這篇學的XD),感謝這些大大的經驗分享!

 

ngrok

開發時我使用 ngork 來作為 callback url 測試,不用獨立IP、不用開Port 就可以有一個網址直通你的電腦,非常方便!

Flask

  • 基本架構

@app.route('/') 為網址根目錄,當使用者瀏覽時,就會執行 index() 函式的內容,得到的就是一串文字 「Hello World」,應該滿好理解的~!

 

  • 接收 POST Request

在 Flask 中,接收任何 Request 需要寫出來,不然是不會同意參數輸入的,由於 LINE 會藉由 callback url 傳送東西給你,以取得使用者傳給 Bot 的資訊:

來自 Line 的 Post Request

來自 Line 的 Post Request

在寫 callback url 的時候,需要另外定義一個 @app.route('/callback'),這樣才有辦法進入這個網址,並執行下面的函式,然後隨便 return 一個 str 結束

request.get_json() :為Line 丟過來的 json 的內容,需要處理一下才能用,這部份我也不是很熟,詳細參考一下這一篇文章「Json概述以及python對json的相關操作

傳訊息給 Bot 後,Line 丟過來的 Json 如下:

decoded[‘result‘][0][‘content‘][‘from‘]:要取值所以要把相對應的 key 寫出來,有點像是陣列的概念,這裡我要的是使用者ID跟純文字內容,Python 真的很方便XD

 

發送訊息

有了那些訊息後就可以把資訊送回去了,這裡我先實做的是原封不動把文字傳回去,所以寫了一個 sendText() 函式:

這裡我用的是 Requests 內的 POST 功能,很方便,直接把資料丟給 Line ~ 用法記得看文件嘿!值得注意的是, "to": [user] 的中括號不能省掉,這是Line 接收的 json 資料格式之一,沒有加的話會錯誤。

完整程式碼就放在 Github 上面了,有興趣的人可以抓下來玩玩,有空的話我再寫成可以部屬在 OpenShift 上面的版本~。


See also

comments powered by Disqus