実現したいこと
GASを使って、Yahoo! JAPANニューストピックスのリンク先とタイトルを取得し、取得した内容をメールで通知するようにしたい。
※取得したいトピックスは、下図の赤枠エリア
上記でいえば、
”https://news.yahoo.co.jp/pickup/6374265:菅首相の初外遊 狙いと成果は”
のような文字列が8件分メールに表示される想定です。
試したこと
GASで下記コードを記述
function getNews() { // Yahoo!ニュースからHTMLを取得 var response = UrlFetchApp.fetch("https://news.yahoo.co.jp/"); var html = response.getContentText('UTF-8'); // class名がtopicsListItemのliタグを取得 var targetsRegexp = /<li class="topicsListItem([\s\S]*?)</li>/g; var targetsDOM = html.match(targetsRegexp); // li内にあるURLの検索条件 var linkRegexp = /<a href="([\s\S]*?)"/; // li内にあるニュースタイトルの検索条件 var titleRegexp = /data-rapid_p=([\s\S]*?)>([\s\S]*?)</; // メール本文取得 var note = ""; targetsDOM.forEach(function(target){ link = target.match(linkRegexp); title = target.match(titleRegexp); note += link[1] + ":" + title[1] + "\n"; }) // ニュースをメールで通知する MailApp.sendEmail({ to: "〇〇〇@gmail.com", subject: "ニュースです", body: note }); }
上記実行すると下記エラーが表示されます。
TypeError: Cannot read property '1' of null(行 19、ファイル「getNews」
調査したところ、サイトのリンクは取得できていたのですが、タイトルが取得できていないようです。
(titleがnullで返ってきてました…)
↓ですので、問題の箇所はこの部分だと思っているのですが、いまだにどうすれば良いのか分からず。
// li内にあるニュースタイトルの検索条件 var titleRegexp = /data-rapid_p=([\s\S]*?)>([\s\S]*?)</;
原因など分かる方がいらっしゃれば、ご教示いただけると幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー