Table of Contents |
---|
In this tutorial, I will tell you how you can use Spreadshirt API v1 to upload designs. You can later use these designs to create new products. I will first tell you about the preliminaries that need to be met in order to be able to upload designs. I will then tell you about the steps that need to be conducted to upload the designs. And finally, I will show you in detail on code samples what exactly you need to do.
...
To create the design, you need to conduct a HTTP POST call on http https://api.spreadshirt.net/api/v1/shops/40000/designs for example.
Payload could be:
Code Block |
---|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<design xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://api.spreadshirt.net">
<name>Super cool design</name>
<description>A super cool design</description>
</design>
|
Response contains HTTP Location header:
httphttps://api.spreadshirt.net/api/v1/shops/40000/designs/u100001143
Fetch the XML Data
To fetch the full XML data for the created design, you need to conduct a HTTP GET call on http https://api.spreadshirt.net/api/v1/shops/40000/designs/u100001143. This XML data contains for example the upload URL:
Code Block |
---|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <design xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://api.spreadshirt.net" weight="0.0" xlink:href="httphttps://api.spreadshirt.net/api/v1/shops/40000/designs/u100001143" id="u100001143"> <name>Super cool design</name> <description>A super cool design</description> <user xlink:href="httphttps://api.spreadshirt.net/api/v1/users/37508" id="37508"/> <restrictions> <fixedColors>false</fixedColors> <ownText>true</ownText> <obligatory>true</obligatory> <movable>true</movable> <targetView>0</targetView> <minimumScale>100</minimumScale> <visible>true</visible> <inverted>false</inverted> </restrictions> <size unit="px"> <width>1016.0</width> <height>895.0</height> </size> <colors/> <printTypes> <printType xlink:href="httphttps://api.spreadshirt.net/api/v1/shops/40000/printTypes/1" id="1"/> <printType xlink:href="httphttps://api.spreadshirt.net/api/v1/shops/40000/printTypes/19" id="19"/> <printType xlink:href="httphttps://api.spreadshirt.net/api/v1/shops/40000/printTypes/17" id="17"/> <printType xlink:href="httphttps://api.spreadshirt.net/api/v1/shops/40000/printTypes/10" id="10"/> <printType xlink:href="httphttps://api.spreadshirt.net/api/v1/shops/40000/printTypes/21" id="21"/> </printTypes> <designCategories/> <price> <vatExcluded>0.00</vatExcluded> <vatIncluded>0</vatIncluded> <vat>19.00</vat> <currency xlink:href="httphttps://api.spreadshirt.net/api/v1/currencies/1" id="1"/> </price> <resources> <resource xlink:href="httphttps://image.spreadshirtspreadshirtmedia.net/image-server/v1/designs/100001143" type="preview" mediaType="png"/> <!-- upload url !!! --> <resource xlink:href="httphttps://image.spreadshirtspreadshirtmedia.net/image-server/v1/designs/100001143" type="montage" mediaType="png"/> </resources> <created>2010-08-02T08:29:59Z</created> </design> |
...
From the fetched XML file, you need to extract the image API URL from design/resources/resource@type=montage. In our example, this is httphttps://image.spreadshirtspreadshirtmedia.net/image-server/v1/designs/100001143.
Upload the Pixel Design
To upload the pixel design, you need to conduct a HTTP PUT call on httphttps://image.spreadshirtspreadshirtmedia.net/image-server/v1/designs/100001143 and upload a PNG design similar to the following one:
...
The sample Java code for uploading a design could look as follows:
Code Block |
---|
public class DesignUpload { private static final Logger log = LoggerFactory.getLogger(DesignUpload.class); public static final String API_KEY = "..."; public static final String SECRET = "..."; public static final String UPLOAD_URL = "httphttps://api.spreadshirt.net/api/v1/shops/40000/designs"; public static final String UPLOAD_XML = "./src/main/resources/designupload/design.xml"; public static final String UPLOAD_IMAGE = "./src/main/resources/designupload/design.png"; public static void main(String[] args) throws Exception { HttpUrlConnectionFactory urlConnectionFactory = new HttpUrlConnectionFactory(API_KEY, SECRET, null); HttpCallCommandFactory commandFactory = new HttpCallCommandFactory(urlConnectionFactory); // 1. create design data using xml HttpCallCommand createCommand = commandFactory.createFileHttpCallCommand(UPLOAD_URL, HttpMethod.POST, null, new File(UPLOAD_XML), null); createCommand.setApiKeyProtected(true); createCommand.execute(); if (createCommand.getStatus() >= 400) { throw new Exception("Could not create design xml!"); } log.info("XML location is: " + createCommand.getUrl()); // 2. get created design xml HttpCallCommand getCommand = commandFactory.createPlainHttpCallCommand(createCommand.getLocation(), HttpMethod.GET, null); getCommand.execute(); if (createCommand.getStatus() >= 400) { throw new Exception("Could not retrieve design xml from " + createCommand.getLocation() + "!"); } String message = (String) getCommand.getOutput(); // 3. determine upload location String searchString = "resource xlink:href=\""; int index = message.indexOf(searchString); String uploadUrl = message.substring(index + searchString.length(), message.indexOf("\"", index + searchString.length() + 1)); log.info("Upload location is: " + uploadUrl); // 4. upload image HttpCallCommand uploadCommand = commandFactory.createFileHttpCallCommand(uploadUrl, HttpMethod.PUT, null, new File(UPLOAD_IMAGE), null); uploadCommand.setApiKeyProtected(true); uploadCommand.execute(); if (uploadCommand.getStatus() >= 400) { throw new Exception("Could not upload design!"); } } } |
You can find the sample code on SourceForge's spreadshirtapps project at https://spreadshirtapps.svn.sourceforge.net/svnroot/spreadshirtapps/java/tutorials.
PHP
Code Block |
---|
<?php // The design upload script shows you how to create designs on the Spreadshirt platform // and upload the corresponding design data using Spreadshirt data and image API. // 1. Create design entity via data api $url = "httphttps://api.spreadshirt.net/api/v1/shops/40000/designs"; $header = array(); $header[] = createSprdAuthHeader("POST", $url); $header[] = "Content-Type: application/xml"; $xml = getFileData("design.xml"); // Initialize handle and set options $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); $result = curl_exec($ch); // Close the handle curl_close($ch); $dataUrl = parseHttpHeaders($result, "Location"); echo "Design URL: ".$dataUrl."\n"; // 2. Fetch design data to retrieve upload url $ch = curl_init($dataUrl); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); $result = curl_exec($ch); // Close the handle curl_close($ch); $start = strpos($result, "resource xlink:href=\"")+21; $end = strpos($result, "\"", $start); $imageUrl = substr($result, $start, $end-$start); echo "Image URL: ".$imageUrl."\n"; // 3. Upload design data via image API $imageData = getFileData("design.png"); $header = array(); $header[] = createSprdAuthHeader("PUT", $imageUrl); $header[] = "Content-Type: image/png"; $ch = curl_init($imageUrl."?method=PUT"); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_POSTFIELDS, $imageData); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close($ch); function createSprdAuthHeader($method, $url) { $apiKey = "..."; $secret = "..."; $time = time()*1000; $data = "$method $url $time"; $sig = sha1("$data $secret"); return "Authorization: SprdAuth apiKey=\"$apiKey\", data=\"$data\", sig=\"$sig\""; } function parseHttpHeaders( $header, $headername ) { $retVal = array(); $fields = explode("\r\n", preg_replace('/\x0D\x0A[\x09\x20]+/', ' ', $header)); foreach( $fields as $field ) { if( preg_match('/('.$headername.'): (.+)/m', $field, $match) ) { return $match[2]; } } return $retVal; } function getFileData($file) { $fp = fopen($file, "r"); $data = ""; while(!feof($fp)) { $data .= fgets($fp, 1024); } fclose($fp); return $data; } ?> |
...