{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "067f33a0-084d-40e1-9945-6c24e130373f",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        272,
        224
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 20
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "8f9bf5fb-4cb6-4eac-aeb5-17d614f3adef",
      "name": "Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        960,
        448
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5c2af69f-019d-4d3b-938d-d8360d79b6da",
      "name": "Gemini Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1392,
        448
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a96bc82a-e977-4ec5-8cda-a5b3584e522f",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -256,
        64
      ],
      "parameters": {
        "width": 480,
        "height": 624,
        "content": "## \ud83e\udd16 Curate & Translate News (Gemini, Sheets, Slack)\n\n**Overview**\nThis workflow automates news monitoring by fetching RSS feeds, rewriting content using **Google Gemini**, translating it (EN/ZH/KO), and archiving it to **Google Sheets** and **Slack**.\n\n**Who is this for?**\nContent Curators, Localization Teams, and Travel Bloggers.\n\n**How it works**\n1. **Fetch & Filter:** Pulls NHK RSS and filters for keywords (e.g., \"Tokyo\") using `stringContains`.\n2. **AI Processing:** Google Gemini rewrites articles, extracts locations, and translates text.\n3. **Archive & Notify:** Saves structured data to Google Sheets and alerts Slack.\n\n**Output Example (JSON)**\nThe translation agent outputs data in this format:\n```json\n{\n  \"en\": \"Tokyo Tower is...\",\n  \"zh\": \"\u4e1c\u4eac\u5854\u662f...\",\n  \"ko\": \"\ub3c4\ucfc4 \ud0c0\uc6cc\ub294...\"\n}"
      },
      "typeVersion": 1
    },
    {
      "id": "947e125b-abd8-4f3d-b5ae-161bd58d1067",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        272,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 528,
        "height": 112,
        "content": "## 1. Fetch & Filter\nRuns on a schedule to fetch the latest RSS items. Filters articles based on specific keywords (e.g., \"Tokyo\" or \"Season\") before processing."
      },
      "typeVersion": 1
    },
    {
      "id": "607d6a03-d2ef-4365-914d-88472da668aa",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        848,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 912,
        "height": 112,
        "content": "## 2. AI Analysis & Parsing\nUses Google Gemini to rewrite the news, extract specific locations, and translate content. The Code node cleans the JSON output for the database."
      },
      "typeVersion": 1
    },
    {
      "id": "6e2663ca-e66a-411f-9609-a7c56d1082d2",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1792,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 352,
        "height": 112,
        "content": "## 3. Archive & Notify\nAppends the structured data to Google Sheets and sends a formatted notification to Slack (or alerts if an article was skipped)."
      },
      "typeVersion": 1
    },
    {
      "id": "79e42b18-6cd3-4027-99ec-f75d93134efd",
      "name": "Fetch RSS Feed",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        416,
        224
      ],
      "parameters": {
        "url": "https://www.nhk.or.jp/rss/news/cat3.xml",
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "e29aa0c3-120a-41db-ae56-683507df8865",
      "name": "Limit Items",
      "type": "n8n-nodes-base.limit",
      "position": [
        560,
        224
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "8b5532e5-2eeb-4227-a130-6d007ab2541e",
      "name": "Filter Keywords",
      "type": "n8n-nodes-base.if",
      "position": [
        704,
        224
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "44db82f2-d3e6-4dff-abd9-1354de619c92",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $json.title }}",
              "rightValue": "="
            },
            {
              "id": "da07218a-c947-4987-b997-1af4a0a4ea3c",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $json.title }}",
              "rightValue": "tokyo"
            },
            {
              "id": "b90223ef-e96d-477b-b6cf-3cc0f1e4dcfb",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $json.title }}",
              "rightValue": "season"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "d3fc7b38-c89b-43eb-a9b9-b8ddfb6dcfd9",
      "name": "Rewrite Article",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        848,
        208
      ],
      "parameters": {
        "text": "={{ $json.content }}",
        "options": {
          "systemMessage": "=You are an experienced journalist. Understand the content...\n\u4ee5\u4e0b\u306e\u300c\u5143\u306e\u8a18\u4e8b\u300d\u306e\u5185\u5bb9\u3092\u6b63\u78ba\u306b\u7406\u89e3\u3057\u3001\u305d\u306e\u60c5\u5831\u3092\u5143\u306b\u3057\u3066\u3001\u6b21\u306e\u69cb\u6210\u306b\u5f93\u3063\u305f\u65b0\u3057\u3044\u89e3\u8aac\u8a18\u4e8b\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u8a18\u4e8b\u5168\u4f53\u306e\u30c8\u30fc\u30f3\u306f\u3001\u4e2d\u7acb\u7684\u304b\u3064\u5ba2\u89b3\u7684\u3067\u3001\u5c02\u9580\u77e5\u8b58\u304c\u306a\u3044\u4eba\u306b\u3082\u5206\u304b\u308a\u3084\u3059\u3044\u8a00\u8449\u3067\u66f8\u3044\u3066\u304f\u3060\u3055\u3044\u3002\n\n# \u69cb\u6210\n\u30fb\u3010\u30bf\u30a4\u30c8\u30eb\u3011\u8a18\u4e8b\u306e\u5185\u5bb9\u304c\u3059\u3050\u306b\u5206\u304b\u308a\u3001\u8aad\u8005\u306e\u8208\u5473\u3092\u5f15\u304f\u3088\u3046\u306a\u30bf\u30a4\u30c8\u30eb\n\u30fb\u3010\u5c0e\u5165\u3011\u3053\u306e\u30cb\u30e5\u30fc\u30b9\u304c\u300c\u306a\u305c\u4eca\u3001\u91cd\u8981\u306a\u306e\u304b\u300d\u30921\u301c2\u6587\u3067\u7c21\u6f54\u306b\u8aac\u660e\n\u30fb\u3010\u8981\u70b9\u30b5\u30de\u30ea\u30fc\u3011\u5143\u306e\u8a18\u4e8b\u306e\u6700\u3082\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\u30923\u3064\u306e\u7b87\u6761\u66f8\u304d\u3067\u30ea\u30b9\u30c8\u30a2\u30c3\u30d7\n\u30fb\u3010\u80cc\u666f\u3068\u6df1\u6398\u308a\u89e3\u8aac\u3011\u3053\u306e\u51fa\u6765\u4e8b\u304c\u8d77\u304d\u305f\u80cc\u666f\u3084\u3001\u95a2\u9023\u3059\u308b\u91cd\u8981\u306a\u30ad\u30fc\u30ef\u30fc\u30c9\u306b\u3064\u3044\u3066\u3001\u521d\u5fc3\u8005\u306b\u3082\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u306b\u4e01\u5be7\u306b\u89e3\u8aac\n\u30fb\u3010\u4eca\u5f8c\u306e\u5c55\u671b\u3011\u3053\u306e\u30cb\u30e5\u30fc\u30b9\u304c\u3001\u4eca\u5f8c\u3069\u306e\u3088\u3046\u306a\u5f71\u97ff\u3092\u4e0e\u3048\u3046\u308b\u304b\u3001\u8003\u3048\u3089\u308c\u308b\u3044\u304f\u3064\u304b\u306e\u53ef\u80fd\u6027\u3092\u63d0\u793a\n\u30fb\u3010\u307e\u3068\u3081\u3011\u8a18\u4e8b\u5168\u4f53\u306e\u7d50\u8ad6\u3068\u3001\u8aad\u8005\u3078\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\n\n\n"
        },
        "promptType": "define"
      },
      "typeVersion": 3
    },
    {
      "id": "097a85cb-590f-42d7-8e5f-a35815e8ece6",
      "name": "Extract Location",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1120,
        208
      ],
      "parameters": {
        "text": "={{ $('Limit Items').item.json.content }}\n\n\u6700\u3082\u91cd\u8981\u3060\u3068\u601d\u308f\u308c\u308b\u5730\u540d\u307e\u305f\u306f\u65bd\u8a2d\u540d\u3092\u4e00\u3064\u3060\u3051\u62bd\u51fa\u3057\u3001\u305d\u306e\u540d\u79f0\u306e\u307f\u3092\u51fa\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4f59\u8a08\u306a\u8aac\u660e\u306f\u4e00\u5207\u4e0d\u8981\u3067\u3059\u3002",
        "options": {
          "systemMessage": "From the text provided, extract only the single most important location name...\n\n\u4f8b\uff1a\u6e05\u6c34\u5bfa\u3001\u6771\u4eac\u30b9\u30ab\u30a4\u30c4\u30ea\u30fc\u3001\u9053\u9813\u5800"
        },
        "promptType": "define"
      },
      "typeVersion": 3
    },
    {
      "id": "4b7e11eb-4c2b-4d5f-842c-884209635f3d",
      "name": "Translate Content",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1392,
        208
      ],
      "parameters": {
        "text": "=={{ $('Rewrite Article').item.json.output }}",
        "options": {
          "systemMessage": "You are a professional translator. Translate the input Japanese article into English, Chinese, and Korean...\n\n1. \u82f1\u8a9e (English)\n2. \u4e2d\u56fd\u8a9e \u7c21\u4f53\u5b57 (Chinese Simplified)\n3. \u97d3\u56fd\u8a9e (Korean)\n\n\u91cd\u8981\uff1a\n\u5fc5\u305a\u4ee5\u4e0b\u306eJSON\u5f62\u5f0f\u306e\u30c7\u30fc\u30bf\u306e\u307f\u3092\u51fa\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4f59\u8a08\u306a\u6328\u62f6\u3084Markdown\u8a18\u53f7\uff08```json\u306a\u3069\uff09\u306f\u4e00\u5207\u66f8\u304b\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\n\n{\n  \"en\": \"\u3053\u3053\u306b\u82f1\u8a9e\u306e\u7ffb\u8a33\",\n  \"zh\": \"\u3053\u3053\u306b\u4e2d\u56fd\u8a9e\u306e\u7ffb\u8a33\",\n  \"ko\": \"\u3053\u3053\u306b\u97d3\u56fd\u8a9e\u306e\u7ffb\u8a33\"\n}"
        },
        "promptType": "define"
      },
      "typeVersion": 3
    },
    {
      "id": "36bf6334-2cff-4c58-bb5f-6f84a5b90a3c",
      "name": "Format Data",
      "type": "n8n-nodes-base.code",
      "position": [
        1664,
        208
      ],
      "parameters": {
        "jsCode": "// -------------------------------------------------------\n// \u3010\u8a2d\u5b9a\u30fb\u6e96\u5099\u3011\n// -------------------------------------------------------\n// \u524d\u6bb5\u306e\u30ce\u30fc\u30c9\u304b\u3089\u30c7\u30fc\u30bf\u3092\u4e00\u62ec\u53d6\u5f97\u3057\u307e\u3059\u3002\n// \u2605\u91cd\u8981\uff1a\u5143\u30c7\u30fc\u30bf\u3068\u3057\u3066\u300cLimit Items\u300d\u3067\u306f\u306a\u304f\u300cFilter Keywords\u300d\u3092\u4f7f\u3044\u307e\u3059\u3002\n// \u3053\u308c\u306b\u3088\u308a\u3001\u9664\u5916\u3055\u308c\u305f\u8a18\u4e8b\u306b\u3088\u308b\u9806\u5e8f\u30ba\u30ec\uff08Index Misalignment\uff09\u3092\u5b8c\u5168\u306b\u9632\u3052\u307e\u3059\u3002\nconst filteredItems = $('Filter Keywords').all();   // \u30d5\u30a3\u30eb\u30bf\u901a\u904e\u6e08\u307f\u306e\u5143\u8a18\u4e8b\u30c7\u30fc\u30bf\nconst aiAgentItems  = $('Rewrite Article').all();   // AI: \u8a18\u4e8b\u66f8\u304d\u63db\u3048\u306e\u7d50\u679c\nconst locationItems = $('Extract Location').all();  // AI: \u5834\u6240\u62bd\u51fa\u306e\u7d50\u679c\n\n// -------------------------------------------------------\n// \u3010\u30e1\u30a4\u30f3\u51e6\u7406\u3011\n// \u73fe\u5728\u306e\u5165\u529b\uff08Translate Content\uff09\u3092\u30eb\u30fc\u30d7\u51e6\u7406\u3057\u307e\u3059\n// -------------------------------------------------------\nreturn $input.all().map((item, index) => {\n  try {\n    // 1. \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u4f7f\u3063\u305f\u5b89\u5168\u306a\u30c7\u30fc\u30bf\u306e\u7d10\u4ed8\u3051\n    // ---------------------------------------------------\n    // \u3059\u3079\u3066\u306e\u51e6\u7406\u306f\u300cFilter Keywords\u300d\u3092\u901a\u904e\u3057\u305f\u30ea\u30b9\u30c8\u306b\u5bfe\u3057\u3066\u9806\u306b\u884c\u308f\u308c\u3066\u3044\u308b\u305f\u3081\u3001\n    // index\u756a\u53f7\u306f\u5b8c\u5168\u306b\u4e00\u81f4\u3057\u307e\u3059\u3002\n    const originalData = filteredItems[index].json;\n    \n    // AI\u62bd\u51fa\u30c7\u30fc\u30bf\u304c\u306a\u3044\u5834\u5408\u306e\u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\uff08\u5ff5\u306e\u305f\u3081\uff09\n    const locationName = locationItems[index]?.json?.output || \"N/A\";\n    const rewriteTextRaw = aiAgentItems[index]?.json?.output || \"\";\n\n\n    // 2. \u7ffb\u8a33\u30c7\u30fc\u30bf\uff08JSON\uff09\u306e\u30d1\u30fc\u30b9\u51e6\u7406\n    // ---------------------------------------------------\n    // Translate Content\u30ce\u30fc\u30c9\u304b\u3089\u306e\u51fa\u529b\uff08\u7ffb\u8a33JSON\uff09\u3092\u53d6\u5f97\n    const translationRaw = item.json.output || \"{}\";\n    \n    // \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306e\u8a2d\u5b9a\n    let translations = { en: \"Translation Error\", zh: \"Translation Error\", ko: \"Translation Error\" };\n    \n    try {\n      // \u751f\u6210AI\u304c Markdown\u8a18\u53f7\uff08```json ... ```\uff09\u3092\u4ed8\u3051\u3066\u304f\u308b\u3053\u3068\u304c\u3042\u308b\u305f\u3081\u524a\u9664\u3057\u307e\u3059\n      const cleanJsonStr = translationRaw.replace(/```json|```/g, '').trim();\n      translations = JSON.parse(cleanJsonStr);\n    } catch (e) {\n      console.log(\"Translation JSON Parse Error: \", e);\n      // \u30a8\u30e9\u30fc\u6642\u306f\u305d\u306e\u307e\u307e\u30c6\u30ad\u30b9\u30c8\u3092\u5165\u308c\u308b\u306a\u3069\u3001\u67d4\u8edf\u306b\u5bfe\u5fdc\u53ef\u80fd\u3067\u3059\n    }\n\n\n    // 3. \u8a18\u4e8b\u672c\u6587\u306e\u6574\u5f62\uff08Markdown\u8a18\u53f7\u306e\u524a\u9664\uff09\n    // ---------------------------------------------------\n    // Google Sheets\u3084Slack\u3067\u898b\u3084\u3059\u304f\u3059\u308b\u305f\u3081\u3001Markdown\u306e\u898b\u51fa\u3057(#)\u3084\u5f37\u8abf(*)\u3092\u524a\u9664\n    const cleanBody = rewriteTextRaw\n      .replace(/[#*]/g, '')     // # \u3068 * \u3092\u524a\u9664\n      .replace(/\\n{3,}/g, '\\n\\n') // 3\u3064\u4ee5\u4e0a\u306e\u9023\u7d9a\u6539\u884c\u30922\u3064\u306b\u8a70\u3081\u308b\n      .trim();\n\n\n    // 4. \u8981\u7d04\uff08\u30b5\u30de\u30ea\u30fc\uff09\u306e\u62bd\u51fa\n    // ---------------------------------------------------\n    // \u300cRewrite Article\u300d\u304c\u751f\u6210\u3057\u305f\u3010\u8981\u70b9\u30b5\u30de\u30ea\u30fc\u3011\u306e\u90e8\u5206\u3060\u3051\u3092\u629c\u304d\u51fa\u3057\u307e\u3059\n    let summary = \"\";\n    const summaryMatch = rewriteTextRaw.match(/(?:\u3010\u8981\u70b9\u30b5\u30de\u30ea\u30fc\u3011|\u3010Key Points Summary\u3011|\u3010Summary\u3011)([\\s\\S]*?)(?=\u3010|$)/);\n    \n    if (summaryMatch && summaryMatch[1]) {\n      // \u7b87\u6761\u66f8\u304d\u8a18\u53f7\u3084\u4f59\u8a08\u306a\u6539\u884c\u3092\u6574\u7406\u3057\u3066\u30011\u884c\u306e\u6587\u7ae0\u306b\u3057\u307e\u3059\n      summary = summaryMatch[1]\n        .replace(/[\u30fb-]/g, '')\n        .replace(/\\n/g, ' ')\n        .trim();\n    } else {\n      // \u4e07\u304c\u4e00\u62bd\u51fa\u3067\u304d\u306a\u3044\u5834\u5408\u306f\u3001\u8a18\u4e8b\u306e\u5192\u982d120\u6587\u5b57\u3092\u4f7f\u7528\n      summary = cleanBody.substring(0, 120) + \"...\";\n    }\n\n\n    // 5. \u30c7\u30fc\u30bf\u306e\u7d50\u5408\u3068\u51fa\u529b\n    // ---------------------------------------------------\n    // \u6271\u3044\u3084\u3059\u30441\u3064\u306eJSON\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u307e\u3068\u3081\u307e\u3059\n    return {\n      json: {\n        title:          originalData.title,    // \u5143\u8a18\u4e8b\u306e\u30bf\u30a4\u30c8\u30eb (RSS\u7531\u6765)\n        url:            originalData.link,     // \u5143\u8a18\u4e8b\u306eURL (RSS\u7531\u6765)\n        location:       locationName,          // \u62bd\u51fa\u3057\u305f\u5834\u6240\n        short_summary:  summary,               // \u751f\u6210\u3057\u305f\u77ed\u3044\u8981\u7d04\n        original_clean: cleanBody,             // \u8aad\u307f\u3084\u3059\u304f\u6574\u5f62\u3057\u305f\u65e5\u672c\u8a9e\u8a18\u4e8b\u5168\u6587\n        \n        // \u7ffb\u8a33\u30c7\u30fc\u30bf\u3092\u5c55\u958b\n        en: translations.en,\n        zh: translations.zh,\n        ko: translations.ko\n      },\n      // \u30ce\u30fc\u30c9\u5b9f\u884c\u306e\u30da\u30a2\u30ea\u30f3\u30b0\u60c5\u5831\u3092\u7dad\u6301\n      pairedItem: item.pairedItem\n    };\n\n  } catch (error) {\n    // \u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0: \u4f55\u304b\u5931\u6557\u3057\u3066\u3082\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u6b62\u3081\u305a\u30a8\u30e9\u30fc\u3092\u51fa\u529b\n    return {\n      json: {\n        error: \"Data Formatting Failed\",\n        message: error.message,\n        original_title: filteredItems[index]?.json?.title || \"Unknown\"\n      }\n    };\n  }\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "7c29f7c5-cced-4c96-99e8-f41d85bc5747",
      "name": "Save to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1808,
        208
      ],
      "parameters": {
        "columns": {
          "value": {
            "en": "={{ $('Format Data').item.json.en }}",
            "ko": "={{ $('Format Data').item.json.ko }}",
            "zh": "={{ $('Format Data').item.json.zh }}",
            "url": "={{ $json.url }}",
            "title": "={{ $json.title }}",
            "summary": "={{ $json.short_summary }}",
            "location": "={{ $('Extract Location').item.json.output }}"
          },
          "schema": [
            {
              "id": "title",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "summary",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "location",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "location",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "en",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "en",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "zh",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "zh",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ko",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "ko",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "url",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "url"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.YOUR_AWS_SECRET_KEY_HERE_DXvPVxXHbrbD834kNpg8-s/edit#gid=0",
          "cachedResultName": "\u30b7\u30fc\u30c81"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Kud0dU9SAOjmwfFiU4MH_DXvPVxXHbrbD834kNpg8-s",
          "cachedResultUrl": "https://docs.google.YOUR_AWS_SECRET_KEY_HERE_DXvPVxXHbrbD834kNpg8-s/edit?usp=drivesdk",
          "cachedResultName": "\u30cb\u30e5\u30fc\u30b9\u81ea\u52d5\u7ffb\u8a33\u30ed\u30b0"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "c39053d2-33c8-4712-8a9a-bca8d7e45c54",
      "name": "Notify Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        1984,
        208
      ],
      "parameters": {
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C09RFVAC7FD",
          "cachedResultName": "all-yuki"
        },
        "attachments": [
          {
            "text": "={{ $('Translate Content').item.json.output }}",
            "title": "={{ $('Extract Location').item.json.output }}",
            "footer": "=Original Article: {{ $('Limit Items').item.json.link }}",
            "title_link": "={{ $('Limit Items').item.json.link }}"
          },
          {
            "text": "=*English:* {{ $('Format Data').item.json.en }}  *Chinese:* {{ $('Format Data').item.json.zh }}  *Korean:* {{ $('Format Data').item.json.ko }}"
          }
        ],
        "messageType": "attachment",
        "otherOptions": {
          "includeLinkToWorkflow": false
        },
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "7a81257e-d854-41a6-ac57-e4b20a5d599a",
      "name": "Notify Skipped",
      "type": "n8n-nodes-base.slack",
      "position": [
        704,
        448
      ],
      "parameters": {
        "text": "==[Skipped Notification]\nThe article \"{{ $json.title }}\" did not match the keywords (Tokyo or Season), so summarization was skipped.",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C09RFVAC7FD",
          "cachedResultName": "all-yuki"
        },
        "otherOptions": {
          "includeLinkToWorkflow": false
        },
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    }
  ],
  "connections": {
    "Format Data": {
      "main": [
        [
          {
            "node": "Save to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit Items": {
      "main": [
        [
          {
            "node": "Filter Keywords",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch RSS Feed": {
      "main": [
        [
          {
            "node": "Limit Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Keywords": {
      "main": [
        [
          {
            "node": "Rewrite Article",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Notify Skipped",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rewrite Article": {
      "main": [
        [
          {
            "node": "Extract Location",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Location": {
      "main": [
        [
          {
            "node": "Translate Content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Fetch RSS Feed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Rewrite Article",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Extract Location",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Translate Content": {
      "main": [
        [
          {
            "node": "Format Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gemini Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Translate Content",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Save to Google Sheets": {
      "main": [
        [
          {
            "node": "Notify Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}