WorkEtc API Python脚本

WorkEtc API Python脚本,python,xml,json,api,Python,Xml,Json,Api,我正在尝试用Python编写一个通用脚本,任何人都可以使用它从Etc CRM平台导入/导出各种信息。这里有所有文档: 然而,我现在有点卡住了。身份验证有效,我可以调用不同的API方法,但只能调用没有参数的方法。我是Python新手,这就是为什么我不知道如何将参数传递到API中的特定方法上。具体来说,我需要导出所有时间表。我正在尝试专门调用此方法:。由于明显的原因,我无法透露登录信息,因此可能有点难以为您测试 守则本身: import xml.etree.ElementTree as ET imp

我正在尝试用Python编写一个通用脚本,任何人都可以使用它从Etc CRM平台导入/导出各种信息。这里有所有文档:

然而,我现在有点卡住了。身份验证有效,我可以调用不同的API方法,但只能调用没有参数的方法。我是Python新手,这就是为什么我不知道如何将参数传递到API中的特定方法上。具体来说,我需要导出所有时间表。我正在尝试专门调用此方法:。由于明显的原因,我无法透露登录信息,因此可能有点难以为您测试

守则本身:

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 type
XSD:dateTime
)。