使用Dropbox链接将文件上传到Marketo。

问题描述 投票:0回答:1

我正在使用下面的python代码上传一个文件到我们的营销自动化工具Marketo。当我把文件下载到本地(hometyronDownloadsyoda.jpeg)时,它可以工作,但我希望能够直接从Dropbox上传文件到Marketo,而不必在中间下载,因为我将在Zapier中托管这个代码。

当给定dropbox文件的链接时,最好的上传方式是什么?

import requests

url = "xxxxxx/rest/asset/v1/files.json"

payload = {'name': 'test',
'file': '/home/tyron/Downloads/yoda.jpe',
'folder': '{"id":367,"type":"Folder"}'}
files = [
  ('file', open('/home/tyron/Downloads/yoda.jpeg','rb'))
]
headers = {
  'Authorization': 'Bearer yyyyyyyy'
}

response = requests.request("POST", url, headers=headers, data = payload, files = files)

print(response.text.encode('utf8'))
python api https dropbox marketo
1个回答
0
投票

感谢评论中Greg的建议,我能够使用dropbox的临时链接端点将文件上传到Marketo。

获取Dropbox端点的Python代码

import re
from urllib.parse import urlparse
from urllib.parse import unquote
import requests
import json

link = "https://www.dropbox.com/preview/Telnyx/...../file"

path  = urlparse(link).path
path = re.search("(/Telnyx.*$)",path).group(0).lower()
path = unquote(path)

print(path)

url = "https://api.dropboxapi.com/2/files/get_temporary_link"
payload = {"path": path}

headers = {
  'Authorization': 'Bearer xxxxxxxxxxxxxx',
  'Content-Type': 'application/json'
}

response = requests.request("POST", url, headers=headers, data = json.dumps(payload))

print(response)

link = re.search('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', response.text).group(0)

return {'id': 1234, 'rawHTML': link}

上传到Marketo的Python代码

import requests
import urllib
import json
import re


path = "https://dl.dropboxusercontent.com/apitl/1/......." #returned from previous function

f = urllib.request.urlopen(path)
mime_type = f.info().get_content_type()

f_ext = f.info().get_content_type().split("/")[1]

url = "https://xxx-xxx-xxx.mktorest.com/rest/asset/v1/files.json"

f_name = 'Name.' + f_ext

payload = {
'folder': '{"id":xxxx","type":"Folder"}'
}

headers = {
  'Authorization': 'Bearer xxxxxxxx'
}

files = {'file': (f_name, f, mime_type)}

response = requests.request("POST", url, headers=headers, data = payload, files = files)

print(response.text.encode('utf8'))
f_url = re.search('"url":"(.*)","folder',response.text).group(1)

return {'id': 1234, 'rawHTML': f_url}
© www.soinside.com 2019 - 2024. All rights reserved.