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 的資訊:
在寫 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 上面的版本~。