iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0
生成式 AI

打造自己的 AI 新聞小編:每天自動抓新聞、摘要、推送到 LINE!系列 第 19

【Day 18】AI News Bot 新功能!學習如何實現關鍵字搜尋

  • 分享至 

  • xImage
  •  

你已經成功建立了一個可以根據訂閱主題,定時推播新聞的 LINE Bot。今天,我們要讓它變得更聰明!
我們將為你的 Bot 賦予全新的關鍵字搜尋功能。這個功能將讓使用者可以直接輸入感興趣的關鍵字,Bot 便會立刻從新聞資料庫中篩選出相關的報導,讓新聞服務從被動推播轉為主動搜尋。

今天是我們做新功能的第一天!凡事起頭難,今天要好好跟著做喔~先說一下大概的流程:

解析關鍵字 → 獲取訂閱主題 → 讀取 RSS 來源 →獲取新聞內文 → 遍歷新聞 → 格式化訊息 → 傳送回覆

關鍵字搜索

步驟一:判斷條件

Code 節點後面新增一個 If 節點,並輸入以下條件:
https://ithelp.ithome.com.tw/upload/images/20250921/201780676dEf503x2W.png

多加一個 If 節點是為了讓使用者輸入含有「訂閱」的訊息時就跑上面的節點,輸入其他的字詞時就跑下面的節點,不同功能走不同的路就很直觀,在之後測試的時候也比較好找錯誤。

https://ithelp.ithome.com.tw/upload/images/20250921/201780676JlblcwYHc.png

在 true 分支連接試算表,和後面的訂閱邏輯;在 false 分支新增另一個 If 節點(關鍵字),條件如下圖所示:
https://ithelp.ithome.com.tw/upload/images/20250921/2017806732JgBrs5cI.png

若是使用者僅輸入「搜索」兩個字,不知道他要搜索的關鍵字詞是什麼,所以我們要在條件中加上:「訊息字數大於等於三」。

在此 If 節點的 false 分支連結之前接在訂閱邏輯中,最下面的 Http Request 節點,並將內容改為:

{
  "replyToken": "[Execute previous nodes for preview]",
  "messages": [
    {
      "type": "text",
      "text": "我聽不懂您的指令,請輸入「訂閱XX」或「取消訂閱」,若想要搜索關鍵字請輸入「搜索XX」。"
    }
  ]
}

原本 → 非取消訂閱且非訂閱;現在→ 非取消訂閱且非訂閱,而且非搜索。

步驟二:提取關鍵字

If 節點(關鍵字)的 true 分支新增 Code 節點(Keyword),輸入以下程式碼:

const userMessage = $input.first().json.lineMessageBody[0].message.text;
const userId = $input.first().json.lineMessageBody[0].source.userId;
const replyToken = $input.first().json.lineMessageBody[0].replyToken;

const keyword = userMessage.replace("搜索", "").trim();

return {
  json: {
    userId,
    keyword,
    replyToken
  }
};

https://ithelp.ithome.com.tw/upload/images/20250921/20178067WUjw1hSImw.png

這段程式碼的用意是把使用者訊息中的關鍵字提取出來。

步驟三:讀取訂閱主題

再來就是要讀取試算表紀錄的訂閱主題,讓 Line Bot 根據你的訂閱主題來尋找新聞內文是否含有關鍵字。
Code(Keyword)後面新增 Google Sheet 節點(Get Rows In Sheet),內容和之前設定固定時間傳訊息的一樣。

https://ithelp.ithome.com.tw/upload/images/20250921/20178067SZzN95oM63.png

步驟四:抓新聞連結

Google Sheet 節點後面新增一個 Code 節點(RSS URL),輸入以下程式碼:

const topic = $json.topic; 
let rssUrl;

switch (topic) {
  case "國際":
    rssUrl = "https://feeds.feedburner.com/rsscna/intworld";
    break;
  case "科技":
    rssUrl = "https://feeds.feedburner.com/rsscna/technology";
    break;
  case "娛樂":
    rssUrl = "https://feeds.feedburner.com/rsscna/stars";
    break;
  case "取消":
    rssUrl = "https://feeds.feedburner.com/rsscna/technology";
}

return {
  json: { rssUrl, userId: $json.userId, keyword: $json.keyword }
};

https://ithelp.ithome.com.tw/upload/images/20250921/20178067ezG59x1Tez.png
這個節點會根據上個節點的輸出,得到使用者的訂閱主題,根據主題來搜索內文。
如果使用者訂閱科技新聞,那就會搜索所有屬於科技新聞的新聞內文。

使用者輸入:「取消訂閱」→ 主題:「取消」→ 恢復預設:「科技」主題

好啦~今天就先做到這邊吧!這幾個節點是「關鍵字搜索」功能的 1/3 而已,所以這裡也會花多一點篇幅來說明,希望今天的你實作也很順利!

下篇預告

明天(Day 19)我們要繼續作搜索功能的節點,前面會做關於 RSS 的內容,後面會做關於提取內文的內容。


上一篇
【Day 17】擴充系統:新增多個訂閱主題與 RSS 來源
下一篇
【Day 19】新聞搜尋功能大躍進,逐漸完善的工作流
系列文
打造自己的 AI 新聞小編:每天自動抓新聞、摘要、推送到 LINE!20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言