템플릿 패키지 업로드
curl --request POST \
--url https://resource-dot-edicusbase.appspot.com/resapi/package \
--header 'Content-Type: multipart/form-data' \
--header 'edicus-api-key: <api-key>' \
--form token=@example-file \
--form doc=@example-file \
--form meta=@example-file \
--form dp=@example-file \
--form res=@example-fileimport requests
url = "https://resource-dot-edicusbase.appspot.com/resapi/package"
files = {
"token": ("example-file", open("example-file", "rb")),
"doc": ("example-file", open("example-file", "rb")),
"meta": ("example-file", open("example-file", "rb")),
"dp": ("example-file", open("example-file", "rb")),
"res": ("example-file", open("example-file", "rb"))
}
headers = {"edicus-api-key": "<api-key>"}
response = requests.post(url, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('token', '<string>');
form.append('doc', '<string>');
form.append('meta', '<string>');
form.append('dp', '<string>');
form.append('res', '<string>');
const options = {method: 'POST', headers: {'edicus-api-key': '<api-key>'}};
options.body = form;
fetch('https://resource-dot-edicusbase.appspot.com/resapi/package', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://resource-dot-edicusbase.appspot.com/resapi/package",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"token\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"doc\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"meta\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"dp\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"res\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"edicus-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://resource-dot-edicusbase.appspot.com/resapi/package"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"token\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"doc\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"meta\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"dp\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"res\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("edicus-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://resource-dot-edicusbase.appspot.com/resapi/package")
.header("edicus-api-key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"token\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"doc\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"meta\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"dp\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"res\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://resource-dot-edicusbase.appspot.com/resapi/package")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["edicus-api-key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"token\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"doc\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"meta\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"dp\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"res\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"template_uri": "gcs://template/partners/motion1/res/template/284.json",
"layout_uris": [],
"res_uris": []
}"no token"{
"code": "invalid-edicus-api-key"
}{}템플릿
템플릿 패키지 업로드
템플릿과 템플릿에 쓰인 모든 리소스 파일을 한 번에 등록한다. multipart/form-data로 보낸다.
| 파일 | 필드 | 설명 |
|---|---|---|
token.jwt | token | 리소스 토큰 |
template.json | doc | InDesign에서 내보낸 JSON |
metadata.json | meta | Edicus doc 변환 파라미터 |
template-dp.png | dp | 템플릿 썸네일. 파일 이름이 template-dp로 시작하면 되고 PNG나 JPG를 쓴다. 가로나 세로가 300px를 넘으면 300px 안으로 줄여 저장한다 |
layout-dp-n.png | dp | 레이아웃 썸네일. generate_layout: true일 때만 필요하고 template.json의 페이지 수만큼 보낸다 |
| 리소스 파일 | res | SVG, PNG, JPG. 파일명이 template.json의 page-item-id여야 한다(예: 234.png) |
전체 업로드 용량이 32MB를 넘으면
entry too large 오류가 난다. 그런 경우 대용량 업로드 URL을 발급받아 zip으로 올린다.응답의 unregistered_fonts_found와 unresolved_font_group_ids가 둘 다 빈 배열이어야 정상이다. 하나라도 값이 있으면 폰트에 문제가 있는 상태다.
POST
/
resapi
/
package
템플릿 패키지 업로드
curl --request POST \
--url https://resource-dot-edicusbase.appspot.com/resapi/package \
--header 'Content-Type: multipart/form-data' \
--header 'edicus-api-key: <api-key>' \
--form token=@example-file \
--form doc=@example-file \
--form meta=@example-file \
--form dp=@example-file \
--form res=@example-fileimport requests
url = "https://resource-dot-edicusbase.appspot.com/resapi/package"
files = {
"token": ("example-file", open("example-file", "rb")),
"doc": ("example-file", open("example-file", "rb")),
"meta": ("example-file", open("example-file", "rb")),
"dp": ("example-file", open("example-file", "rb")),
"res": ("example-file", open("example-file", "rb"))
}
headers = {"edicus-api-key": "<api-key>"}
response = requests.post(url, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('token', '<string>');
form.append('doc', '<string>');
form.append('meta', '<string>');
form.append('dp', '<string>');
form.append('res', '<string>');
const options = {method: 'POST', headers: {'edicus-api-key': '<api-key>'}};
options.body = form;
fetch('https://resource-dot-edicusbase.appspot.com/resapi/package', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://resource-dot-edicusbase.appspot.com/resapi/package",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"token\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"doc\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"meta\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"dp\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"res\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"edicus-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://resource-dot-edicusbase.appspot.com/resapi/package"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"token\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"doc\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"meta\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"dp\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"res\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("edicus-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://resource-dot-edicusbase.appspot.com/resapi/package")
.header("edicus-api-key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"token\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"doc\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"meta\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"dp\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"res\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://resource-dot-edicusbase.appspot.com/resapi/package")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["edicus-api-key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"token\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"doc\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"meta\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"dp\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"res\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"template_uri": "gcs://template/partners/motion1/res/template/284.json",
"layout_uris": [],
"res_uris": []
}"no token"{
"code": "invalid-edicus-api-key"
}{}Authorizations
모션원에서 발급받는 API 키입니다. 외부에 유출되지 않도록 각별히 주의합니다.
Headers
true면 응답에 변환이 끝난 doc(edicus-doc)이 포함된다. 파일로 저장해 디자이너 모드 편집기의 템플릿 불러오기로 테스트할 수 있다.
Body
multipart/form-data
Response
성공.
등록된 템플릿의 uri. 편집기 띄우기의 입력으로 쓴다
download-json: true일 때만. 변환이 끝난 edicus-doc
등록되지 않은 폰트를 사용한 경우. 빈 배열이어야 정상이다
Show child attributes
Show child attributes
해석되지 않은 font group id. 빈 배열이어야 정상이다