-
Notifications
You must be signed in to change notification settings - Fork 1
/
zeplin-download-screens.py
113 lines (91 loc) · 3.56 KB
/
zeplin-download-screens.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import json
import sys
import requests
import logging
import time
import os.path
from common import download, get_image_folder_name
from config import ZEPLIN_API_TOKEN
logging.basicConfig(
format='Date-Time : %(asctime)s : Line No. : %(lineno)d : Function Name : %(funcName)s - %(message)s',
level=logging.ERROR)
ZEPLIN_API_URL_BASE = 'https://api.zeplin.dev/v1/'
CHECKPOINT_FILE_NAME = 'zeplin-checkpoint.txt'
ZEPLIN_HEADERS = {
'Content-Type': 'application/json',
'Authorization': 'Bearer {0}'.format(ZEPLIN_API_TOKEN)
}
def get_checkpoint():
if os.path.isfile(CHECKPOINT_FILE_NAME):
with open(CHECKPOINT_FILE_NAME, 'r') as file:
checkpoint = file.read()
return int(checkpoint)
else:
return 0
def set_checkpoint():
with open(CHECKPOINT_FILE_NAME, 'w+') as file:
file.write(str(round(time.time())))
# Получаем список проектов
def get_projects():
api_url = '{0}projects?limit=100'.format(ZEPLIN_API_URL_BASE)
response = requests.get(api_url, headers=ZEPLIN_HEADERS)
if response.status_code == 200:
return json.loads(response.content.decode('utf-8'))
else:
logging.error(
f'The function was unable to get data: {response.content.decode("utf-8")}'
)
sys.exit(1)
def get_screens_from_zeplin(project):
screens_for_save = []
i = 1
while i <= project['number_of_screens']:
api_url = '{0}projects/{1}/screens?sort=created&limit=100&offset={2}' \
.format(ZEPLIN_API_URL_BASE, project['id'], i)
print(f'{project["name"]}: request screens from {i} to {i + 99}')
response = requests.get(api_url, headers=ZEPLIN_HEADERS)
if response.status_code == 200:
screens = json.loads(response.content.decode('utf-8'))
for screen in screens:
# print('id: {0}, name: {1}, updated: {2}'.format(screen['id'], screen['name'], screen['updated']))
screens_for_save.append([{
'id': screen['id'],
'name': screen['name'],
'updated': screen['updated'],
'image': screen['image']['original_url']
}])
i += 100
else:
logging.error(f'The function was unable to get data: {response.content.decode("utf-8")}')
sys.exit(1)
return screens_for_save
# Что бы красиво выплюнуть json в консоль
def pp_json(json_thing, sort=True, indents=4):
if type(json_thing) is str:
print(
json.dumps(json.loads(json_thing),
sort_keys=sort,
indent=indents,
ensure_ascii=False))
else:
print(
json.dumps(json_thing,
sort_keys=sort,
indent=indents,
ensure_ascii=False))
return None
if __name__ == '__main__':
checkpoint = get_checkpoint()
folder_name = get_image_folder_name()
for project in get_projects():
if project['status'] != 'active':
continue
screens_new = get_screens_from_zeplin(project)
for item in screens_new:
screen = item[0]
if screen['updated'] > checkpoint:
url = screen['image']
project_name = project['name'].replace('/', '_').replace('|', '_')
screen_file_name = '%s__%s' % (project_name, screen['name'].replace('/', '_') + "@2x.png")
download(url, folder_name, screen_file_name)
set_checkpoint()