【问题标题】:Uploading a file to Marketo using a Dropbox link to the file使用文件的 Dropbox 链接将文件上传到 Marketo
【发布时间】:2020-05-03 17:16:30
【问题描述】:

我正在使用下面的 python 代码将文件上传到我们的营销自动化工具 Marketo。当我在本地下载文件时它可以工作(/home/tyron/Downloads/yoda.jpeg),但我希望能够直接从 Dropbox 将文件上传到 Marketo,而无需在中间下载它,因为我将托管此代码在扎皮尔。

当给出 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'))

【问题讨论】:

  • 我可以帮助解决有关 Dropbox 本身的问题,但我没有关于 Marketo 的背景信息。 Marketo API 是否允许您通过 URL 指定文件? (您可能需要查看他们的文档或向他们寻求帮助。)如果确实如此,您可以通过the /2/files/get_temporary_link endpoint 从 Dropbox API 获取文件内容的 URL,并将其提供给 Marketo。
  • 谢谢 Greg,这正是我想要的。我将跟进 Marketo 以检查 API 是否接受 URL,如果他们接受,那么临时端点应该可以工作

标签: python api https dropbox marketo


【解决方案1】:

感谢 Greg 在 cmets 中的建议,我能够使用 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}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多