Squarespace コードインジェクションを GitHub にバックアップ

上級

これはEngineering, Marketing分野の自動化ワークフローで、17個のノードを含みます。主にIf, Set, Code, Merge, Githubなどのノードを使用。 Squarespace コードインジェクションを GitHub へバックアップ

前提条件
  • GitHub Personal Access Token
  • ターゲットAPIの認証情報が必要な場合あり
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
  "id": "eB4rTdZFvrdKK5VP",
  "meta": {
    "instanceId": "e634e668fe1fc93a75c4f2a7fc0dad807ca318b79654157eadb9578496acbc76",
    "templateCredsSetupCompleted": true
  },
  "name": "Backup Squarespace code Injections to Github",
  "tags": [
    {
      "id": "oIxDbURnjwrJFwau",
      "name": "Squarespace",
      "createdAt": "2025-03-06T05:49:51.612Z",
      "updatedAt": "2025-03-06T05:49:51.612Z"
    }
  ],
  "nodes": [
    {
      "id": "e0811eee-5bfe-4e48-8bd2-76b415261e93",
      "name": "'execute'クリック時",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        820,
        486.1164603611751
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "e48028e0-d88a-4681-84b8-fa17fe695344",
      "name": "アイテムをループ処理",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        2380,
        580
      ],
      "parameters": {
        "options": {},
        "batchSize": 2
      },
      "typeVersion": 3,
      "alwaysOutputData": true
    },
    {
      "id": "0dd2a2b1-8c19-4d7a-a631-d934320bcf74",
      "name": "スケジュールトリガー",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        820,
        686.1164603611751
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 2
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a1bc1313-5993-4d10-b322-0b31dd005d00",
      "name": "付箋1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        380,
        240
      ],
      "parameters": {
        "color": 4,
        "width": 371.1995072042308,
        "height": 600.88409546716,
        "content": "## Backup to GitHub \nThis workflow will backup Squarespace header & footer Injections to Github\n\n\n### Setup\n👉 Edit the Squarespace node to place the website URL there\n\n👉 Open `Globals` node and update the values below 👇\n\n- **repo.owner:** your Github username\n- **repo.name:** the name of your repository\n- **repo.path:** the folder to use within the repository.\n\n\nIf your username was `john-doe` and your repository was called `n8n-backups` and you wanted the injections to go into a `squarespace-backup` folder you would set:\n\n- repo.owner - john-doe\n- repo.name - n8n-backups\n- repo.path - squarespace-backup/\n\nEach site's injections will be added into seperate folder\n"
      },
      "typeVersion": 1
    },
    {
      "id": "125b425c-1f59-4984-8658-e57d3145cccd",
      "name": "付箋2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        780,
        400
      ],
      "parameters": {
        "color": 7,
        "width": 1066,
        "height": 435,
        "content": "## Main workflow loop"
      },
      "typeVersion": 1
    },
    {
      "id": "626d534f-f2fb-4493-af58-0f5e309c58d4",
      "name": "Squarespaceデータを取得",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1140,
        600
      ],
      "parameters": {
        "url": "https://beyondspace.studio",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "format",
              "value": "page-context"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "e2b1481e-b9de-4006-92b6-4677b4e11213",
      "name": "付箋4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1080,
        460
      ],
      "parameters": {
        "color": 4,
        "width": 170,
        "height": 120,
        "content": "## Edit this node 👇\nSquarespace URL"
      },
      "typeVersion": 1
    },
    {
      "id": "e8fb73af-9999-43cd-9857-564a049b2579",
      "name": "条件分岐",
      "type": "n8n-nodes-base.if",
      "position": [
        3060,
        600
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0f6f0b04-6d87-47fb-bee7-df2c93283d1c",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.error }}",
              "rightValue": "The resource you are requesting could not be found"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "679cd20a-c124-4f89-aea3-14dc5a739826",
      "name": "フッターをクリーンアップ",
      "type": "n8n-nodes-base.code",
      "position": [
        1620,
        460
      ],
      "parameters": {
        "jsCode": "const cheerio = require('cheerio');\n\ntry {\n    const $footers = cheerio.load($input.first().json.value);\n    let sqsFooters = '';\n\n    /** CLEAN FOOTERS */\n    // Remove all elements after and including .social-icons-svg\n    const socialIcons = $footers('[data-usage=social-icons-svg]');\n    if (socialIcons.length) {\n        socialIcons.nextAll().remove(); // Remove everything after it\n        socialIcons.remove(); // Remove the element itself\n    }\n\n    // Extract cleaned-up footer content\n    $footers('head').each((i, el) => {\n        sqsFooters += $footers(el).html();\n    });\n\n    // Remove excessive newlines caused by removed elements\n    sqsFooters = sqsFooters.replace(/\\n{2,}/g, '\\n').trim();\n\n    return [{\n        ...$input.first().json,\n        value: sqsFooters,\n    }];\n} catch (error) {\n    console.error('Error processing Squarespace footers:', error);\n\n    // Return the original full input in case of failure\n    return [{\n        ...$input.first().json,\n        value: $input.first().json.value,\n    }];\n}\n"
      },
      "typeVersion": 2
    },
    {
      "id": "92150603-acbd-41bf-8cf2-b6891e08e326",
      "name": "ヘッダーをクリーンアップ",
      "type": "n8n-nodes-base.code",
      "position": [
        1620,
        680
      ],
      "parameters": {
        "jsCode": "const cheerio = require('cheerio');\n\ntry {\n    const $headers = cheerio.load($input.first().json.value);\n    let sqsHeaders = '';\n\n    // Find the Squarespace CSS link that marks the start of relevant headers\n    const $headerStart = $headers('link[href*=\"static1.squarespace.com/static/versioned-site-css\"][href*=\"site.css\"]');\n\n    // Remove all elements before and including the header start\n    if ($headerStart.length) {\n        $headers($headerStart).prevAll().remove();\n        $headers($headerStart).remove();\n    }\n\n    // Remove Squarespace's cookie banner script (marks the end) and any following elements\n    const cookieBannerScript = $headers('script').filter((_, el) => \n        $headers(el).html().includes('Static.COOKIE_BANNER_CAPABLE = true;')\n    );\n    if (cookieBannerScript.length) {\n        cookieBannerScript.nextAll().remove(); // Remove everything after it\n        cookieBannerScript.remove(); // Remove the script itself\n    }\n\n    // Extract cleaned-up headers\n    $headers('head').each((i, el) => {\n        sqsHeaders += $headers(el).html();\n    });\n\n    // Remove any unwanted comments or placeholders\n    sqsHeaders = sqsHeaders.replace('<!-- End of Squarespace Headers -->', '');\n\n    // Remove excessive newlines caused by removed elements\n    sqsHeaders = sqsHeaders.replace(/\\n{2,}/g, '\\n').trim();\n\n    return [{\n        ...$input.first().json,\n        value: sqsHeaders,\n    }];\n} catch (error) {\n    console.log('Error processing Squarespace headers:', error);\n    \n    // Return the original full input in case of failure\n    return [{\n        ...$input.first().json,\n        value: $input.first().json.value,\n    }];\n}\n"
      },
      "typeVersion": 2
    },
    {
      "id": "a777d9ca-2841-47dc-a4d5-5ae36713d4a2",
      "name": "フッターインジェクションを取得",
      "type": "n8n-nodes-base.set",
      "position": [
        1380,
        460
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "49e2fd3c-d46e-42a0-84d5-578166c1fbae",
              "name": "value",
              "type": "string",
              "value": "={{ $json[\"squarespace-footers\"] }}"
            },
            {
              "id": "b2de857c-2120-4e7e-81d8-bb73dd059261",
              "name": "id",
              "type": "string",
              "value": "footers"
            },
            {
              "id": "14de0bc4-6a40-488d-a17e-0ff940a8d38b",
              "name": "name",
              "type": "string",
              "value": "footers"
            },
            {
              "id": "065cb5cd-b9fd-4aab-90be-5191e96d9b91",
              "name": "timestamp",
              "type": "string",
              "value": "={{ new Date().getTime() }}"
            },
            {
              "id": "41016a39-abf7-46ce-88b9-985553210983",
              "name": "domain",
              "type": "string",
              "value": "={{ ($json.website.primaryDomain || $json.website.authenticUrl || $json.website.internalUrl).replace(/^(?:https?:\\/\\/)?(?:www\\.)?/, '') }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "c8cdf09b-0218-4dbc-9564-e84d123ad5d7",
      "name": "ヘッダーインジェクションを取得",
      "type": "n8n-nodes-base.set",
      "position": [
        1380,
        680
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "49e2fd3c-d46e-42a0-84d5-578166c1fbae",
              "name": "value",
              "type": "string",
              "value": "={{ $json[\"squarespace-headers\"] }}"
            },
            {
              "id": "3d64cbd1-d571-4b59-b9cc-d6d0cb9f1dda",
              "name": "id",
              "type": "string",
              "value": "headers"
            },
            {
              "id": "42d56c77-3f2b-4ea6-b3c9-754e293c0615",
              "name": "name",
              "type": "string",
              "value": "headers"
            },
            {
              "id": "b3d13c06-6a4a-4478-ad14-8e0b7a2998e0",
              "name": "timestamp",
              "type": "string",
              "value": "={{ new Date().getTime() }}"
            },
            {
              "id": "b0977682-f135-4546-a390-0a3777907e4f",
              "name": "domain",
              "type": "string",
              "value": "={{ ($json.website.primaryDomain || $json.website.authenticUrl || $json.website.internalUrl).replace(/^(?:https?:\\/\\/)?(?:www\\.)?/, '') }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "7ca88a4d-f438-4d3a-b3ce-e66f1dd3ae00",
      "name": "インジェクションデータを編集",
      "type": "n8n-nodes-base.github",
      "position": [
        2840,
        600
      ],
      "parameters": {
        "owner": {
          "__rl": true,
          "mode": "name",
          "value": "={{ $json.repo.owner }}"
        },
        "filePath": "={{ $json.repo.path }}{{ $('Loop Over Items').item.json.id }}.html",
        "resource": "file",
        "operation": "edit",
        "repository": {
          "__rl": true,
          "mode": "name",
          "value": "={{ $json.repo.name }}"
        },
        "fileContent": "={{ $('Loop Over Items').item.json.value }}",
        "commitMessage": "=Backup at {{ new DateTime($('Loop Over Items').item.json.timestamp) }}"
      },
      "credentials": {
        "githubApi": {
          "id": "3FYHiPFtycAFT8V0",
          "name": "GitHub account"
        }
      },
      "typeVersion": 1,
      "continueOnFail": true,
      "alwaysOutputData": true
    },
    {
      "id": "34ae1cf2-0abb-4fec-b60c-35c44f92020d",
      "name": "インジェクションデータを作成",
      "type": "n8n-nodes-base.github",
      "position": [
        3280,
        620
      ],
      "parameters": {
        "owner": {
          "__rl": true,
          "mode": "name",
          "value": "={{ $('Globals').item.json.repo.owner }}"
        },
        "filePath": "={{ $('Globals').item.json.repo.path }}{{ $('Loop Over Items').item.json.id }}.html",
        "resource": "file",
        "repository": {
          "__rl": true,
          "mode": "name",
          "value": "={{ $('Globals').item.json.repo.name }}"
        },
        "fileContent": "={{ $('Loop Over Items').item.json.value }}",
        "commitMessage": "=Backup at {{ new DateTime($('Loop Over Items').item.json.timestamp) }}"
      },
      "credentials": {
        "githubApi": {
          "id": "3FYHiPFtycAFT8V0",
          "name": "GitHub account"
        }
      },
      "typeVersion": 1,
      "continueOnFail": true,
      "alwaysOutputData": true
    },
    {
      "id": "40ae14ee-ce39-4706-898c-51957f52328d",
      "name": "グローバル変数",
      "type": "n8n-nodes-base.set",
      "position": [
        2640,
        600
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "6cf546c5-5737-4dbd-851b-17d68e0a3780",
              "name": "repo.owner",
              "type": "string",
              "value": "BeyondspaceStudio"
            },
            {
              "id": "452efa28-2dc6-4ea3-a7a2-c35d100d0382",
              "name": "repo.name",
              "type": "string",
              "value": "n8n-backup"
            },
            {
              "id": "81c4dc54-86bf-4432-a23f-22c7ea831e74",
              "name": "repo.path",
              "type": "string",
              "value": "=squarespace-backup/{{ $json.domain }}/"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d20a5274-66e8-4053-b29d-e814e67a3f0e",
      "name": "付箋",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2600,
        480
      ],
      "parameters": {
        "color": 4,
        "width": 150,
        "height": 80,
        "content": "## Edit this node 👇"
      },
      "typeVersion": 1
    },
    {
      "id": "db43654b-22bc-4c0e-9b6a-6f1dded7deb8",
      "name": "インジェクションを統合",
      "type": "n8n-nodes-base.merge",
      "position": [
        2140,
        580
      ],
      "parameters": {},
      "typeVersion": 3
    }
  ],
  "active": true,
  "pinData": {},
  "settings": {},
  "versionId": "dfe7ec9f-5b7a-4a9c-8b53-b0cc4bcc2d27",
  "connections": {
    "e8fb73af-9999-43cd-9857-564a049b2579": {
      "main": [
        [
          {
            "node": "34ae1cf2-0abb-4fec-b60c-35c44f92020d",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "e48028e0-d88a-4681-84b8-fa17fe695344",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "40ae14ee-ce39-4706-898c-51957f52328d": {
      "main": [
        [
          {
            "node": "7ca88a4d-f438-4d3a-b3ce-e66f1dd3ae00",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e48028e0-d88a-4681-84b8-fa17fe695344": {
      "main": [
        [],
        [
          {
            "node": "40ae14ee-ce39-4706-898c-51957f52328d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "679cd20a-c124-4f89-aea3-14dc5a739826": {
      "main": [
        [
          {
            "node": "db43654b-22bc-4c0e-9b6a-6f1dded7deb8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "92150603-acbd-41bf-8cf2-b6891e08e326": {
      "main": [
        [
          {
            "node": "db43654b-22bc-4c0e-9b6a-6f1dded7deb8",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "db43654b-22bc-4c0e-9b6a-6f1dded7deb8": {
      "main": [
        [
          {
            "node": "e48028e0-d88a-4681-84b8-fa17fe695344",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0dd2a2b1-8c19-4d7a-a631-d934320bcf74": {
      "main": [
        [
          {
            "node": "626d534f-f2fb-4493-af58-0f5e309c58d4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7ca88a4d-f438-4d3a-b3ce-e66f1dd3ae00": {
      "main": [
        [
          {
            "node": "e8fb73af-9999-43cd-9857-564a049b2579",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a777d9ca-2841-47dc-a4d5-5ae36713d4a2": {
      "main": [
        [
          {
            "node": "679cd20a-c124-4f89-aea3-14dc5a739826",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c8cdf09b-0218-4dbc-9564-e84d123ad5d7": {
      "main": [
        [
          {
            "node": "92150603-acbd-41bf-8cf2-b6891e08e326",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "626d534f-f2fb-4493-af58-0f5e309c58d4": {
      "main": [
        [
          {
            "node": "c8cdf09b-0218-4dbc-9564-e84d123ad5d7",
            "type": "main",
            "index": 0
          },
          {
            "node": "a777d9ca-2841-47dc-a4d5-5ae36713d4a2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "34ae1cf2-0abb-4fec-b60c-35c44f92020d": {
      "main": [
        [
          {
            "node": "e48028e0-d88a-4681-84b8-fa17fe695344",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e0811eee-5bfe-4e48-8bd2-76b415261e93": {
      "main": [
        [
          {
            "node": "626d534f-f2fb-4493-af58-0f5e309c58d4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
よくある質問

このワークフローの使い方は?

上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。

このワークフローはどんな場面に適していますか?

上級 - エンジニアリング, マーケティング

有料ですか?

このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。

ワークフロー情報
難易度
上級
ノード数17
カテゴリー2
ノードタイプ10
難易度説明

上級者向け、16ノード以上の複雑なワークフロー

作成者
bangank36

bangank36

@bangank36

Automation specialist with 10+ years of experience helping SME website owners streamline their workflows—specializing in Squarespace, Shopify, and WordPress. Book an initial consultation for custom n8n automation using my link.

外部リンク
n8n.ioで表示

このワークフローを共有

カテゴリー

カテゴリー: 34