【问题标题】:How to query for a list of all Mailchimp campaigns using Python?如何使用 Python 查询所有 Mailchimp 活动的列表?
【发布时间】:2021-03-17 23:16:28
【问题描述】:

有活动;但是,没有一个是从这个sample 脚本返回的:

nicholas@mordor:~/python$ 
nicholas@mordor:~/python$ python3 chimp.py 
key          jfkdljfkl_key
user         fdjkslafjs_user
password     dkljfdkl_pword
server       fjkdls_server
nicholas@mordor:~/python$ 
nicholas@mordor:~/python$ cat chimp.py 
import os
from mailchimp3 import MailChimp

key=(os.environ['chimp_key'])
user=(os.environ['chimp_user'])
password=(os.environ['chimp_password'])
server=(os.environ['chimp_server'])

print ("key\t\t", key)
print ("user\t\t", user)
print ("password\t", password)
print ("server\t\t", server)


client = MailChimp(mc_api=key, mc_user=user)
client.lists.all(get_all=True, fields="lists.name,lists.id")
client.campaigns.all(get_all=True)


nicholas@mordor:~/python$ 

我是否需要发送其他信息才能取回广告系列列表?只是想记录一些来自 Mailchimp 的基本回复。

(显然,我没有发布我的API 密钥,也没有发布其他敏感信息。)

【问题讨论】:

    标签: python api email mailchimp saas


    【解决方案1】:

    这是我使用并为我工作的东西。只需使用 MailChimp 客户端调用 get_all_campaigns 函数。我为我的特定需求添加了n_days,但如果您不需要它,您可以选择删除这部分代码。您还可以根据需要自定义重命名和删除列。

    from typing import Optional, Union, List, Tuple
    from datetime import timedelta, date
    import pandas as pd  # type: ignore
    from mailchimp3 import MailChimp # type: ignore
    
    
    default_campaign_fields = [
        'id',
        'send_time',
        'emails_sent',
        'recipients.recipient_count',
        'settings.title',
        'settings.from_name',
        'settings.reply_to',
        'report_summary'
    ]
    
    def get_campaigns(client: MailChimp, n_days: int = 7, fields: Optional[Union[str, List[str]]] = None) -> pd.DataFrame:
        """
        Gets the statistics for all sent campaigns in the last 'n_days' 
        
        client: (Required) MailChimp client object
    
        n_days: (int) Get campaigns for the last n_days
    
        fields: Specific fields to return. Default is None which gets some predefined columns.
        """
        keyword = 'campaigns'
    
        if fields is None:
            fields = default_campaign_fields  
        
        # If it is a string (single field), convert to List so that join operation works properly
        if isinstance(fields, str):
            fields = [fields]
    
        fields = [keyword + '.' + field for field in fields]
        fields = ",".join(fields)
    
        now = date.today()
        last_ndays = now - timedelta(days=n_days)
        
        rvDataFrame = pd.json_normalize(
            client.campaigns.all(
                get_all=True,
                since_send_time=last_ndays,
                fields=fields).get(keyword))
        if 'send_time' in rvDataFrame.columns:
            rvDataFrame.sort_values('send_time', ascending=False, inplace=True)
        
        mapper = {
            "id": "ID",
            "emails_sent": "Emails Sent",
            "settings.title": "Campaign Name",
            "settings.from_name": "From",
            "settings.reply_to": "Email",
            "report_summary.unique_opens": "Opens",
            "report_summary.open_rate": "Open Rate (%)",
            "report_summary.subscriber_clicks": "Unique Clicks",
            "report_summary.click_rate": "Click Rate (%)"
        }
        
        drops = [
            "recipients.recipient_count",
            "report_summary.opens", 
            "report_summary.clicks",
            "report_summary.ecommerce.total_orders",
            "report_summary.ecommerce.total_spent",
            "report_summary.ecommerce.total_revenue"]
    
        rvDataFrame.drop(columns=drops, inplace=True)
        rvDataFrame.rename(columns=mapper, inplace=True)
    
        rvDataFrame.loc[:,"Open Rate (%)"] = round(rvDataFrame.loc[:,"Open Rate (%)"]*100,2)
        rvDataFrame.loc[:,"Click Rate (%)"] = round(rvDataFrame.loc[:,"Click Rate (%)"]*100,2)
    
        return rvDataFrame
    

    【讨论】:

      猜你喜欢
      • 2020-12-27
      • 2015-04-02
      • 2021-03-21
      • 2019-12-22
      • 2021-01-18
      • 2015-12-04
      • 2020-06-07
      • 2015-10-04
      • 2023-03-10
      相关资源
      最近更新 更多