Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Build line notify bot by lotify and create client library by swagger 20200527

339 views

Published on

使用 lotify 快速建置 LINE Notify bot 並且透過 Swagger 產生 client library.

https://github.com/louis70109/lotify

Published in: Software
  • Be the first to comment

  • Be the first to like this

Build line notify bot by lotify and create client library by swagger 20200527

  1. 1. 使⽤ lotify + Swagger 建置 可共⽤的 LINE Notify bot NiJia 2020/05/27 Chatbot Developer Taiwan #19 meetup @ Online
  2. 2. • Backend Developer • Chatbot Taiwan - Co-organizer • LINE API Expert • Farmer / Body builder • https://nijialin.com • louis70109@gmail.com NiJia Lin
  3. 3. •Lotify • 介紹 • 如何使⽤ • 快速部署 Heroku • Client library • Swagger ⽂件 • Openapi generator • JS 使⽤範例 Agenda
  4. 4. https://github.com/louis70109/lotify LINE Notify 認證流程
  5. 5. https://github.com/louis70109/lotify LINE Notify 認證流程 走 OAuth 2.0 的流程
  6. 6. • 它是⼀個可以讓開發者快速使⽤ LINE Notify 的套件🎉 • Pypi 上很多套件功能都只做⼀半(只有發送功能) • 每次只要⽤到 Notify 就重新寫 call API ⽅法 • ⽤⽀援 2.7 的寫法但⽬前只能⽀援 3.x https://github.com/louis70109/lotify 為什麼要寫
  7. 7. • 它是⼀個可以讓開發者快速使⽤ LINE Notify 的套件 • Pypi 上很多套件功能都只做⼀半(只有發送功能) • 每次只要⽤到 Notify 就重新寫 call API ⽅法 • ⽤⽀援 2.7 的寫法但⽬前只能⽀援 3.x https://github.com/louis70109/lotify 為什麼要寫
  8. 8. • 它是⼀個可以讓開發者快速使⽤ LINE Notify 的套件 • Pypi 上很多套件功能都只做⼀半(產⽣網址、換 toekn) • 每次只要⽤到 Notify 就重新寫 call API ⽅法 • ⽤⽀援 2.7 的寫法但⽬前只能⽀援 3.x https://github.com/louis70109/lotify 為什麼要寫
  9. 9. • 它是⼀個可以讓開發者快速使⽤ LINE Notify 的套件 • Pypi 上很多套件功能都只做⼀半(只有發送功能) • 每次只要⽤到 Notify 就重新寫 call API ⽅法😭 • ⽤⽀援 2.7 的寫法但⽬前只能⽀援 3.x https://github.com/louis70109/lotify 為什麼要寫
  10. 10. • 它是⼀個可以讓開發者快速使⽤ LINE Notify 的套件 • Pypi 上很多套件功能都只做⼀半(只有發送功能) • 每次只要⽤到 Notify 就重新寫 call API ⽅法 • ⽤⽀援 2.7 的寫法但⽬前只能⽀援 3.x 😓 https://github.com/louis70109/lotify 為什麼要寫
  11. 11. https://github.com/louis70109/lotify
  12. 12. • 有測試 ➡ 參考 line-bot-sdk-python 寫法 • 使⽤⽂件 • 有範例 ➡ https://github.com/louis70109/flask-line-notify • 還有⼀鍵部署⾄ Heroku https://github.com/louis70109/lotify 我加了什麼 你/妳還不來按星星?
  13. 13. https://github.com/louis70109/lotify
  14. 14. https://github.com/louis70109/lotify 這麼簡單有沒有考慮來按個星星?
  15. 15. 如何使⽤
  16. 16. pip install lotify # 透過 pip 安裝 notify from lotify.client import Client client = Client( client_id='YOUR_CLIENT_ID', client_secret='YOUR_CLIENT_SECRET', redirect_uri='YOUR_URI' ) 如何使⽤ https://github.com/louis70109/lotify#initialize-instance
  17. 17. LINE_NOTIFY_CLIENT_ID LINE_NOTIFY_CLIENT_SECRET LINE_NOTIFY_REDIRECT_URI 如果有設定環境變數 https://github.com/louis70109/lotify#initialize-instance
  18. 18. from lotify.client import Client client = Client() # 預設讀取環境變數,所以可不⽤放參數 可以變這樣 https://github.com/louis70109/lotify#initialize-instance
  19. 19. 認證步驟
  20. 20. <script> function Auth() { var URL = 'https://notify-bot.line.me/oauth/authorize?'; URL += 'response_type=code'; URL += '&client_id={{CLIENT_ID}}'; URL += '&redirect_uri={{URI}}'; URL += '&scope=notify'; URL += '&state=nostate'; window.location.href = URL; } </script> 前端⽤法 https://github.com/louis70109/lotify#get-authorizer-link
  21. 21. <script> function Auth() { var URL = 'https://notify-bot.line.me/oauth/authorize?'; URL += 'response_type=code'; URL += '&client_id={{CLIENT_ID}}'; URL += '&redirect_uri={{URI}}'; URL += '&scope=notify'; URL += '&state=nostate'; window.location.href = URL; } </script> 前端⽤法 https://github.com/louis70109/lotify#get-authorizer-link 因為要到確認畫⾯, 所以需要靠前端呼叫 api
  22. 22. link = client.get_auth_link(state='RANDOM_STRING') print(link) # https://notify-bot.line.me/oauth/authorize? scope=notify&response_type=code&client_id=QxU xF..........i51eITH&redirect_uri=http%3A%2F%2Floc alhost%3A5000%2Fnotify&state=foo 取得綁定 Notify 的連結 https://github.com/louis70109/lotify#get-authorizer-link
  23. 23. link = client.get_auth_link(state='RANDOM_STRING') print(link) # https://notify-bot.line.me/oauth/authorize? scope=notify&response_type=code&client_id=QxU xF..........i51eITH&redirect_uri=http%3A%2F%2Floc alhost%3A5000%2Fnotify&state=foo 取得綁定 Notify 的連結 https://github.com/louis70109/lotify#get-authorizer-link Client_id、redirect_uri、state 這些 key 基本上都存後端, 所以讓後端產⽣ url 給前端去呼叫
  24. 24. access_token = client.get_access_token(code='NOTIFY_RESPONS E_CODE') print(access_token) # N6g50DiQZk5Xh...25FoFzrs2npkU3z 拿回來的 code 換 token https://github.com/louis70109/lotify#get-access-token
  25. 25. access_token = client.get_access_token(code='NOTIFY_RESPONS E_CODE') print(access_token) # N6g50DiQZk5Xh...25FoFzrs2npkU3z 拿回來的 code 換 token https://github.com/louis70109/lotify#get-access-token 從 LINE 導回來的 code 參數拿來換 access_token 就不需要前端 就可以直接在後端處理
  26. 26. 發送系列
  27. 27. response = client.send_message(access_token='YOUR_ACCESS_ TOKEN', message='This is notify message') 送⽂字訊息 https://github.com/louis70109/lotify#send-message
  28. 28. response = client.send_message(access_token='YOUR_ACCESS_ TOKEN', message='This is notify message') 送⽂字訊息 https://github.com/louis70109/lotify#send-message
  29. 29. response = client.send_message_with_sticker( access_token='YOUR_ACCESS_TOKEN', message='This is notify message', sticker_id=1, sticker_package_id=1) 送貼圖訊息 https://github.com/louis70109/lotify#send-message-with-sticker
  30. 30. response = client.send_message_with_sticker( access_token='YOUR_ACCESS_TOKEN', message='This is notify message', sticker_id=1, sticker_package_id=1) 送貼圖訊息 https://github.com/louis70109/lotify#send-message-with-sticker
  31. 31. response = client.send_message_with_sticker( access_token='YOUR_ACCESS_TOKEN', message='This is notify message', sticker_id=1, sticker_package_id=1) 送貼圖訊息 https://github.com/louis70109/lotify#send-message-with-sticker 貼圖包 https://devdocs.line.me/files/sticker_list.pdf
  32. 32. image = client.send_message_with_image_path( access_token='YOUR_ACCESS_TOKEN', message='This is notify message', file=open('./test_image.png', 'rb') ) https://github.com/louis70109/lotify#send-message-with-image-path 送圖片(檔案)訊息
  33. 33. image = client.send_message_with_image_path( access_token='YOUR_ACCESS_TOKEN', message='This is notify message', file=open('./test_image.png', 'rb') ) 送圖片(檔案)訊息 https://github.com/louis70109/lotify#send-message-with-image-path (官⽅只⽀援 PNG 以及 JPEG 格式)
  34. 34. image = client.send_message_with_image_path( access_token='YOUR_ACCESS_TOKEN', message='This is notify message', image_path='./test_image.png' ) 送圖片(檔案)訊息 https://github.com/louis70109/lotify#send-message-with-image-path 給路徑即可 (官⽅只⽀援 PNG 以及 JPEG 格式)
  35. 35. image = client.send_message_with_image_url( access_token='YOUR_ACCESS_TOKEN', message='This is notify message', image_thumbnail='https://i.imgur.com/ RhvwZVm.png', image_fullsize='https://i.imgur.com/RhvwZVm.png', ) 送圖片(網址)訊息 https://github.com/louis70109/lotify#send-message-with-image-url
  36. 36. image = client.send_message_with_image_url( access_token='YOUR_ACCESS_TOKEN', message='This is notify message', image_thumbnail='https://i.imgur.com/ RhvwZVm.png', image_fullsize='https://i.imgur.com/RhvwZVm.png', ) 送圖片(網址)訊息 https://github.com/louis70109/lotify#send-message-with-image-url 雖然 http & https 都吃 還是建議使⽤ https!
  37. 37. image = client.send_message_with_image_url( access_token='YOUR_ACCESS_TOKEN', message='This is notify message', image_thumbnail='https://i.imgur.com/ RhvwZVm.png', image_fullsize='https://i.imgur.com/RhvwZVm.png', ) 送圖片(網址)訊息 https://github.com/louis70109/lotify#send-message-with-image-url 雖然 http & https 都吃 還是建議使⽤ https!
  38. 38. revoke = client.revoke(access_token='YOUR_ACCESS_TOKEN') 註銷 Token https://github.com/louis70109/lotify#revoke-access-token
  39. 39. revoke = client.revoke(access_token='YOUR_ACCESS_TOKEN') 註銷 Token https://github.com/louis70109/lotify#revoke-access-token
  40. 40. 部署⾄ Heroku https://github.com/louis70109/flask-line-notify
  41. 41. Swagger + generator
  42. 42. 原本的已經好幾年沒更新了 因為我習慣使⽤ flask-restful 套件的朋友可以參考
  43. 43. • 他是使⽤ decorator 的⽅式 • 對於不太會 yaml 的算是沙漠中的綠洲 (他是 JSON) • ⽽ swagger 也可以解析 JSON • 若不是 flask-restful 可以使⽤ pyswagger 特性
  44. 44. • 他是使⽤ decorator 的⽅式(不過挺髒的) • 對於不太會 yaml 的算是沙漠中的綠洲 (他是 JSON) • ⽽ swagger 也可以解析 JSON • 若不是 flask-restful 可以使⽤ pyswagger 特性
  45. 45. • 他是使⽤ decorator 的⽅式 • 對於不太會 yaml 的算是沙漠中的綠洲 (他是 JSON) • ⽽ swagger 也可以解析 JSON • 若不是 flask-restful 可以使⽤ pyswagger 特性
  46. 46. • 他是使⽤ decorator 的⽅式 • 對於不太會 yaml 的算是沙漠中的綠洲 (他是 JSON) • ⽽ swagger 也可以解析 JSON • 若不是 flask-restful 可以使⽤ pyswagger 特性
  47. 47. • 他是使⽤ decorator 的⽅式 • 對於不太會 yaml 的算是沙漠中的綠洲 (他是 JSON) • ⽽ swagger 也可以解析 JSON • 若不是 flask-restful 可以使⽤ pyswagger 特性
  48. 48. • 他是使⽤ decorator 的⽅式 • 對於不太會 yaml 的算是沙漠中的綠洲 (他是 JSON) • ⽽ swagger 也可以解析 JSON • 若不是 flask-restful 可以使⽤ pyswagger 特性
  49. 49. Openapi-generator
  50. 50. 掃他進去看看
  51. 51. ⽀援語⾔
  52. 52. • Swagger document 寫好就沒問題 • 可以針對指定環境加參數設定 (等等有範例) • 就是使⽤套件,⽽它已經包裝完了 Openapi-generator
  53. 53. • Swagger document 寫好就沒問題 • 可以針對指定環境加參數設定 (等等有範例) • 就是使⽤套件,⽽它已經包裝完了 ⽀援語⾔
  54. 54. • Swagger document 寫好就沒問題 • 可以針對指定環境加參數設定 (等等有範例) • 就是使⽤套件,⽽它已經包裝完了 Openapi-generator
  55. 55. • Swagger document 寫好就沒問題 • 可以針對指定環境加參數設定 (等等有範例) • 就是使⽤套件,⽽它已經包裝完了 Openapi-generator Openapi-gererator 安裝⽀援 mvn, docker, brew, npm 這裡我就⽤ npm demo (不管⽤哪個它⼀定要安裝 JDK)
  56. 56. • Swagger document 寫好就沒問題 • 可以針對指定環境加參數設定 (等等有範例) • 就是使⽤套件,⽽它已經包裝完了 Openapi-generator Openapi-gererator 安裝⽀援 mvn, docker, brew, npm 這裡我就⽤ npm demo (不管⽤哪個它⼀定要安裝 JDK)
  57. 57. 有夠髒的啦!
  58. 58. • Swagger document 寫好就沒問題 • 可以針對指定環境加參數設定 (等等有範例) • 就是使⽤套件,⽽它已經包裝完了 Openapi-generator
  59. 59. • Swagger document 寫好就沒問題 • 可以針對指定環境加參數設定 (等等有範例) • 就是使⽤套件,⽽它已經包裝完了 Openapi-generator Input url 語⾔ 輸出額外參數
  60. 60. 我傳到 Github 做範例
  61. 61. Api 產⽣後他也很好⼼的產⽣說明⽂件
 看這裡的內容就知道提供的⼈是不是好⼈了 所有的範例跟說明都在這裡⾯
  62. 62. • Swagger document 寫好就沒問題 • 可以針對指定環境加參數設定 (等等有範例) • 就是使⽤套件,⽽它已經包裝完了 Openapi-generator
  63. 63. • npx create-bottender-app my-app • cd my-app • npm install https://github.com/{帳號}/api.git --save 以 Bottender 為 JS 範例 https://bottender.js.org/docs/en/getting-started
  64. 64. https://github.com/louis70109/lotify 都看到這了 484 來點個星星? 主要看的地⽅在這邊
  65. 65. 以 Bottender 為 JS 範例 https://github.com/louis70109/lotify 直接複製範例 code 來⽤😁
  66. 66. 以 Bottender 為 JS 範例 https://github.com/louis70109/lotify 都看到這了 484 來點個星星? 直接把提供的⽂件 code 複製過來改寫
  67. 67. 結果 https://github.com/louis70109/lotify 鑿壁偷光的作品 (並沒有)
  68. 68. 謝謝⼤家!! Q & A 囉

×