GASでニュースを自動収集!Googleニュースからスプレッドシートに毎日の情報を取得
毎日のニュース情報を整理したいものの、情報収集に時間がかかってしまうことありませんか?
手作業でニュースサイトを巡回するとなると手間もかかります。
そこで、今回は、Google Apps Script(GAS)を使って、Googleニュースの情報をスプレッドシートに取得する方法をご紹介します。
Googleニュースはさまざまなニュースサイトの記事が集められているため、幅広い情報収集が可能です。
このスクリプトを使うことで、複数のニュースサイトを確認することなく手軽にニュースを管理できます。
国やカテゴリー別で取得したり、特定のキーワードでフィルタリングも可能です。
完成イメージ
Googleニュースから以下の情報を取得
A列:ニュースタイトル
B列:リンク
C列:公開日
スプレッドシート内で国、カテゴリー、キーワードを指定し、GoogleニュースRSSを使って取得したニュース情報が表示されます。
GoogleニュースRSSについて
GoogleニュースRSSは、Googleニュースが提供する最新のニュース記事を特定のトピックや国別に、フィード形式で取得するための機能です。
フィード形式は、ニュースサイトやブログなどのウェブサイトが更新されたとき、その更新情報を自動的に配信する仕組みです。
これにより、わざわざ各ニュースサイトを手作業で巡回しなくても、新しい記事を効率よく受け取ることができます。
RSS(Really Simple Syndication)は、このフィード形式の一例で、これを活用することで、興味のあるニュースを一括して受け取ったり、スプレッドシートなど他のツールに連携したりして、情報をより管理しやすくなります。
手順
スプレッドシートの準備
シート名を「ニュース」に設定します。
スクリプトを実行時にこのシート名を参照します。
スプレッドシートに以下の項目名を入力します。
項目名 | |
---|---|
A1 | 国 |
A2 | カテゴリー |
A3 | キーワード |
A5 | タイトル |
B5 | リンク |
C5 | 公開日 |
次に取得するニュースの条件を入力します。
条件入力 | |
---|---|
B1 | JP,USなどの国コード |
B2 | Business、Technologyなど |
B3 | 特定のキーワード |
キーワードを特に指定しない場合は、国、カテゴリーのみでニュースを取得します。
今回のスクリプトで取得できる国やカテゴリーは以下の通りです。
スクリプトに使用するため英語で入力する必要があります。
指定可能な国とカテゴリー
- JP (日本)
- US (アメリカ)
- FR (フランス)
- DE (ドイツ)
- ES (スペイン)
- IT (イタリア)
- KR (韓国)
- CN (中国)
- Nation (国内)
- World (世界)
- Business (ビジネス)
- Politics (政治)
- Science (科学)
- Technology (テクノロジー)
- Entertainment (エンタメ)
- Sports (スポーツ)
国やカテゴリーはプルダウンメニューで選択できるようにすると便利です。
プルダウンメニューを設定することで入力ミスを防ぎ、変更も簡単に行えます。
プルダウンメニューの作成方法
- プルダウンメニューを作成したいセルを選択(例:B1セル)。
- 右クリックして、表示されるメニューから「プルダウン」を選択
- 画面右側に表示された「データの入力規則」のアイテム欄に国コードを入力します。
- 「別のアイテムを追加」を選択して、他の国コードも追加していきます。
- 入力し終えたら、完了をクリックします。
GASの実行
Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。
function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
function fetchGoogleNewsByCountryAndSection() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ニュース");
// スプレッドシートから国とセクション、キーワードの値を取得
const country = sheet.getRange("B1").getValue().toString().toUpperCase(); // 例: "JP"
const section = sheet.getRange("B2").getValue().toString().toUpperCase(); // 例: "WORLD"
const keyword = sheet.getRange("B3").getValue().toString(); // 例: "テクノロジー"
// 国名コードに応じた言語設定を行う
let language = 'en'; // デフォルトは英語
if (country === 'JP') {
language = 'ja';
} else if (country === 'FR') {
language = 'fr';
} else if (country === 'DE') {
language = 'de';
} else if (country === 'ES') {
language = 'es';
} else if (country === 'IT') {
language = 'it';
} else if (country === 'KR') {
language = 'ko';
} else if (country === 'CN') {
language = 'zh-CN';
}
// RSSフィードURLの構成
const rssUrl = `https://news.google.com/rss/headlines/section/topic/${section}?hl=${language}&gl=${country}&ceid=${country}:${language}`;
// RSSフィードの取得
const response = UrlFetchApp.fetch(rssUrl);
const xml = XmlService.parse(response.getContentText());
const root = xml.getRootElement();
const channel = root.getChild("channel");
const items = channel.getChildren("item");
// ニュース記事のデータを開始位置(A6から)に書き込み
if (sheet.getLastRow() > 5) {
sheet.getRange(6, 1, sheet.getLastRow() - 5, 3).clearContent(); // A列からC列までをクリア
}
// ニュース記事のタイトル、リンク、公開日を書き込む
let rowIndex = 6;
items.forEach(item => {
const title = item.getChildText("title");
const link = item.getChildText("link");
const pubDate = item.getChildText("pubDate");
// キーワードフィルタリング(キーワードが入力されている場合のみ)
if (keyword && !title.includes(keyword)) {
return; // キーワードがタイトルに含まれていない場合はスキップ
}
sheet.getRange(rowIndex, 1).setValue(title); // タイトル(A列)
sheet.getRange(rowIndex, 2).setValue(link); // リンク(B列)
sheet.getRange(rowIndex, 3).setValue(pubDate); // 公開日(C列)
rowIndex++;
});
}
スクリプトの説明
- 国、カテゴリー、キーワードの取得
-
function fetchGoogleNewsByCountryAndSection() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ニュース"); // スプレッドシートから国とセクション、キーワードの値を取得 const country = sheet.getRange("B1").getValue().toString().toUpperCase(); // 例: "JP" const section = sheet.getRange("B2").getValue().toString().toUpperCase(); // 例: "WORLD" const keyword = sheet.getRange("B3").getValue().toString(); // 例: "テクノロジー"
- スプレッドシートのシート名「ニュース」を参照します。
- スプレッドシートのB1、B2、B3セルから国(例: JP)、カテゴリー(例: WORLD)、キーワード(例: テクノロジー)を取得します。
- 国名コードを取得し、それに基づいて表示する言語を決定します(例: USなら英語、JPなら日本語)。
- RSSフィードの構成
-
// 国名コードに応じた言語設定を行う let language = 'en'; // デフォルトは英語 if (country === 'JP') { language = 'ja'; } else if (country === 'FR') { language = 'fr'; } else if (country === 'DE') { language = 'de'; } else if (country === 'ES') { language = 'es'; } else if (country === 'IT') { language = 'it'; } else if (country === 'KR') { language = 'ko'; } else if (country === 'CN') { language = 'zh-CN'; } // RSSフィードURLの構成 const rssUrl = `https://news.google.com/rss/headlines/section/topic/${section}?hl=${language}&gl=${country}&ceid=${country}:${language}`;
- 取得した国とカテゴリーの情報をもとに、GoogleニュースRSSフィードのURLを作成します。
hl
(言語)とgl
(地域)のパラメータを動的に設定することで、特定の国のニュースを特定の言語で取得できるようにしています。
- ニュース記事の取得
-
// RSSフィードの取得 const response = UrlFetchApp.fetch(rssUrl); const xml = XmlService.parse(response.getContentText()); const root = xml.getRootElement(); const channel = root.getChild("channel"); const items = channel.getChildren("item");
UrlFetchApp.fetch()
関数を使って、作成したRSSフィードURLからニュースデータを取得します。- XML形式で取得したデータを解析し、ニュースのタイトル、リンク、公開日などを抽出します。
- スプレッドシートへの書き込み
-
// ニュース記事のデータを開始位置(A6から)に書き込み if (sheet.getLastRow() > 5) { sheet.getRange(6, 1, sheet.getLastRow() - 5, 3).clearContent(); // A列からC列までをクリア } // ニュース記事のタイトル、リンク、公開日を書き込む let rowIndex = 6; items.forEach(item => { const title = item.getChildText("title"); const link = item.getChildText("link"); const pubDate = item.getChildText("pubDate"); // キーワードフィルタリング(キーワードが入力されている場合のみ) if (keyword && !title.includes(keyword)) { return; // キーワードがタイトルに含まれていない場合はスキップ } sheet.getRange(rowIndex, 1).setValue(title); // タイトル(A列) sheet.getRange(rowIndex, 2).setValue(link); // リンク(B列) sheet.getRange(rowIndex, 3).setValue(pubDate); // 公開日(C列) rowIndex++; }); }
- 取得したニュース記事のデータを、スプレッドシートのA6セル以降に書き込みます。
- 既存のデータをクリアし、新たに取得したニュース情報を順次書き込んでいきます。
- キーワードが設定されている場合は、ニュースタイトルにそのキーワードが含まれている記事のみを表示します。
スクリプトを書いたら、名前を付けて保存します。
(例:「Googleニュース」)
スクリプトを実行してニュースを取得します。
初めてそのスクリプトを実行する場合は権限の確認が必要です。
そのため、『権限を確認』を押します。
許可の詳細手順
「詳細」をクリックします。
「無題のプロジェクト(安全ではないページ)に移動」をクリックします。
「許可」をクリックします。
スプレッドシートの5行目以降にニュース情報が反映されます。
国やカテゴリーを変更して、繰り返しスクリプトを実行する場合は、スクリプト用のボタンを設置すると取得が簡単になります。
トリガー設定で決まったタイミングで自動収集
自動的にニュースを取得するためには「トリガー」を設定します。
これにより、指定した時間に自動的にスクリプトが実行され、最新のニュース情報が取得されます。
トリガー設定の方法
先ほどと同様の手順です。
Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。
トリガーアイコン(時計アイコン)をクリックします。
「トリガーを追加」ボタンを押し、以下のように設定します。
- 実行する関数を選択:
fetchGoogleNewsByCountryAndSection
- 実行のデプロイを選択:
Head
- イベントの種類を選択: 「時間主導型」
- 時間ベースのトリガー: 「日付ベースのタイマー」
- 時刻を選択: 例えば「毎日午前9時」に設定することで、毎朝自動的にニュースを取得できます。
まとめ
このGASを使うことで、手作業でニュースサイトを巡回する手間を省くことができます。
また、特定のキーワードで記事をフィルタリングできるため、効率的にニュース情報を取得できます。
日々の情報収集をする際にご活用ください。
弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント