[爬蟲][Linebot] 利用免費資源做Linebot發表特版圖片

前言

爬蟲 linebot非常流行的組合
於是前一陣子無聊看了Linebot的官方PHP SDK
於是就決定練習一下
順便試試看PHP的爬蟲(我也只熟悉PHP)

條件

主旨是找”免費”的資源來使用

需求

我必須做到幾件事情及要求
1. 可以每天自動更新圖庫
2. 有個可以放圖庫的地方(每天只存最多200張左右)
3. 可以執行PHP的Serverless
4. Linebot的webhook必須要是https

切開功能需求
1. 要有排程
2. 免費執行PHP的Serverless
3. 提供https
4. 存放圖庫網址

功能1 => Google apps script 有此功能
功能2 => Heroku有免費的PHP Serverless服務
功能3 => Heroku有https
功能4 => 因為用Google apps script,操作Google sheets會很方便

流程圖

流程很簡單就是讓Webhook透過GAP去拿Sheet資料

linebot flow
提取圖片流程

爬蟲則是利用GAP提供的排程,來定時更新圖片庫

Image_parser_flow
爬蟲流程

開始實作

將Parser Deploy至Heroku上

建立一份Google Sheets與Google Apps Script

  1. 點擊 “工具” => “指令碼編輯器”

  2. 就出現GAP的畫面

打上我寫好的js code
爬蟲WebAPI位置,等等會在Heroku那邊提到,到時候需要回來更改

function writeTosheet() {
  var response = UrlFetchApp.fetch("爬蟲WebAPI位置");
  var url_array = JSON.parse(response.getContentText());
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear({ formatOnly: true, contentsOnly: true });
  for (var i = 0; i < url_array.length; i++) {
    sheet.appendRow([url_array[i]]);
  }
}

設定時間排程

  1. 點擊”時鐘”圖案

  2. 點選你想要設置的時間(這邊用每12小時)

Deploy到Heroku

如果不懂Heroku怎麼使用,可以自行Google一下,資源很多

可以使用我的Github(之後在製作Heroky Deploy button)
https://github.com/coreyborad/Heroku-LadyParser-Image

可以到Heroku後台
1. 點選Parser的APP=>”Settings”

  1. 下拉到”Domains and certificates”

右側有個網址,加上”/getlist”就是上面的爬蟲WebAPI位置

設置LineBot與Webhook

有4個重要的變數資訊要記住

  1. APIURL => GAS取得圖片的Url
  2. LINE_CHANNEL_ACCESSTOKEN => LineBot的AccessToken
  3. LINE_CHANNEL_SECRET => LineBot的SecretToken
  4. Webhook URL => Heroku上的Url

取得LineBot的相關Token

到建立好的LineBot後台(如何建立LineBot的文章非常多,請自行Google)
選擇”Channel settings”
先找到”Channel secret”

在來往下滑找到”Channel access token (long-lived)”

取得GAS的Url

回到GAS的畫面
創立一個新的”指令碼檔案”
用來取得sheet裡面的任一個檔案

打上我寫好的js code

function loadTosheet() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rnd_index = Math.floor((Math.random() * data.length));
  return data[rnd_index][0];
}
function doGet(){
  return ContentService.createTextOutput(loadTosheet());
}

按下 發佈=>佈署為網路應用程式

裡面這欄就是GAS取得圖片的Url

回到Heroku

在Heroku上再新增一個APP
來放LineBot的Service

一樣可以到我的github做deploy
https://github.com/coreyborad/Heroku-Linebot-Image

切到heroku
選擇 Settings=>Reveal Config Vars
設定參數檔

點開總共有3個欄位

  1. APIURL = GAS取得圖片的Url
  2. LINE_CHANNEL_ACCESSTOKEN = Channel access token
  3. LINE_CHANNEL_SECRET = Channel secret

依序填入

接著找這個App的url
url的位置跟前面一樣
先記著

到LineBot的後台

找到Webhook URL的地方

打入剛剛記住的App url
整個設定就完成了

完成

接著就到Line裡面
跟機器人打指令就可以叫圖了(我專案預設 “5566” 56不能亡)

後記

做完之後約一週吧
才想到Webhook那段可以用GAS完成就好
(GAS已經是https)
不需要再做一個Heroku APP
不過都做了,也沒打算再改架構了…
這樣也可以趁這機會看一下Line的PHP SDK

本篇是分段撰寫的
如果有精神錯亂分裂應該是很正常的
(前後語氣不太對的狀況)
還要繼續練習寫這種架構型文章…

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *