性感的infusionsoft xml-rpc api客户端
infusionsoft-client的Python项目详细描述
一个简单易用的Infusionsoft XML-RPC API客户端,包含用于代码检测的存根。仅限Python3.5+(但是拉请求欢迎:smirk:)。
安装
pip install infusionsoft-client
快速启动
首先,使用应用程序名和api密钥初始化客户端:
importinfusionsoftinfusionsoft.initialize('myapp','098f6bcd4621d373cade4e832627b4f6')
使用infusionsoft就像使用常规的xmlrpc.client.ServerProxy:
importinfusionsoftcontact_id=infusionsoft.ContactService.add({'FirstName':'Johnny'})
设置XML-RPC客户端选项
传递给initialize()的任何额外Kwargs都将传递给xmlrpc.client.ServerProxy。
importinfusionsoftinfusionsoft.initialize('myapp','098f6bcd4621d373cade4e832627b4f6',use_builtin_types=True)
一些关卡的兴趣是:
- use_builtin_types:是否使用本机python类型,而不是像xmlrpc.client.DateTime或xmlrpc.client.Binary这样的包装器。i建议打开此选项。它将在下一个主要/中断版本中默认打开。
- verbose:设置为True,打印每个rpc调用的请求和响应体。
- allow_none:是否允许通过线路发送None。infusionsoft通常不允许None(用xml-rpc术语来说就是nil)。如果响应中的字段为空,infusionsoft将不会发送它。
- retries:重试失败请求的次数。请求会在连接/套接字错误和“invalidconfig”错误时重试(如果您从未见过它们,我羡慕您)。任何其他类型的故障仍然会引发异常。
有关详细信息,请参见the docs。
与django一起使用
infusionsoft-client包括一个现成的django集成。只需将其添加到您的INSTALLED_APPS:
INSTALLED_APPS=(# ...'infusionsoft.contrib.django',)
并将应用程序名称和API密钥添加到您的设置中:
INFUSIONSOFT_APP_NAME='myapp'INFUSIONSOFT_API_KEY='098f6bcd4621d373cade4e832627b4f6'
使用INFUSIONSOFT_CLIENT_OPTIONS:
INFUSIONSOFT_CLIENT_OPTIONS={'use_builtin_types':True,}
获取查询的所有行
有些api调用是分页的,需要多次调用才能检索所有结果。这可能是一个痛苦,你可能会发现自己写相同的代码一遍又一遍。为此,infusionsoft-client提供了一个consume()生成器函数,它将使用任何查询函数的所有页面。
要使用它,请创建一个lambda(或正则)函数,该函数使用page和limit作为参数来执行分页api调用,并将其传递给consume():
importinfusionsoftfrominfusionsoft.queryimportconsumequery_fn=lambdapage,limit:(infusionsoft.DataService.query('mytable',limit,page,['Id']))# Use with a for-loop, to avoid storing all rows in memory:forrowinconsume(query_fn):do_stuff(row)# Or retrieve all rows at onceall_rows=list(consume(query_fn))
生成代码存根
与infusionsoft-client一起提供的是下载正式infusionsoft xml-rpc文档、用BeautifulSoup解析它们并为所有方法生成与python 3.5兼容的存根的代码。
要自己生成这些文件,请首先安装附加要求:
pip install -r stub-requirements.txt
然后运行generate_stubs()函数,它将返回一个字符串:
frominfusionsoft.gen_stubsimportgenerate_stubssource=generate_stubs()