Forum Discussion
DavidChoi
7 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
------------------------------