iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 9
0
自我挑戰組

用Line聊天機器人串起多媒體系統系列 第 9

Day 9 : 從 LINE Notify 學習查看API文件

  • 上篇 Day 8 內容已經可以成功運行 LINE Notify 範例,如果再包含文字、貼圖,加上LINE內建網址預覽圖片,很快就可以建構好自己的服務。因為自學者常靠谷哥搜尋教學文即實作,要掌握使用功能還是得回頭研讀官方文件,而文件通常不像文章好啃!
  • 好在已經累積 LINE Notify 初步使用經驗與概念,接著我們來拆解研讀API文件,將看文件的習慣作為後續開發與自主學習的基石。
  • 附上今日程式碼的實作成果,另外 LINE Notify 的權杖申請方式可參考系列文 Day 6 : 歐逆醬早安,建立LINE Notify推播通知

    好啦我們進來吧。

LINE Notify API文件有什麼?

  1. 點選 LINE Notify API Documen,目前只有英文版本。
  2. 馬上看到更新頻繁不富奸的更新日誌:
  3. 接著文件介紹這個API可以做什麼,摘要如下:
    • 這個LINE API由OAuth2身分驗證機制與LINE Notify通知組成。
    • 驗證機制流程如下圖,簡單的說取得了權杖(token)之後,傳遞訊息時認access_token即可(圖片源自官方文件)。
    • 文件接著說明有關取得endpoint URI的方法,由於我們只是發行權杖,文件的GET https: //notify-bot.line.me/oauth/authorizePOST https://notify-bot.line.me/oauth/token請自行參閱。
  4. Notification 章節應該有我們傳遞訊息的格式資訊:
    • 文件有提到必須要有 bearer <access_token> and accesses 。
    • 接著看到用POST方法,需要的Header內容要求,以Python程式碼實現對照如下:
      headers = {
          "Authorization": "Bearer " + token, 
          "Content-Type" : "application/x-www-form-urlencoded"
          }
      
    • 訊息內容的格式寫在Request parameters,以表格方式介紹參數名稱、必須/選用、資料型態、參數介紹‵。
      • 參數message是必須的,格式為文字,最多1000個字元。即是先前的Python程式碼裡面所用的payload = {'message': msg },是必要內容。
      • 參數imageThumbnailimageFullsize是選用的,有最大尺寸限制。
      • 參數imageFile圖片路徑為選用,支援.png.jpg,權限比imageThumbnailimageFullsize優先。
      • 參數stickerPackageIdstickerId為選用,能用的貼圖官方整理於Sticker List,在使用貼圖時這兩個參數都要填,不然會報錯。
      • 參數notificationDisabled是否關閉用戶通知,預設false。
  • 有了上述文件閱讀基礎,後續 LINE Notify API Documen 就可以自行閱讀實作與測試。回頭看先前Python的範例程式碼,是不是更能理解了?
  • 另外稍微將範例加點料,做了個會傳文字/貼圖/圖片的範例,可點選此連結開啟 Colab 玩看看喔!
    #分享鐵人幫的文+貼圖+縮圖程式
    import requests
    from bs4 import BeautifulSoup as bs 
    
    def lineNotifyMessage(token, msg, img):
    
        headers = {
            "Authorization": "Bearer " + token, 
            "Content-Type" : "application/x-www-form-urlencoded"
        }
    
        payload = {
            'message': msg,
            'imageThumbnail' : img, #imageThumbnail、imageFullsize為成對的圖片,各有尺寸大小
            'imageFullsize' : img,
            'stickerPackageId' : 2, #stickerPackageId、stickerId為貼圖成對的編號,參閱Line Sticker List
            'stickerId' : 520
        }
        r = requests.post("https://notify-api.line.me/api/notify", headers = headers, params = payload)
        return r.status_code
    
    if __name__ == "__main__":
      token = '你的權杖內容'
      message = '大賢者【告】今日網友梗圖Top1'
      url = 'https://memes.tw/wtf' # 爬取https://memes.tw/wtf中網友創作的第一張梗圖
      img = bs(requests.get(url).text ,"lxml").find_all("", {'class': 'img-fluid'})[0]['data-src']
    
      lineNotifyMessage(token, message, img)
    

小結

  • 官方文件是程式開發時的救命繩,LINE的官方文件配合範例程式是可以理解並實作的,做中學、學中做就越來越有程式開發的樣子啦。
  • 另外LINE Notify可以接收來自其他服務的通知並通知用戶,這有些偏離後續LINE Message API開發的主軸,有興趣者參閱官方文件喔,我們下篇見!

上一篇
Day 8 : LINE Notify 訊息推播通知 (Python版)
下一篇
Day 10 : 左手只是輔助 - 用 Google Colab 協助開發日常
系列文
用Line聊天機器人串起多媒體系統30

1 則留言

0
mindyshen0917
iT邦新手 5 級 ‧ 2020-09-10 13:53:29

覺得這功能很有趣XD但是是不是只能向自己推播,沒辦法讓別人訂閱由GAS定時好的notify呢?

威利斯 iT邦新手 5 級 ‧ 2020-09-10 14:19:47 檢舉

這問題很好,您可以依照 Day 6 : 歐逆醬早安,建立 LINE Notify 推播通知 選定你要接收通知的聊天室,以後聊天室加入好友即可。

另在 LINE Notify 官方網站下方有個「登錄服務」的選項,是可以建立一個讓人訂閱的公開 LINE Notify 推播服務,但本系列文主軸會有些失衡故無細說喔。

謝謝您!

威利斯 iT邦新手 5 級 ‧ 2020-09-10 15:37:09 檢舉

謝謝您持續關注喔!

我要留言

立即登入留言