WorkEtc API Python脚本
我正在尝试用Python编写一个通用脚本,任何人都可以使用它从Etc CRM平台导入/导出各种信息。这里有所有文档: 然而,我现在有点卡住了。身份验证有效,我可以调用不同的API方法,但只能调用没有参数的方法。我是Python新手,这就是为什么我不知道如何将参数传递到API中的特定方法上。具体来说,我需要导出所有时间表。我正在尝试专门调用此方法:。由于明显的原因,我无法透露登录信息,因此可能有点难以为您测试 守则本身:WorkEtc API Python脚本,python,xml,json,api,Python,Xml,Json,Api,我正在尝试用Python编写一个通用脚本,任何人都可以使用它从Etc CRM平台导入/导出各种信息。这里有所有文档: 然而,我现在有点卡住了。身份验证有效,我可以调用不同的API方法,但只能调用没有参数的方法。我是Python新手,这就是为什么我不知道如何将参数传递到API中的特定方法上。具体来说,我需要导出所有时间表。我正在尝试专门调用此方法:。由于明显的原因,我无法透露登录信息,因此可能有点难以为您测试 守则本身: import xml.etree.ElementTree as ET imp
import xml.etree.ElementTree as ET
import urllib2
import sys
email = 'email@domain.co.uk'
password = 'pass'
#service = 'GetEmployee?EntityID=1658'
#service = 'GetEntryID?EntryID=23354'
#service = ['GetAllCurrenciesWebSafe']
#service = ['GetEntryID', 'EntryID=23354']
service = ['GetDraftTimesheets','2005-08-15T15:52:01+00:00','2014-08-15T15:52:01+00:00' ]
class workEtcUniversal():
sessionkey = None
def __init__(self,url):
if not "http://" in url and not "https://" in url:
url = "http://%s" % url
self.base_url = url
else:
self.base_url = url
def authenticate(self, user, password):
try:
loginurl = self.base_url + email + '&pass=' + password
req = urllib2.Request(loginurl)
response = urllib2.urlopen(req)
the_page = response.read()
root = ET.fromstring(the_page)
sessionkey = root[1].text
print 'Authentication successful!'
try:
f = self.service(sessionkey, service)
except RuntimeError:
print 'Did not perform function!'
except RuntimeError:
print 'Error logging in or calling the service method!'
def service(self, sessionkey, service):
try:
if len(service)<2:
retrieveurl = 'https://domain.worketc.com/xml/' + service[0] + '?VeetroSession=' + sessionkey
else:
retrieveurl = 'https://domain.worketc.com/xml/' + service[0,1,2] + '?VeetroSession=' + sessionkey
except TypeError as err:
print 'Type Error, which means arguments are wrong (or wrong implementation)'
print 'Quitting..'
sys.exit()
try:
responsefile = urllib2.urlopen(retrieveurl)
except urllib2.HTTPError as err:
if err.code == 500:
print 'Internal Server Error: Permission Denied or Object (Service) Does Not Exist'
print 'Quitting..'
sys.exit()
elif err.code == 404:
print 'Wrong URL!'
print 'Quitting..'
sys.exit()
else:
raise
try:
f = open("ExportFolder/worketcdata.xml",'wb')
for line in responsefile:
f.write(line)
f.close()
print 'File has been saved into: ExportFolder'
except (RuntimeError,UnboundLocalError):
print 'Could not write into the file'
client = workEtcUniversal('https://domain.worketc.com/xml/AuthenticateWebSafe?email=')
client.authenticate(email, password)
将xml.etree.ElementTree作为ET导入
导入urllib2
导入系统
电子邮件email@domain.co.uk'
密码='pass'
#服务='GetEmployee?EntityID=1658'
#服务='GetEntryID?EntryID=23354'
#服务=['GetAllCurrencesWebSafe']
#服务=['GetEntryID','EntryID=23354']
服务=['GetDraftTimesheets','2005-08-15T15:52:01+00:00','2014-08-15T15:52:01+00:00']
类workEtcUniversal():
sessionkey=None
定义初始化(self,url):
如果url中不是“http://”,而url中不是“https://”:
url=“http://%s”%url
self.base_url=url
其他:
self.base_url=url
def身份验证(自我、用户、密码):
尝试:
loginurl=self.base_url+email+'&pass='+密码
req=urlib2.Request(loginurl)
响应=urllib2.urlopen(请求)
页面=response.read()
root=ET.fromstring(页面)
sessionkey=root[1]。文本
打印“身份验证成功!”
尝试:
f=自助服务(sessionkey,service)
除运行时错误外:
打印“未执行功能!”
除运行时错误外:
打印“登录或调用服务方法时出错!”
def服务(自助、会话密钥、服务):
尝试:
如果len(service)编写代码使用API需要解决几个问题:
- API上有哪些方法可用(获取它们的名称列表)
- 对这种方法的请求是什么样子的(找出url、要使用的HTTP方法、对正文的要求(如果使用的话)、预期的标题是什么)
- 如何构建所有部件以提出请求
有哪些方法可用
列出了其中的许多
请求看起来如何
GetDraftTimesheet在这里描述
它希望您创建以下HTTP请求:
POST /xml HTTP/1.1
Host: admin.worketc.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://schema.veetro.com/GetDraftTimesheets"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetDraftTimesheets xmlns="http://schema.veetro.com">
<arg>
<FromUtc>dateTime</FromUtc>
<ToUtc>dateTime</ToUtc>
</arg>
</GetDraftTimesheets>
</soap:Body>
</soap:Envelope>
POST/xml HTTP/1.1
主持人:admin.worketc.com
内容类型:text/xml;字符集=utf-8
内容长度:长度
SOAPAction:“http://schema.veetro.com/GetDraftTimesheets"
“同一服务有一套不同的方法:
- 肥皂1.1
- 肥皂1.2
- HTTP获取
- HTTP POST
根据您的喜好,选择一个适合您的需求
最简单的是HTTP GET
对于HTTP请求,我建议您使用请求
,这非常容易使用,如果您完成了教程,您将理解我的意思。谢谢您的及时回复!我只是想知道。我能不能在文本编辑器中创建一个与此完全相同的XML文件,然后使用它?@serg553是的,您可以使用XML在编辑器中创建。但如果要传入一些参数,则必须更改每个请求的xml。请注意,上面的xml应将“dateTime”的值更新为类似于“2014-06-24T12:01:22”的值(查看API文档,但可能允许XSD typeXSD:dateTime
)。