Sample code for 30+ languages & platforms
CkPython

eBay -- Upload Bulk Data using FileTransferService

See more eBay Examples

Demonstrates how to upload your data file using the eBay File Transfer API.

Chilkat CkPython Downloads

CkPython
import sys
import chilkat

success = False

# This example assumes the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.

# Use a previously obtained access token.  The token should look something like this:
# "AgAAAA**AQA ..."
accessToken = "EBAY_ACCESS_TOKEN"

http = chilkat.CkHttp()

apiCall = "uploadFile"
fileAttachmentUuid = "<urn:uuid:bb47b86a237311e793ae92361f002671>"
xmlUuid = "<urn:uuid:bb47b766237311e793ae92361f002671>"

req = chilkat.CkHttpRequest()

req.put_HttpVerb("POST")
req.put_Path("/FileTransferService")

sbContentType = chilkat.CkStringBuilder()
sbContentType.Append("multipart/related; type=\"application/xop+xml\"; start=\"XMLUUID\"; start-info=\"text/xml\"")
replaceCount = sbContentType.Replace("XMLUUID",xmlUuid)
req.put_ContentType(sbContentType.getAsString())

req.AddHeader("X-EBAY-SOA-SERVICE-NAME","FileTransferService")
req.AddHeader("X-EBAY-SOA-OPERATION-NAME",apiCall)
req.AddHeader("X-EBAY-SOA-SECURITY-TOKEN",accessToken)
req.AddHeader("X-EBAY-SOA-REQUEST-DATA-FORMAT","XML")
req.AddHeader("X-EBAY-SOA-RESPONSE-DATA-FORMAT","XML")
req.AddHeader("User-Agent","AnythingYouWant")

pathToFileOnDisk1 = "qa_data/ebay/uploadFileRequest.xml"
success = req.AddFileForUpload("uploadFileRequest.xml",pathToFileOnDisk1)
if (success == False):
    print(req.lastErrorText())
    sys.exit()

pathToFileOnDisk2 = "qa_data/ebay/BulkDataExchangeRequests.gz"
success = req.AddFileForUpload("BulkDataExchangeRequests.gz",pathToFileOnDisk2)
if (success == False):
    print(req.lastErrorText())
    sys.exit()

# Add sub-headers for each file in the request.
req.AddSubHeader(0,"Content-Type","application/xop+xml; charset=UTF-8; type=\"text/xml\"")
req.AddSubHeader(0,"Content-Transfer-Encoding","binary")
req.AddSubHeader(0,"Content-ID",xmlUuid)
req.AddSubHeader(1,"Content-Type","application/octet-stream")
req.AddSubHeader(1,"Content-Transfer-Encoding","binary")
req.AddSubHeader(1,"Content-ID",fileAttachmentUuid)

resp = chilkat.CkHttpResponse()
success = http.HttpSReq("storage.sandbox.ebay.com",443,True,req,resp)
if (success == False):
    print(http.lastErrorText())
    sys.exit()

print("Response status code = " + str(resp.get_StatusCode()))

xml = chilkat.CkXml()
xml.LoadXml(resp.bodyStr())

if (resp.get_StatusCode() != 200):
    print(xml.getXml())
    print("Failed.")
    sys.exit()

# We still may have a failure.  The XML needs to be checked.
# A failed response might look like this:

# 	<?xml version="1.0" encoding="UTF-8" ?>
# 	<uploadFileResponse xmlns="http://www.ebay.com/marketplace/services">
# 	    <ack>Failure</ack>
# 	    <errorMessage>
# 	        <error>
# 	            <errorId>1</errorId>
# 	            <domain>Marketplace</domain>
# 	            <severity>Error</severity>
# 	            <category>Application</category>
# 	            <message>Task Reference Id is invalid</message>
# 	            <subdomain>FileTransfer</subdomain>
# 	        </error>
# 	    </errorMessage>
# 	    <version>1.1.0</version>
# 	    <timestamp>2017-04-18T01:05:27.475Z</timestamp>
# 	</uploadFileResponse>

# A successful response looks like this:

# 	<?xml version="1.0" encoding="UTF-8" ?>
# 	<uploadFileResponse xmlns="http://www.ebay.com/marketplace/services">
# 	    <ack>Success</ack>
# 	    <version>1.1.0</version>
# 	    <timestamp>2017-04-18T01:22:47.853Z</timestamp>
# 	</uploadFileResponse>

print(xml.getXml())

# Get the "ack" to see if it's "Failure" or "Success"
if (xml.ChildContentMatches("ack","Success",False)):
    print("Success.")
else:
    print("Failure.")