はじめに
毎朝、ニュースサイトをチェックするのって大変ですよね。
そこで今回は、 Google Apps Script (GAS) 、 無料のニュースAPI 、そして Googleの生成AI「Gemini」 を組み合わせて、 最新のニュースをまとめてLINEに送ってくれるシステム を作ってみましょう!
プログラミング初心者の方でも、ステップバイステップで解説していくので、安心してください。
なお、今回は制限付きですが、API利用が基本無料なGeminiを選択しました。
今後課金される可能性もあるので注意しましょう!
必要なもの
- Googleアカウント
- 通知先のLINEのアカウント
- Google AI Studio上で取得したGemini APIのAPIキー
- News APIのAPIキー (今回はNews API を利用します)
- LINE Notifyのアクセストークン
手順
1. Google Apps Script (GAS)の準備
GASは、Googleが提供するJavaScriptベースのスクリプト実行環境です。ブラウザ上でコードを記述・実行できるため、手軽にWebアプリケーションや自動化ツールを作成できます。
また、定期実行のトリガーを簡単に作ることができます!
まずは、GASのコードを記述するためのプロジェクトを作成しましょう。
- Googleドライブを開き、「新規」>「その他」>「Google Apps Script」を選択します。
- プロジェクト名は任意の名前で構いません (例: news_summarizer)。
2. 各種APIキーの準備
今回のシステムでは、外部サービスと連携するために、以下のAPIキーが必要となります。
-
News APIキー: News API のウェブサイトでアカウントを作成し、APIキーを取得します。
News APIについてはこちらの記事が参考になります。
-
Google AI Studio上で取得したGemini APIのAPIキー:
- Google AI Studio にアクセスします。
- 左上の「Get API key」をクリックします。
3.「APIキーを作成」をクリックし、APIキーを作成します。
プランがFree of charge(無料枠)になっていることを確認します。
注: Vertex AIからAPIキーを生成してしまうと従量課金されてしまうので注意しましょう。
-
LINE Notifyアクセストークン: LINE Notifyのマイページからアクセストークンを発行します。
簡単なので、以下の記事を参考にしてみてください。
また、記事の指示に従って、ルームの作成と、LINE notifyの招待まで済ませておきましょう。
取得したAPIキーは、コード内の所定の位置に貼り付けます。セキュリティのため、APIキーは外部に漏洩しないよう、厳重に管理してください。
3. ニュースを取得する関数の追加: fetchNews(topic)
ここからは実際にコードを作成します!
同じファイルに、どんどん貼り付けていきましょう。
この関数は、News APIを使って、指定されたtopic
(ニュースのカテゴリ) に合致する最新のニュースを取得します。
function fetchNews(topic) {
// News APIキーを設定
const newsApiKey = ''; // あなたのNews APIキーを入力
// News APIのURL
const newsApiUrl = `https://newsapi.org/v2/top-headlines?country=jp&category=${topic}&apiKey=${newsApiKey}`;
// News APIを呼び出すための設定
const newsApiOptions = {
'method': 'get',
'contentType': 'application/json'
};
// News APIを呼び出して結果を取得
const newsApiResponse = UrlFetchApp.fetch(newsApiUrl, newsApiOptions);
const newsData = JSON.parse(newsApiResponse.getContentText());
// ニュース記事のタイトルを抽出
const newsTitles = newsData.articles.map(article => article.title).join('\n');
// ニュースのタイトルを返す
return newsTitles;
}
-
newsApiKey
に取得したNews APIキーを貼り付けます。 -
newsApiUrl
は、News APIのエンドポイントです。country=jp
で日本国内のニュースに絞り込み、category=${topic}
で指定されたカテゴリの最新ニュースを取得します。 -
UrlFetchApp.fetch()
でAPIを呼び出し、JSON.parse()
でレスポンスをJavaScriptオブジェクトに変換します。 -
newsData.articles
から各記事のタイトルを抽出し、改行で連結した文字列をnewsTitles
に格納して返します。
なお今回は最新のニュースを取得するTop headlines エンドポイントを利用しています。
詳しい検索などを利用したい場合、他のエンドポイントが利用できるので、ドキュメントを参照してみてください!
4. ニュースを要約する関数: summarizeNews(newsTitles)
この関数は、取得したニュースのタイトルリスト (newsTitles
) を元に、Gemini APIに要約を依頼します。
function summarizeNews(newsTitles) {
const apiKey = ''; // あなたのGoogle AI studioで取得したAPIKeyを入力
// Geminiに送るプロンプト
const prompt = `以下のニュース記事を簡潔にまとめてください。\n\n${newsTitles}`;
// Gemini APIを呼び出すための設定
const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key=${apiKey}`;
const options = {
'method': 'post',
'contentType': 'application/json',
'payload': JSON.stringify({"contents":[{"parts":[{"text":prompt}]}]})
};
// Gemini APIを呼び出して結果を取得
const response = UrlFetchApp.fetch(url, options);
const data = JSON.parse(response.getContentText());
// Geminiの回答を抽出
const newsSummary = data.candidates[0].content.parts[0].text;
// ニュースのサマリを返す
return newsSummary;
}
-
apiKey
にGoogle AI Studioで取得したAPIキーを貼り付けます。 -
prompt
には、ニュースタイトルのリストを埋め込んだ要約依頼文を作成します。 -
url
は、Gemini APIのエンドポイントです。 -
UrlFetchApp.fetch()
でAPIを呼び出し、JSON.parse()
でレスポンスをJavaScriptオブジェクトに変換します。 -
data.candidates[0].content.parts[0].text
からGeminiが生成した要約文をnewsSummary
に格納して返します。
5. LINEに通知する関数: sendLineNotification(message)
この関数は、LINE Notify APIを使って、指定されたメッセージ (message
) をLINEに送信します。
function sendLineNotification(message) {
// LINE Notifyのアクセストークンを設定
const token = ''; // あなたのLINE Notifyのアクセストークンを入力
// LINE Notify APIのURL
const url = 'https://notify-api.line.me/api/notify';
// リクエストヘッダー
const headers = {
'Authorization': `Bearer ${token}`
};
// リクエストオプション
const options = {
'method': 'post',
'headers': headers,
'payload': { 'message': message }
};
// LINE Notify APIにリクエストを送信
UrlFetchApp.fetch(url, options);
}
-
token
にLINE Notifyのアクセストークンを貼り付けます。 -
UrlFetchApp.fetch()
でLINE Notify APIを呼び出し、メッセージを送信します。
6. 全体の処理をまとめる関数: postNewsToLINE()
この関数は、これまでの関数を順番に呼び出し、ニュース取得からLINE通知までの処理全体を実行します。
function postNewsToLINE() {
// ニュースのカテゴリを設定 (例: business)
const topic = 'business';
// News APIからニュースを取得
const newsTitles = fetchNews(topic);
// Geminiでニュースを要約
const newsSummary = summarizeNews(newsTitles);
// ニュースのサマリをLINEに投稿
sendLineNotification(newsSummary);
}
-
topic
に希望のニュースカテゴリを設定します (News APIで利用可能なカテゴリはこちらを参照)。 -
fetchNews()
,summarizeNews()
,sendLineNotification()
を順番に呼び出して処理を実行します。
7. テスト実行!
ここまでコードを書きおえたら、実行してみましょう。
「postNewsToLINE」を選択し、実行をクリック
権限の承認が出てくると思うので、以下の記事の指示に従ってアクセスを承認し、実行!
ピロンと、LINEの通知が届くはずです!!
8. 定期実行の設定
最後に、この postNewsToLINE
関数を毎日決まった時間に実行するように設定します。
- GASのエディタ画面の左側にある時計マーク (トリガー) をクリックします。
- 「トリガーを追加」ボタンをクリックします。
- 実行する関数に
postNewsToLINE
を選択します。 - イベントソースを「時間主導型」に、時間ベースのトリガーを「日付タイマー」に、時刻を希望の時間 (例: 午前7時) に設定します。
- 保存します。
これで、毎日設定した時間に指定したカテゴリのニュースサマリーがLINEに届くようになります!
まとめ
Google Apps Scriptと無料API、そしてGoogleの最新AI技術を組み合わせることで、誰でも簡単に便利な自動化ツールを作成できます。
今回は簡単なプロンプトですが、プロンプトの工夫次第でどんなことでもできちゃいますね。
今回の記事を参考に、ぜひ色々なサービスを組み合わせて、あなただけのオリジナルツールを作ってみてください!
今後も生成AIの最新動向や初心者向け記事を投稿していくので、ぜひフォローよろしくお願いします🙏
それでは、よき生成AIライフを!