python mailchimp api 2.0 json 响应错误
python mailchimp api 2.0 json response error
您好,我正在尝试设置一个从 mysql 数据库获取数据的批处理作业,并将这些用户发送到 mailchimp 以用于直接电子邮件活动。我在 python 2.6 Red Hat linux (Red Hat 4.4.7-4) 和 python 2.7.3 Debian 4.6 上的代码 运行 有问题。 3-14。我知道此代码适用于 windows 7 python 2.7.2 anaconda ipython notebook 但我最后收到 mailchimp json 响应错误我不完全理解。
import mysql.connector
import mailchimp
#prepare mysql connection
def connection(query):
cnx = mysql.connector.connect(user='x', password='x',
host='x',
port=xxxx,
connection_timeout=60,
database='database')
cursor = cnx.cursor()
cursor.execute(query)
data=cursor.fetchall ()
cursor.close()
cnx.close()
return data
#execute query
email_data=None
query_con = ("SELECT * FROM email")
email_data=connection(query_con)
#set mailchimp api key
apikey='key'
#create mailchimp oauth instance
m=mailchimp.Mailchimp(apikey)
#set list id to target mailchimp list
list_id='xxxx'
#method to format table data to mailchimp structure
def batch_load(data):
b_load= [{"email":{"email":x[3]},"merge_vars":{"FNAME":x[1],"LNAME":x[2], "MMERGE3":x[0],
"MMERGE4":x[6], "MMERGE5":x[7], "MMERGE6":x[8], "MMERGE7":x[10], "MMERGE8":x[11],
"MMERGE9":x[12], "MMERGE10":x[13],"MMERGE11":x[14], "MMERGE12":x[16],
"MMERGE13":x[17]}} for x in data]
return b_load
#use method
b_load=batch_load(email_data)
#upload users to mailchimp with parameters: list_id, formated_data, no double op in, allow updates, do not update interests.
m.lists.batch_subscribe(list_id,b_load,False,True,False)
这是一个 json 上传示例:
{
'merge_vars': {
'LNAME': u'Client',
'MMERGE8': datetime.datetime(2014,
6,
20,
7,
33,
43),
'MMERGE9': 0,
'FNAME': u'Dev',
'MMERGE3': 74,
'MMERGE6': 2,
'MMERGE7': 99,
'MMERGE4': u'(111)111-1111',
'MMERGE5': u'90210',
'MMERGE10': datetime.datetime(2015,
3,
9,
14,
4,
50),
'MMERGE11': None,
'MMERGE12': None,
'MMERGE13': 0
},
'email': {
'email': u'dev@dev.com'
}
}
这是日期时间格式似乎有问题的错误:
File "/foo/bar/batch_job.py", line 113, in <module>
m.lists.batch_subscribe(list_id,b_load,False,True,False)
File "/usr/lib/python2.6/site-packages/mailchimp.py", line 1393, in batch_subscribe
return self.master.call('lists/batch-subscribe', _params)
File "/usr/lib/python2.6/site-packages/mailchimp.py", line 351, in call
params = json.dumps(params)
File "/usr/lib64/python2.6/site-packages/simplejson/__init__.py", line 370, in dumps
return _default_encoder.encode(obj)
File "/usr/lib64/python2.6/site-packages/simplejson/encoder.py", line 269, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib64/python2.6/site-packages/simplejson/encoder.py", line 348, in iterencode
return _iterencode(o, 0)
File "/usr/lib64/python2.6/site-packages/simplejson/encoder.py", line 246, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: datetime.datetime(2014, 6, 20, 7, 33, 43) is not JSON serializable
感谢任何帮助。
谢谢
这实际上是一个 Python 错误,而不是 MailChimp 错误。 JSON 模块不知道如何将日期时间对象转换为 JSON 值。您需要自己将其转换为字符串。 MailChimp 应该能够接受 isoformat() 字符串,或者,如果您正在使用日期合并字段(不需要时间),您可以调用 date().isoformat()。这是一些正确转换为 JSON 的代码:
json.dumps({
'merge_vars': {
'LNAME': u'Client',
'MMERGE8': datetime.datetime(2014, 6, 20, 7, 33, 43).date().isoformat(),
'MMERGE9': 0,
'FNAME': u'Dev',
'MMERGE3': 74,
'MMERGE6': 2,
'MMERGE7': 99,
'MMERGE4': u'(111)111-1111',
'MMERGE5': u'90210',
'MMERGE10': datetime.datetime(2015, 3, 9, 14, 4, 50).date().isoformat(),
'MMERGE11': None,
'MMERGE12': None,
'MMERGE13': 0
},
'email': {
'email': u'dev@dev.com'
}
})
如果从 MMERGE8
或 MMERGE10
中删除 .date().isoformat()
,您会发现错误又回来了。
您好,我正在尝试设置一个从 mysql 数据库获取数据的批处理作业,并将这些用户发送到 mailchimp 以用于直接电子邮件活动。我在 python 2.6 Red Hat linux (Red Hat 4.4.7-4) 和 python 2.7.3 Debian 4.6 上的代码 运行 有问题。 3-14。我知道此代码适用于 windows 7 python 2.7.2 anaconda ipython notebook 但我最后收到 mailchimp json 响应错误我不完全理解。
import mysql.connector
import mailchimp
#prepare mysql connection
def connection(query):
cnx = mysql.connector.connect(user='x', password='x',
host='x',
port=xxxx,
connection_timeout=60,
database='database')
cursor = cnx.cursor()
cursor.execute(query)
data=cursor.fetchall ()
cursor.close()
cnx.close()
return data
#execute query
email_data=None
query_con = ("SELECT * FROM email")
email_data=connection(query_con)
#set mailchimp api key
apikey='key'
#create mailchimp oauth instance
m=mailchimp.Mailchimp(apikey)
#set list id to target mailchimp list
list_id='xxxx'
#method to format table data to mailchimp structure
def batch_load(data):
b_load= [{"email":{"email":x[3]},"merge_vars":{"FNAME":x[1],"LNAME":x[2], "MMERGE3":x[0],
"MMERGE4":x[6], "MMERGE5":x[7], "MMERGE6":x[8], "MMERGE7":x[10], "MMERGE8":x[11],
"MMERGE9":x[12], "MMERGE10":x[13],"MMERGE11":x[14], "MMERGE12":x[16],
"MMERGE13":x[17]}} for x in data]
return b_load
#use method
b_load=batch_load(email_data)
#upload users to mailchimp with parameters: list_id, formated_data, no double op in, allow updates, do not update interests.
m.lists.batch_subscribe(list_id,b_load,False,True,False)
这是一个 json 上传示例:
{
'merge_vars': {
'LNAME': u'Client',
'MMERGE8': datetime.datetime(2014,
6,
20,
7,
33,
43),
'MMERGE9': 0,
'FNAME': u'Dev',
'MMERGE3': 74,
'MMERGE6': 2,
'MMERGE7': 99,
'MMERGE4': u'(111)111-1111',
'MMERGE5': u'90210',
'MMERGE10': datetime.datetime(2015,
3,
9,
14,
4,
50),
'MMERGE11': None,
'MMERGE12': None,
'MMERGE13': 0
},
'email': {
'email': u'dev@dev.com'
}
}
这是日期时间格式似乎有问题的错误:
File "/foo/bar/batch_job.py", line 113, in <module>
m.lists.batch_subscribe(list_id,b_load,False,True,False)
File "/usr/lib/python2.6/site-packages/mailchimp.py", line 1393, in batch_subscribe
return self.master.call('lists/batch-subscribe', _params)
File "/usr/lib/python2.6/site-packages/mailchimp.py", line 351, in call
params = json.dumps(params)
File "/usr/lib64/python2.6/site-packages/simplejson/__init__.py", line 370, in dumps
return _default_encoder.encode(obj)
File "/usr/lib64/python2.6/site-packages/simplejson/encoder.py", line 269, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib64/python2.6/site-packages/simplejson/encoder.py", line 348, in iterencode
return _iterencode(o, 0)
File "/usr/lib64/python2.6/site-packages/simplejson/encoder.py", line 246, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: datetime.datetime(2014, 6, 20, 7, 33, 43) is not JSON serializable
感谢任何帮助。
谢谢
这实际上是一个 Python 错误,而不是 MailChimp 错误。 JSON 模块不知道如何将日期时间对象转换为 JSON 值。您需要自己将其转换为字符串。 MailChimp 应该能够接受 isoformat() 字符串,或者,如果您正在使用日期合并字段(不需要时间),您可以调用 date().isoformat()。这是一些正确转换为 JSON 的代码:
json.dumps({
'merge_vars': {
'LNAME': u'Client',
'MMERGE8': datetime.datetime(2014, 6, 20, 7, 33, 43).date().isoformat(),
'MMERGE9': 0,
'FNAME': u'Dev',
'MMERGE3': 74,
'MMERGE6': 2,
'MMERGE7': 99,
'MMERGE4': u'(111)111-1111',
'MMERGE5': u'90210',
'MMERGE10': datetime.datetime(2015, 3, 9, 14, 4, 50).date().isoformat(),
'MMERGE11': None,
'MMERGE12': None,
'MMERGE13': 0
},
'email': {
'email': u'dev@dev.com'
}
})
如果从 MMERGE8
或 MMERGE10
中删除 .date().isoformat()
,您会发现错误又回来了。