Forum Discussion
DavidChoi
6 years agoQrew Trainee
I know that this is old...but I got here from a Google search for simple example so I wanted to help the next guy/gal out. Here is my "simplest example."
------------------------------
David Choi
------------------------------
#!python3 import requests import xmltodict from xml.etree import ElementTree as et import pprint pp = pprint.PrettyPrinter(indent=2) # ----------Add your personal stuff here:----------- yourEmail = 'your@email.here' yourPassword = 'verygoodpassword' aTableID = 'xxx5yyyyy' companyURLPrefix = 'joescookies' # -------------Authenticate to get a ticket-------------- # one could use a user token here instead. headers = { "Content-Type": "application/xml", "Accept-Charset": "utf-8", "QUICKBASE-ACTION": "API_Authenticate" } # build an XML payload payload = et.Element('qdbapi') username = et.SubElement(payload, 'username') username.text = yourEmail password = et.SubElement(payload, 'password') password.text = yourPassword # hours = et.SubElement(payload, 'hours') # Optional # hours.text = '24' # Optional # make the payload ready for shipping humanPayload = et.tostring(payload) url2 = f'https://{companyURLPrefix}.quickbase.com/db/main' resp = requests.post(url2, data=humanPayload, headers=headers) # pp.pprint(vars(resp)) # Parse the response so we can pull out the ticket parsed = et.XML(resp.text) authticket = parsed.find('ticket').text # -----------Using the authticket we can actually do some work-------------- # this example is to get the API_GetDBInfo url3 = f'https://{companyURLPrefix}.quickbase.com/db/{aTableID}' headersGetDB = { "Content-Type": "application/xml", "Accept-Charset": "utf-8", "QUICKBASE-ACTION": "API_GetDBInfo" } # build another XML payload payloadGetDB = et.Element('qdbapi') ticket = et.SubElement(payloadGetDB, 'ticket') ticket.text = authticket # make the payload ready for shipping humanPayloadGetDB = et.tostring(payloadGetDB) respgetdb = requests.post(url3, data=humanPayloadGetDB, headers=headersGetDB) # print(et.XML(respgetdb.text).find('errtext').text) # this checks for the errtext # pp.pprint(vars(respgetdb)) # this pumps out the full response # This makes the response a little nicer to sort through parsedGetDB = et.XML(respgetdb.text) # This is some of the info enbedded into the XML response. parsedGetDB.find('dbname').text parsedGetDB.find('lastModifiedTime').text parsedGetDB.find('lastRecModTime').text parsedGetDB.find('createdTime').text parsedGetDB.find('numRecords').text parsedGetDB.find('mgrID').text parsedGetDB.find('mgrName').text parsedGetDB.find('time_zone').text parsedGetDB.find('version').text ā
------------------------------
David Choi
------------------------------
Udaya_NarayanaP
6 years agoQrew Member
# -----------Using the authticket we can actually do some work--------------
# this example is to get the API_GetDBInfo
url4 = f'https://{companyURLPrefix}.quickbase.com/db/{aTableID}'
headersGetDB = {
"Content-Type": "application/xml",
"Accept-Charset": "utf-8",
"QUICKBASE-ACTION": "API_GenResultsTable"
}
# build another XML payload
payloadGetDB = et.Element('qdbapi')
ticket = et.SubElement(payloadGetDB, 'ticket')
ticket.text = authticket
#print(et.tostring(payloadGetDB))
apptoken = et.SubElement(payloadGetDB, 'apptoken')
apptoken.text = 'xxxxxx'
#print(et.tostring(payloadGetDB))
qid = et.SubElement(payloadGetDB, 'qid')
#qid's are 1 & 2 & 9 for reporting list
qid.text = '9'
jht = et.SubElement(payloadGetDB, 'jht')
#qid's are 1 & 2 & 9 for reporting list
jht.text = '1'
fmt = et.SubElement(payloadGetDB, 'fmt')
fmt.text = 'structured'
#print(et.tostring(payloadGetDB))
options = et.SubElement(payloadGetDB, 'options')
options.text = 'num-4.sortorder-D'
#print(et.tostring(payloadGetDB))
#slist = et.SubElement(payloadGetDB, 'slist')
#slist.text = '7.23'
#make the payload ready for shipping
print("\n\n\n\n\n\n\n\n\n...................printing before API_GenResultsTable................\n\n\n\n\n\n\n\n\n")
humanPayloadGetDB = et.tostring(payloadGetDB)
print(humanPayloadGetDB)
pp.pprint(url4)
respgetdb = requests.post(url4, data=humanPayloadGetDB, headers=headersGetDB)
print("\n\n\n\n\n\n\n\n\nprinting API_GenResultsTable................\n\n\n\n\n\n\n\n\n")
pp.pprint(respgetdb.text)
print(et.XML(respgetdb.text).find('errtext').text) # this checks for the errtext
pp.pprint(vars(respgetdb)) # this pumps out the full response
# This makes the response a little nicer to sort through
parsedGetDB = et.XML(respgetdb.text)
# This is some of the info enbedded into the XML response.
print(parsedGetDB)
I am getting below error
------------------------------
Udaya Narayana Pakalapati
------------------------------
# this example is to get the API_GetDBInfo
url4 = f'https://{companyURLPrefix}.quickbase.com/db/{aTableID}'
headersGetDB = {
"Content-Type": "application/xml",
"Accept-Charset": "utf-8",
"QUICKBASE-ACTION": "API_GenResultsTable"
}
# build another XML payload
payloadGetDB = et.Element('qdbapi')
ticket = et.SubElement(payloadGetDB, 'ticket')
ticket.text = authticket
#print(et.tostring(payloadGetDB))
apptoken = et.SubElement(payloadGetDB, 'apptoken')
apptoken.text = 'xxxxxx'
#print(et.tostring(payloadGetDB))
qid = et.SubElement(payloadGetDB, 'qid')
#qid's are 1 & 2 & 9 for reporting list
qid.text = '9'
jht = et.SubElement(payloadGetDB, 'jht')
#qid's are 1 & 2 & 9 for reporting list
jht.text = '1'
fmt = et.SubElement(payloadGetDB, 'fmt')
fmt.text = 'structured'
#print(et.tostring(payloadGetDB))
options = et.SubElement(payloadGetDB, 'options')
options.text = 'num-4.sortorder-D'
#print(et.tostring(payloadGetDB))
#slist = et.SubElement(payloadGetDB, 'slist')
#slist.text = '7.23'
#make the payload ready for shipping
print("\n\n\n\n\n\n\n\n\n...................printing before API_GenResultsTable................\n\n\n\n\n\n\n\n\n")
humanPayloadGetDB = et.tostring(payloadGetDB)
print(humanPayloadGetDB)
pp.pprint(url4)
respgetdb = requests.post(url4, data=humanPayloadGetDB, headers=headersGetDB)
print("\n\n\n\n\n\n\n\n\nprinting API_GenResultsTable................\n\n\n\n\n\n\n\n\n")
pp.pprint(respgetdb.text)
print(et.XML(respgetdb.text).find('errtext').text) # this checks for the errtext
pp.pprint(vars(respgetdb)) # this pumps out the full response
# This makes the response a little nicer to sort through
parsedGetDB = et.XML(respgetdb.text)
# This is some of the info enbedded into the XML response.
print(parsedGetDB)
I am getting below error
print(et.XML(respgetdb.text).find('errtext').text) # this checks for the errtext
File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/xml/etree/ElementTree.py", line 1315, in XML
parser.feed(text)
xml.etree.ElementTree.ParseError: syntax error: line 1, column 0
------------------------------
Udaya Narayana Pakalapati
------------------------------