Skip to content

Instantly share code, notes, and snippets.

@edmarola
Created June 6, 2023 18:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save edmarola/08aa2030e5ebc312a040c70968c87383 to your computer and use it in GitHub Desktop.
Save edmarola/08aa2030e5ebc312a040c70968c87383 to your computer and use it in GitHub Desktop.
Python Figma SVG download
import logging
import os
import requests
from requests.models import HTTPError
def make_figma_request(url: str):
ACCESS_TOKEN = os.environ["ACCESS_TOKEN"]
BASE_URL = "https://api.figma.com/v1"
response = requests.request(
"GET",
BASE_URL + url,
headers={"X-FIGMA-TOKEN": ACCESS_TOKEN},
)
response.raise_for_status()
return response
def write_text(data: str, path: str):
with open(path, "w+") as file:
file.write(data)
if __name__ == "__main__":
PROJECT_ID = os.environ["PROJECT_ID"]
NODE_ID = os.environ["NODE_ID"]
try:
response = make_figma_request(
f"/files/{PROJECT_ID}/nodes?ids={NODE_ID}"
)
node_key = NODE_ID.replace("-", ":")
components = response.json()["nodes"][node_key]["components"]
svg_ids = ",".join(components.keys())
response = make_figma_request(
f"/images/{PROJECT_ID}?ids={svg_ids}&format=svg"
)
svg_items = response.json()["images"]
dir = os.path.join(os.path.abspath(os.path.dirname(__file__)), "svg")
for key, value in svg_items.items():
svg = requests.get(value).text
write_text(svg, f"{dir}/{components[key]['name']}.svg")
except HTTPError as e:
logging.error("An unknown HTTP error has occurred.")
logging.error(e.response.text)
raise e
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment