5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

satto | 生成AIエージェントAdvent Calendar 2024

Day 14

AIとGASを使ってGoogleマップからおすすめ店舗ベスト10をスプレッドシートに!地図作成も簡単に

Posted at

これは 「satto | 生成AIエージェント Advent Calendar 2024」 14日目の記事です。

こんにちは。「学びの探究者」です。普段はnoteで活動しています。

普段は、エンジニアではありません。
そんな私でも「satto」を使えば自分の好きなスキルができちゃうんだーということでサッとご紹介できればと思います。

この記事では、AIとGoogle Apps Script(GAS)、生成AIを組み合わせて、日常で役立つ簡単なスキルを作る方法を紹介します。生成AIを使ったアプリケーション開発に興味がある方や、非エンジニアでも手軽に生成AIを試してみたい方におすすめです。

スキルの概要

  • 目的:Googleマップの店舗情報を効率的に抽出し、スプレッドシートに整理するスキルをAIとGASで実現。
  • できること
    1. Googleマップで検索した上位10店舗の情報を取得
    2. スプレッドシートにデータを自動アップロード
    3. フィールド例: 店舗名、住所、緯度、経度、レビュー評価、レビュー数など
  • 技術スタック
    1. GoogleマップAPI
    2. Google Apps Script (GAS)
    3. satto

スプレッドシートの設定方法(GAS)

1. スプレッドシートの準備:Googleドライブで新しいスプレッドシートを作成します。
「スプレッドシートID」をコピーしておきます。(URLの中の docs.google.com/spreadsheets/d/[ここがID])
2. GASエディタを開く:スプレッドシートの「拡張機能」→「Apps Script」をクリックします。
GASエディタが開いたら、新しいプロジェクトとして保存。
3. スクリプトの記述:

function onEdit(e) {
  const spreadsheetName = "スプレッドシート名をここに"; // 対象のスプレッドシート名
  const csvFileName = "保存するCSVファイル名.csv";      // 保存するCSVファイル名
  const folderName = "保存先のGoogleドライブフォルダ名"; // 保存先フォルダ名

  // 対象のスプレッドシートを取得
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  if (spreadsheet.getName() !== spreadsheetName) {
    return; // 対象外のスプレッドシートの場合は終了
  }

  // データを取得
  const sheet = spreadsheet.getActiveSheet();
  const data = sheet.getDataRange().getValues();

  // CSV形式に変換
  const csvContent = data.map(row => row.join(",")).join("\n");

  // Googleドライブのフォルダに保存
  const folder = DriveApp.getFoldersByName(folderName).next(); // フォルダを取得
  const existingFiles = folder.getFilesByName(csvFileName);

  // 同じ名前のファイルが存在する場合は削除
  while (existingFiles.hasNext()) {
    existingFiles.next().setTrashed(true);
  }

  // 新しいCSVファイルを作成
  folder.createFile(csvFileName, csvContent);
  Logger.log(`CSVファイルを保存しました: ${csvFileName}`);
}

4. ウェブアプリとしてデプロイ

  • GASエディタの「デプロイ」→「新しいデプロイ」を選択。
  • 「ウェブアプリ」を選び、プロジェクト名を設定。
  • 「次のユーザーとしてアプリケーションを実行」を「自分」、
  • 「ウェブアプリのアクセス」を「全員(匿名ユーザー)」に設定。

5. Sattoに設定

  • Sattoの「アプリノード」に移動。
  • 必要なPOSTデータフォーマットを設定。

Sattoの実装例

フロー図

AIノード①のプロンプト

あなたのタスクは、指定された地域とカテゴリーに基づいてGoogleマップを利用してトップ10店舗を選び、それをスプレッドシートに連携できるbody文として出力することです。

### 入力条件
- 地域: {{入力.地域}}
- お店のカテゴリー: {{入力.お店のカテゴリー}}

以下のJSON形式で、指定された地域とカテゴリーに基づいてGoogleマップからトップ10店舗を検索し、情報を出力してください。

### 必要な情報
各店舗について、以下の6つの情報を取得してください。
- 店名
- 住所
- 緯度
- 経度
- レビュー評価
- レビュー数

### 選出基準
- トップ10店舗は、レビュー評価が高い順に選びます。
- 同評価の場合、レビュー数が多い順に並べてください。

### 注意事項
-緯度と経度はGoogleマップから正確な値を取得してください。
-指示を復唱しないでください。
-中間結果や余計な説明は出力しないでください。
-結果のみを出力してください。
-アウトプットを""(ダブルコーテーション)で囲わないでください。

AIノード②のプロンプト

あなたは、ユーザーがAI①から生成されたデータをGoogleスプレッドシートにpostできるようサポートするアシスタントです。
まずは、ユーザーが提供するデータを受け取り、それをGoogleスプレッドシートにpostするために必要なbody文を作成してください。
以下のステップに従ってください:

1. データは {{AIノード①.output}} に格納されています。
2. 受け取ったデータを解析し、GoogleスプレッドシートのAPIに適した形式に変換する。
3. body文を出力する。

#フォーマットはこちらを使います
最大10行です。

{ "values": [ ["店名1", "住所1", "緯度1", "経度1", "レビュー評価1", "レビュー数1"], ["店名2", "住所2", "緯度2", "経度2", "レビュー評価2", "レビュー数2"] ] }

# 補足
- 指示の復唱はしないでください。
- 自己評価はしないでください。
- 結論やまとめは書かないでください。
- 最終成果物以外は出力しないでください。
- 出力結果をダブルクォーテーション("")で囲わないでください。

最後に

ポイントとしては、AIノードには明確に指示するために、「Googleマップから情報を収集する」役割と「body文を生成する」役割に分けるとうまく行きました。

スプレッドシートに緯度経度までリストアップしているので、Googleマイマップのインポート機能を使えば「パン屋マップ」、「カフェ巡りリスト」などがすぐ作れるようになります。

この記事が役に立った場合は、ぜひコメントやいいねをお願いします!
noteでは、スキル作成の背景や学び、さらに応用アイデアについて詳しく解説しています!
リンクはこちら👉Googleマップ×スプレッドシートで簡単データ整理!非エンジニアでもできるスキル作り

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?