Difyのワークフローを使って、記事URLからGoogleスプレッドシートにツイートの文章を保存する方法をご紹介します。
大まかな流れ(概要)
- URLを受け取れるように設定(ノード1)
 - WEB SCRAPERで記事情報を取得(ノード2)
 - LLMでツイートを作成(ノード3)
 - CODEでLLMの出力を整形(ノード4)
 - カスタムツールでGoogle SpreadSheetへデータを保存(ノード5)
 
上記のようにノードを設定して、最終的には以下の画像のようになります↓

事前準備
以下の設定を事前に行なっておいて下さい。わからない場合は、ネットで調べるとすぐ出てきます。
- DifyのツールでWebScraperを使えるようにしておく
 - DifyのLLMノードで使うためのモデルを設定しておく
 - Googleスプレッドシートを使えるようにしておく
 
Difyで記事URLからツイートを量産する方法の具体的な解説
では、それぞれのノードでの設定を解説します。
Step①:URLを受け取れるように設定(ノード1)
まずは、Startノードでurlを受け取れるように設定します。

Input fieldの+ボタンを押して、urlという名前でフィールドを作成し、String型に設定しておきます。
Step②:WEB SCRAPERで記事情報を取得(ノード2)
次は、WEB SCRAPERツールへ接続して、INPUR VARIABLESのところのURLへ、Startノードのurlを渡すように設定します。

入力欄で「/」を押すと候補がいくつか出てくるので、そこから探してみてください。
トマトソースUser Agentなど他の設定部分は特にいじっていません。
Step③:LLMでツイートを作成(ノード3)
次に、LLMノードに接続し、モデルの設定などを行います。私はClaude Sonnetを使いました。
システムプロンプトに、自身のカスタムプロンプトを設定しておきます。例えば、以下の感じで。
# 役割
あなたは、鋭い洞察力を持つプロのSNSマーケターです。
# 入力情報
以下の記事本文を読んでください。
---
記事本文:
ユーザーから与えられた内容
---
# 指示
上記の記事本文の要点を正確に捉え、読者が思わずクリックしたくなるような魅力的なツイートの案を3つ作成してください。
# 制約条件
* ツイートはそれぞれ140字以内にする。
* 最も重要なキーワードを盛り込んだ、魅力的なハッシュタグを3つ付ける。
* 読者の感情に訴えかけるため、文脈に合った絵文字を1〜2個、効果的に使用する。
* ツイートの最後に、必ず以下の記事URLを記載する。
  記事URL: {{article_url}}
* 異なる切り口や表現で、多様なパターンのツイートを作成する。
* 炎上リスクのある過激な表現や、誤解を招く表現は絶対に避ける。そして、Add messageを行い、ユーザーからのメッセージとして、WebScraperからの出力テキストを渡します。





ここも「/」を入力すると候補が出てくるかと思うので、適切なものを選択してください。
Step④:CODEでLLMの出力を整形(ノード4)
Codeノードを追加し、以下の設定を行います。
Input variables
tweets_raw: "LLM.text"
article_url: Start.urlpython3
import datetime
def main(tweets_raw: str, article_url: str) -> dict:
    """
    LLMが生成したテキストを分割し、オブジェクトのリストを作成します。
    """
    # タイムゾーンを設定して現在時刻を生成
    jst_offset = datetime.timedelta(hours=9)
    jst_timezone = datetime.timezone(jst_offset, name='JST')
    start_time = datetime.datetime.now(jst_timezone).strftime('%Y-%m-%d %H:%M:%S')
    # テキストを分割
    tweets_list = [t.strip() for t in tweets_raw.split('|||')]
    tweets_list = [t for t in tweets_list if t]
    # オブジェクトのリストを格納する配列を準備
    all_rows_data = []
    
    # 各ツイートを、リストではなく辞書(オブジェクト)に変換
    for tweet in tweets_list:
        single_row_object = {
            "datetime": start_time,
            "url": article_url,
            "status": "未確認",
            "tweet": tweet,
            "memo": ""
        }
        all_rows_data.append(single_row_object)
        
    # 最終的な出力データを返す
    return {
        'rows_to_append': json.dumps(all_rows_data, ensure_ascii=False)
    }


私は、ツイート内容以外にも、日付やURLなどをスプレッドシートに保存したかったのでそのように出力されるように設定しています。
single_row_object = …の部分です。
Output variable
ここには、以下の設定をしておきます。
rows_to_append: String上記3つの項目を設定したのが以下のよう画面になります。


ちなみに、output variableでObject[String]もあり、そちらで対応しようとしましたが、現状カスタムツールではObject型のデータが受け取れない(ノードのinput variableのところで設定できない)ので、Stringにしています。
Step⑤:カスタムツールでGoogle SpreadSheetへデータを保存(ノード5)python3
最後は、カスタムツールを作成し、つなぐだけです。具体的な流れとしては以下のとおりです。
- データを保存するためのGoogle SpreadSheetを作成する
 - そのシートのApp Scriptを作成する
 - デプロイURLを保存する
 - カスタムツールを作成する
 - カスタムノードにStep4の出力を渡す
 
順番に解説します。
データを保存するためのGoogle SpreadSheetを作成する
まず、データの保存先のスプレッドシートを作成します。
1行目には、以下のように設定しておきます。これに該当するデータが2行目から入るようになります。
| 生成日時 | 元記事URL | ステータス | ツイート案 | メモ | 



ちなみに、シート名は「sheet1」にしておくと、次のApp Scriptのコードがそのまま使えます。
そのシートのApp Scriptを作成する
スプレッドシートの上部メニューから「拡張機能>App Script」からAppScriptの画面を開きます。
開いたら、以下のコードを入力します。
function doPost(e) {
  try {
    const requestData = JSON.parse(e.postData.contents);
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1'); // ご自身のシート名に合わせてください
    
    // Difyから送られてくるオブジェクトのリストを取得
    const rows_as_objects = requestData.rows_to_append;
    
    // スプレッドシートに書き込むための「リストのリスト」に変換する
    const values_to_write = rows_as_objects.map(obj => {
      // スプレッドシートの列の順番に合わせる
      return [
        obj.datetime,
        obj.url,
        obj.status,
        obj.tweet,
        obj.memo
      ];
    });
    if (values_to_write.length > 0) {
      const numRows = values_to_write.length;
      const numCols = values_to_write[0].length;
      sheet.getRange(sheet.getLastRow() + 1, 1, numRows, numCols).setValues(values_to_write);
    }
    
    return ContentService.createTextOutput(JSON.stringify({ "status": "success" })).setMimeType(ContentService.MimeType.JSON);
    
  } catch (error) {
    return ContentService.createTextOutput(JSON.stringify({ "status": "error", "message": error.toString() })).setMimeType(ContentService.MimeType.JSON);
  }
}ペースとしたら、右上の「デプロイ」を押して、デプロイを行います。
デプロイの際は、Web appを選択し、誰でもアクセスできるようにしておいてください。
デプロイURLを保存する
デプロイが完了すると、URLが発行されるのでコピーしておきます。
こんな感じのURLです。
https://script.google.com/macros/s/◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯/execカスタムツールを作成する
Difyのページに戻り、上部のツール>カスタムから、「カスタムツールを作成」を押して新しいツールを作成します。
名前はなんでも良いです。
schemaの部分に以下を挿入します。
openapi: 3.1.0
info:
  title: Google Sheet Appender via GAS
  description: Appends multiple rows of data to a Google Sheet using Google Apps Script.
  version: v1.0.0
servers:
  - url: *****ここにデプロイURLを入れる(/execは削除)****
paths:
  /exec:
    post:
      summary: Append Rows to Sheet
      operationId: appendRowsToSheet
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                rows_to_append:
                  type: array
                  items:
                    type: object
                    properties:
                      datetime:
                        type: string
                      url:
                        type: string
                      status:
                        type: string
                      tweet:
                        type: string
                      memo:
                        type: string
      responses:
        '200':
          description: Successful response
ツールを保存し、ワークフローのページへ戻ります。
カスタムノードにStep4の出力を渡す
Step3で作った「コードノード(ノード4)」から、上記で作ったカスタムノードへ繋げます。
あとは、Input variablesの「rows_to_append」にコードノードの出力を設定するだけでOKです。


これで、記事URLからツイートを作成して、スプレッドシートに保存するワークフローが完成しました。
まとめ:Difyで記事URLからツイートを量産する
今回はDeFiを使って記事URLからツイート内容を作成してGoogleスプレッドシートに保存するためのワークフローの作成手順をお伝えしました。
一度作れば、かなり楽にツイートを作成できるので、業務の効率化ができます。
あと、Claude Sonnetを使えば個人的にはかなり高い質のツイートを作成できると感じているので、ぜひ皆さんも使ってみてください。

