1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【アドカレ2025 Day2】Web Scraperで取った記事情報をGoogleスプレッドシートに自動保存してみた(Dify)

1
Last updated at Posted at 2025-12-01

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

2025年のQiitaアドベントカレンダーでは、
「ノーコード/ローコードで、自分のコンテンツ基盤を自動化していく」
をテーマに、25日間の仕組みづくりを記録していきます。
ぜひ、応援してください。

Day2 の今日は、Day1で抽出したnote記事情報を Googleスプレッドシート(以下スプシ)に書き込む 処理を実装します。

調べてみると、Dify では append row(行を追加する方法)を使った例は見つかるのですが、
公式が提供している 「Google Sheets プラグイン」 を使って
Batch Get や Batch Update で行を更新している記事は、意外と少ない印象でした。

そのため、今回は自分用のメモとして、
プラグインを使ったスプレッドシート更新のワークフロー をまとめています。
どなたかの参考になれば嬉しいです。


今日の処理フロー(全体)

image.png

ワークフロー構成は以下の7ステップ:

  1. Start(記事URLを受け取る)
  2. Web Scraper(本文抽出)
  3. LLM(title/description/published_date/tags/body_text をJSON整形)
  4. Batch Get(スプシ全行を取得)
  5. Code(次の空き行 or 更新行のインデックスを判定)
  6. Batch Update(該当行にデータを書き込む)
  7. 終了

実務向けの非常に綺麗な構成になっています。


1. スプレッドシートの準備

今回は、スプシをできるだけシンプルに保つため、
カラムは次の4つだけにしています。

A列 B列 C列 D列
title url editdate tags
  • title:記事タイトル
  • url:note記事のURL
  • editdate:更新日(今回の実行日や公開日のどちらでもOK)
  • tags:記事につけたいタグ(カンマ区切り)

image.png

▼ スプレッドシートURLのID部分

API設定や Dify のプラグインで使うので、
docs.google.com/spreadsheets/d/XXXXX/edit#gid=0
XXXXX を控えておきます。


2. Dify側で Google Sheets を接続

  1. 「ツール」→「Marketplace」
  2. Google Sheets をインストール
  3. Googleアカウントと接続

3. Batch Get でスプシの全行を読み込む

Batch Get は、
「指定したシートの現在の内容をまとめて取得する」
ためのノードです。

今回の処理では、

  • 既に同じ URL が登録されているか?
  • それとも新しい記事として追加するか?

を判定するため、最初に全行を取得しています。


▼ Batch Get の設定(画面の意味を簡潔に)

① Spreadsheet ID

  • スプレッドシートURLの
    docs.google.com/spreadsheets/d/XXXXX/edit#gid=0
    XXXXX を入力します。

② Range

  • 取得したい範囲を A1 記法で指定します。
  • 今回はシート全体を対象にしたいため、例として
["シート1!A:D"]

のように、全列を含む範囲を指定しています。


▼ Batch Get の返り値イメージ

{
  "files": [],
  "json": [
    {
      "spreadsheetId": "スプシID",
      "valueRanges": [
        {
          "majorDimension": "ROWS",
          "range": "'シート1'!A1:D998",
          "values": [
            [
              "title",
              "url",
              "editdate",
              "tags"
            ],
            [
              "わたしの物差しは私のもの。削らなくていい。",
              "https://note.com/lovely_hawk768/n/n0faabdc39561",
              "2025年11月6日 21:00",
              "* #自分, * #大切, * #価値観, * #気持, * #物差,"
            ]
          ]
        }
      ]
    }
  ],
  "text": ""
}

この配列を後続の Code ノードで読み取り、
同じURLがあるかどうか→行番号の決定
という流れに使っています。


4. コード実行ノードで「次に書き込む行の範囲」を作る

Batch Get でシート全体を読み込んだあとは、
次にどの行へデータを書き込むか(Range指定)
コード実行ノードで計算しています。

今回のコードは非常にシンプルで、

  1. Batch Get の結果から 最終行番号を取得
  2. 次に書き込む行番号(最終行+1)を計算
  3. A:D の4列分に対応した Range 文字列
    (例: シート1!A5:D5
    を組み立てて返す

という処理を行っています。
このスクリプトは ChatGPT に叩き台を作ってもらい、シート構造に合わせて少し調整したものです。


▼ 実際に使っているコード

function main({ ss_body, sheet_name = "シート1" }) {    
    const last_row = ss_body[0].valueRanges[0].values.length;
    const new_line_num = last_row + 1;
    const range = `${sheet_name}!A${new_line_num}:D${new_line_num}`;
    return { result: range };
}

▼ 処理の流れ(簡潔に)

  • last_row
    → スプレッドシートの現在の行数
  • new_line_num
    → 次に書き込む行番号(= 最終行+1)
  • range
    → Batch Update 用の書き込み範囲
    (A列〜D列の4カラムに対応)

この range をそのまま Batch Update ノードの Range に渡し、
次の行へデータを書き込む仕組みになっています。


5. Batch Update で該当行だけ更新する

書き込む行番号(例:3)と、
その行の A〜D 列に対応する Range(例:シート1!A3:D3)は、
ひとつ前のコード実行ノードで生成しています。

Batch Update ノードでは、この Range をそのまま使い、
1 行分だけの値をピンポイントで上書きする 仕組みになっています。

---

▼ 今回の Batch Update の設定内容

① Spreadsheet ID

  • スプレッドシートの /d/XXXXX/ にあたる部分を指定するだけ
  • Batch Get と同じ ID を使います

② Data(ここが今回のポイント)

設定は至ってシンプルで、jsonのお手本がノードの説明に小さく書いてあるのでそこをうまく利用し、パラメータはDifyの機能を使って指定します。

[{
"range":"コードノードの出力結果", 
"values":[
["LLMノードで出力したtitle",
 "開始ノードで出力したurl",
 "LLMノードで出力したeditdate",
 "LLMノードで出力したtags"]
]
}]


6. 動作確認

ワークフローを実行すると:

  • URLが初回なら→新しい行に追加
  • 既存URLなら→その行が上書きされる

7. Day2で作った構成の良いところ

✅ Google スプレッドシート プラグインで完結する

Apps Script の設定やデプロイが不要で、
Dify のワークフローの中だけで処理が完結します。

✅ スプレッドシートを「DBのように」扱える

URLをキーにして行を更新できるので、
後々のメンテナンスやデータ管理がぐっと楽になります。

✅ 他ツールとの連携もしやすい

列構造をそろえたシンプルなテーブルになっているので、
Looker Studio や Python からそのまま読み込んで活用できます。

Day3 予告

Day3 では、このスプシを使って

オリジナルの “noteダッシュボード” を作る

ところに進みます。

  • 公開日の推移
  • タグ別の記事の傾向
  • 自分の得意ジャンル分析
    など、Looker Studio を使って視覚化していきます。

明日もよろしくお願いします 🙌

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?