Open7
Node-REDスクレイピング Yahoo

STEP2 - スクレイピング
Yahooから岩手のニュースを取得したい。

Functionノードのコード
Claudeに聞いた
msg.payload = msg.payload.toString();
let articles = [];
// 記事リストを分割
let items = msg.payload.split('<li class="sc-1u4589e-0 kKmBYF">');
// 各記事の情報を抽出
for(let i=1; i<items.length; i++) {
let item = items[i];
let article = {};
try {
// URLの抽出
let urlStart = item.indexOf('href="') + 'href="'.length;
let urlEnd = item.indexOf('"', urlStart);
if(urlStart > -1 && urlEnd > -1) {
article.url = item.substring(urlStart, urlEnd).trim();
}
// タイトルの抽出
let titleStart = item.indexOf('class="sc-3ls169-0 dHAJpi">') + 'class="sc-3ls169-0 dHAJpi">'.length;
let titleEnd = item.indexOf('</div>', titleStart);
if(titleStart > -1 && titleEnd > -1) {
article.title = item.substring(titleStart, titleEnd).trim();
}
// 日付の抽出 - 新しい方法
let dateStart = item.indexOf('class="sc-16vsoxb-1 cPSkfe">') + 'class="sc-16vsoxb-1 cPSkfe">'.length;
if(dateStart > -1) {
let dateText = item.substring(dateStart);
let dateMatch = dateText.match(/([0-9]{1,2}\/[0-9]{1,2}\([日月火水木金土]\))\s*<!-- -->\s*<!-- -->\s*([0-9]{1,2}:[0-9]{2})/);
if(dateMatch) {
article.date = dateMatch[1] + " " + dateMatch[2];
}
}
// メディア名の抽出
let mediaStart = item.indexOf('class="sc-1t7ra5j-9 dIJJqB">') + 'class="sc-1t7ra5j-9 dIJJqB">'.length;
let mediaEnd = item.indexOf('</span>', mediaStart);
if(mediaStart > -1 && mediaEnd > -1) {
article.media = item.substring(mediaStart, mediaEnd).trim();
}
// 記事が有効な情報を持っている場合のみ追加
if(article.title && article.url) {
articles.push(article);
}
} catch(e) {
// エラーが発生した場合はその記事をスキップ
node.error("Error processing article: " + e.message);
continue;
}
}
msg.payload = articles;
return msg;

ここまでSTEP2

STEP3: 最後LINEに通知など
STEP3-1: まずはLINEにプッシュする機能
- まずLINEのノードインストール
- LINE Botにプッシュメッセージを送るだけやってみる
Configノードに設定を追加 + UserIDの設定が必要。
https://flows.nodered.org/node/node-red-contrib-line-messaging-api

STEP3-2:
LINEにプッシュできたら先ほどのスクレイピングした要素と組み合わせて 最新のニュース1件をLINEに通知させてみましょう。
ChangeノードやFunctionノードが必要になりそう。

STEP3-3: チャレンジ
3-2ができたら最新の5件をLINEに通知する仕組みにしてみる。