Day27 过不去的槛就先绕过它 - LINE Notification

原本於Day26打算利用Message API来完成LINE Bot功能,但发现Webhook需要搭配https,而且SSL从购买的价钱到设定的步骤我对新手没有到非常友善,为了以完成功能为主采用另外一种方法来完成推播汇率的功能。

这次采用的是LINE Notification,一样先利用LINE的帐号注册登入,登入後於右上角点选个人页面後点选发行权杖

https://ithelp.ithome.com.tw/upload/images/20210927/201150488lchthQluu.png

权杖名称自行设定一个想用的名字即可,接收通知的聊天室先选择透过1对1聊天接收LINE Notify的通知

https://ithelp.ithome.com.tw/upload/images/20210927/201150488mVaH3KHkt.png

此时将此Token复制起来保存好,关闭之後就看不到Token要重新开一个权杖了。

接着开始程序的撰写,先下指令创建一个Command

php artisan make:command lineNotification

参数设定

protected $signature = 'line:notification';
protected $description = 'Notification exchange rate by line';

接着点开发行权杖下方的LINE Notify API Document,看一下官方提供的API要怎麽操作

直接看到这只APIPOST https://notify-api.line.me/api/notify

https://ithelp.ithome.com.tw/upload/images/20210927/20115048Jy4XHgZ83J.png

这边是我觉得很重要的地方,官方有限定传输资料的格式

在Laravel的官方可以看到如果要传出application/x-www-form-urlencoded格式的资料的话需要多一个asForm()function,我自己实作时因为没有注意到这项讯息所以卡关了一下。

接着於Command上方引入Http套件use Illuminate\Support\Facades\Http;,於handle写入逻辑。

$response = Http::withHeaders([
    'Authorization' => 'Bearer ' . 'your token',
])
->asForm()
->post('https://notify-api.line.me/api/notify', [
    'message' => 'test',
]);

withHeaders的地方要填写权杖,Token的前方要加上Bearer ,不要忘记空白键一格
asForm是为了让传输资料的格式变为application/x-www-form-urlencoded
接着将资料以POST method传送至指定API

此时就可以下指令测试了php artisan line:notification

https://ithelp.ithome.com.tw/upload/images/20210927/20115048igzBUzEV9c.png

此时已经会收到通知了,所以开始来撰写汇率的逻辑

筛选出最新一笔美金对台币的汇率

$exchangeRate = ExchangeRate::select(
            'exchange_rate',
            'currency',
            'created_at',
)
    ->where('currency', 'TWD')
    ->orderBy('created_at', 'DESC')
    ->first();

组合一下要传送的字串

$message = '今日 USD 对 ' . 
    $exchangeRate->currency . 
    ' 汇率为 ' . 
    $exchangeRate->exchange_rate . 
    ' 更新时间 ' . 
    $exchangeRate->created_at;

替换要传送的变数

->post('https://notify-api.line.me/api/notify', [
    'message' => $message,
]);

此时再下一次指令php artisan line:notification可以看到功能已经完成了

https://ithelp.ithome.com.tw/upload/images/20210927/20115048pd8QQK7JV8.png

最後只要在Kernal加上定时推播即可,将时间订在串接汇率API後的半小时,这样就可获得比较新的汇率

$schedule->command('line:notification')->dailyAt('08:30');

如此一来就完成了一开始想要的功能,一早起床打开手机就可以马上获得最新的汇率了。

今天的介绍就到这边结束了,谢谢观看的各位,请记得按赞分享开启小铃铛,你的支持会让按赞数+1。


<<:  [2021铁人赛 Day12] General Skills 09

>>:  Vuex 的使用偏好

Day16 X Polyfill-less Bundling Script & File Compression

今天是 Build Optimizations 主题的最後一篇了,到目前为止我们已经认识了 Cod...

企划实现(23)

立案後的费用产生 很多人会产生一个疑问,立案後如果没有营业跟有营业的费用产生的差别。 这里必须要先说...

Python 演算法 Day 4 - 理论基础 微积分

Chap.I 理论基础 Part 2:微积分 4. Critical Points and Opti...

自动化很潮,我们来建一套!

导入自动化,期望达到减少人力资源,降低成本,提高生产力等等。而软件工程的自动化已经开始转换成 Dev...

[Day06] 第六章- 开发环境安装(xampp,vscode,composer)

目标 安装环境 勘误修正及补充 1. 前言 到目前为止 已经把永丰的api参数以及相关制作流程做完了...