繁体   English   中英

通过 api 从 sendgrid 获取所有联系人

[英]Get all contacts from sendgrid via api

我正在开发一个应用程序,我在使用 api 注册期间将用户添加到 sendgrid:

PUT /marketing/contacts

我还在注册期间根据用户的状态(数据库数据)将用户添加到特定列表。

假设我在 sendgrid 列表 A、列表 B、列表 C 中有 3 个列表

现在我每小时运行一个 cron 并检查用户的状态,并根据我想将用户从列表 A 移动到列表 B 的条件

正如我检查的那样,我可以使用相同的 api 将用户添加到新列表:

PUT /marketing/contacts

我可以从之前的列表中删除用户,我可以使用 api:

DELETE /marketing/lists/{id}/contacts

但是之前将用户添加到哪个列表中并从 sendgrid 获取联系人 ID 我需要从 sendgrid 获取联系人,我使用的是 api:

GET /marketing/contacts

但是这个 api 只返回最后 50 个数据,分页选项也不存在。

我还尝试了 api:

GET https://api.sendgrid.com/v3/contactdb/recipients?page_size=100&page=1

但是这个 api 也给我返回错误

error:
{
  "errors": [
     {
       "field": null,
       "message": "access forbidden"
     }
  ]
}

但是 api 密钥没问题,因为营销 API 使用相同的 api 密钥,而 api 密钥是在具有完全访问权限的情况下生成的。

https://sendgrid.com/docs/API_Reference/api_v3.html https://sendgrid.com/docs/API_Reference/Web_API_v3/Marketing_Campaigns/contactdb.html

有人可以帮助我通过任何其他 api 从 sendgrid 获取所有联系人,或者如果我在上述 api 中缺少任何参数。

联系支持后,这是我得到的:

为了获取所有现有联系人,您可以使用此端点: https://api.sendgrid.com/v3/marketing/contacts/exports
发布/营销/联系人/出口

这将返回id ,您使用它来GET /v3/marketing/contacts/exports/<id> ,接收文件 所以下载它,打开并阅读 csv。 不完全是我想要的,但它可能会为其他人做这项工作。

关于这个 endoint 的文档在这里

我最近经历了同样的事情,所以想添加我所做的,希望这能帮助遇到同样问题的任何人。

这是一段快速而肮脏的代码,我用它来测试如何获取整个联系人列表而实际上不需要在脚本外部打开文件。

request = { 
    "list_ids": [list_id]
}
response = sg.client.marketing.contacts.exports.post(
    request_body=request
)

export_json = response.body.decode('utf8').replace("'", '"')
export_data = json.loads(export_json)

export_id = export_data['id']

urls = []
while True:
    response = sg.client.marketing.contacts.exports._(export_id).get()
    export_status_json = response.body.decode('utf8').replace("'", '"')
    export_status_data = json.loads(export_status_json)
    urls = export_status_data['urls']
    
    if len(urls) == 0:
        time.sleep(10)
    else:
        break

for url in urls:
    response = requests.get(url)
    out_file = gzip.decompress(response.content).decode('utf8'))
    pd = pandas.read_csv(io.StringIO(out_file), dtype=str)

如果您想要 json,请将其添加到请求正文并将其读取为

for url in urls:
    response = requests.get(url)
    out_file = gzip.decompress(response.content).decode('utf8').replace("'", '"')


    print(out_file)

对我来说,我们公司正在使用传统营销,所以我必须使用另一个端点 POST v3/contactdb/recipient

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM