1
0

Figmaのファイルを一括でバックアップする

Posted at
  • 前提

    • 保険の意味で、Figmaのチーム内のデータをローカルにバックアップしたいと思いました
      • ファイル数が300以上あるため、バックアップするたびに、1ファイルずつ取得するのは手間がかかる
    • 私は、非プログラマーです
      • 下記のコードは、生成AIにて取得したものです
    • 環境情報は現在の私の現在のものです
      • 同様の環境であれば実行できると思います
  • 環境(参考)

    • 端末
      • macOS
        • 13.6.8
    • ライブラリ
      • Python
        • 3.12.6
      • requests
        • 2.32.3
  • 準備

  • レシピ

    • Finder
      • 任意の場所にフォルダを作成
    • テキストエディタ
      • 下記のコードを、テキストエディターにペースト
      • ACCESS_TOKENとTEAM_ID部分を書き換える
      • 「figma_backup.py」などのファイル名で保存
    • ターミナル
      • ターミナルを開き上記のフォルダに移動(cd)
      • python3 figma_backup.pyとタイプして実行
    • Finder
      • (ローカルに「.fig」ファイルがダウンロードされる。)
figma_backup.py
import requests
import os

# Figma APIの認証トークンを設定します。
ACCESS_TOKEN = 'your_access_token_here'

# チームのIDを設定します。
TEAM_ID = 'your_team_id_here'

# ダウンロードするファイルを保存するディレクトリを設定します。
DOWNLOAD_DIR = 'downloads/'

# チームのプロジェクトのリストを取得する関数
def get_team_projects(team_id):
    headers = {
        'X-Figma-Token': ACCESS_TOKEN
    }
    url = f'https://api.figma.com/v1/teams/{team_id}/projects'
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.json().get('projects')
    else:
        print('Error:', response.status_code, response.text)
        return []

# プロジェクトに含まれるファイルのリストを取得する関数
def get_project_files(project_id):
    headers = {
        'X-Figma-Token': ACCESS_TOKEN
    }
    url = f'https://api.figma.com/v1/projects/{project_id}/files'
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.json().get('files')
    else:
        print('Error:', response.status_code, response.text)
        return []

# ファイルを.fig形式でダウンロードする関数
def download_file(file_key, file_name, project_name):
    headers = {
        'X-Figma-Token': ACCESS_TOKEN
    }
    url = f'https://api.figma.com/v1/files/{file_key}?format=fig'
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        project_dir = os.path.join(DOWNLOAD_DIR, project_name.replace('/', '_'))
        # プロジェクトディレクトリが存在しない場合は作成します。
        if not os.path.exists(project_dir):
            os.makedirs(project_dir)
        file_name = file_name.replace('/', '_') # スラッシュをアンダースコアに置き換える
        file_path = os.path.join(project_dir, file_name + '.fig')
        with open(file_path, 'wb') as file:
            file.write(response.content)
        print(f'File downloaded: {file_path}')
    else:
        print('Error:', response.status_code, response.text)

# メイン関数
def main():
    projects = get_team_projects(TEAM_ID)
    for project in projects:
        project_id = project['id']
        project_name = project['name']
        files = get_project_files(project_id)
        for file in files:
            file_key = file['key']
            file_name = file['name']
            download_file(file_key, file_name, project_name)

if __name__ == '__main__':
    main()
1
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
1
0