GET or POST /search requests
GET
Use get_search.py to test GET requests with /search. This script saves results and match count to a file.
#!/usr/bin/env python
#
# Copyright 2017 Voci Technologies All rights reserved.
# Unsupported example code - Not for production use.
#
import requests
import json
import urllib2
def usage(argv):
print "Usage:", argv[0], "<sparkhost:port> <root token> <company> <params>"
exit(1)
def main(argv):
if len(argv) != 5: usage(argv)
host, token, company, searchparams = argv[1:]
tokens = gettokens(host,token)
folderinfo = getfolderinfo(host,token)
findfolders(host, folderinfo, tokens, company, searchparams)
def gettokens(host, token):
url = "http://%s/config?token=%s" % (host,token)
cfg = requests.get(url).json()
return dict([(comp,d['uuid']) for comp,d in cfg.iteritems()])
def getfolderinfo(host, token):
url = "http://%s/config/folders?token=%s" % (host,token)
return requests.get(url).json()
def findfolders(host, folder_info, tokens, company, searchparams):
for comp, comp_data in folder_info.iteritems():
if comp == company:
print "Searching folders under "+company+" (Token: "+tokens[comp]+")"
for org, org_data in comp_data.iteritems():
for folder, folder_data in org_data.iteritems():
searchandprintresults(host, tokens[comp], comp, org, folder, \
searchparams)
def searchandprintresults(host, token, comp, org, folder, searchparams):
url = "http://%s/search/%s/%s/%s?token=%s%s" % (host, comp, org, folder, token, searchparams)
response = requests.get(url)
if response.status_code == 200:
print " URL is "+url
counturl = url+"&output=count"
countresponse = requests.get(counturl)
OUTPUT_FILE = comp+"-"+org+"-"+folder+"-search.json"
print " Writing Matching JSON for "+countresponse.text+" matches to "+OUTPUT_FILE
target = open(OUTPUT_FILE, 'w')
data = json.load(urllib2.urlopen(url))
target.write(json.dumps(data, indent=4, sort_keys=True))
target.close()
if __name__ == '__main__':
from sys import argv
main(argv)This example command uses get_search.py to search DocTestCo for all records with a positive client emotion value.
python get_search.py example.company.com $token DocTestCo '&client_emotion=positive'
get_search.py saves output to a file like the next example.
Searching folders under DocTestCo (Token: $token)
URL is http://example.company.com/search/DocTestCo/DocTestCo-DocTesting/Test01?token=$token&client_emotion=positive
Writing Matching JSON for 4 matches to DocTestCo-DocTestCo-DocTesting-Test01-log.json
POST
Use post_search.py to test POST requests with /search. This script saves results and match count to a file.
#!/usr/bin/env python
#
# Copyright 2017 Voci Technologies All rights reserved.
# Unsupported example code - Not for production use.
#
import requests
import json
import urllib2
def usage(argv):
print "Usage:", argv[0], "<sparkhost:port> <root token> <company> <JSON-params-file>"
exit(1)
def main(argv):
if len(argv) != 5: usage(argv)
host, token, company, searchparamfile = argv[1:]
tokens = gettokens(host,token)
folderinfo = getfolderinfo(host,token)
findfolders(host, folderinfo, tokens, company, searchparamfile)
def gettokens(host, token):
url = "http://%s/config?token=%s" % (host,token)
cfg = requests.get(url).json()
return dict([(comp,d['uuid']) for comp,d in cfg.iteritems()])
def getfolderinfo(host, token):
url = "http://%s/config/folders?token=%s" % (host,token)
return requests.get(url).json()
def findfolders(host, folder_info, tokens, company, searchparamfile):
for comp, comp_data in folder_info.iteritems():
if comp == company:
print "Searching folders under "+company+" (Token: "+tokens[comp]+")"
for org, org_data in comp_data.iteritems():
for folder, folder_data in org_data.iteritems():
searchandprintresults(host, tokens[comp], comp, org, folder,
searchparamfile)
def searchandprintresults(host, token, comp, org, folder, searchparamfile):
url = "http://%s/search/%s/%s/%s?token=%s" % (host, comp, org, folder, token)
with open(searchparamfile) as json_file:
param_data = json.load(json_file)
header = {'Content-type': 'application/json'}
response = requests.post(url, data=json.dumps(param_data), headers=header)
if response.status_code == 200:
print " URL is "+url
param_data["output"] = "count".decode('utf-8')
countresponse = requests.post(url, data=json.dumps(param_data), headers=header)
OUTPUT_FILE = comp+"-"+org+"-"+folder+"-post-search.json"
print " Writing Matching JSON for "+countresponse.text+" matches to "+OUTPUT_FILE
with open(OUTPUT_FILE, mode='wb') as localfile:
localfile.write(response.content)
localfile.close()
if __name__ == '__main__':
from sys import argv
main(argv)This example command uses post_search.py to search DocTestCo for all records that match the search terms defined in params.json.
python post_search.py example.company.com $token DocTestCo params.json
post_search.py saves output to a file like the next example.
Searching folders under DocTestCo (Token: $token)
URL is http://example.company.com/search/DocTestCo/DocTestCo-DocTesting/Test01?token=$token
Writing Matching JSON for 4 matches to DocTestCo-DocTestCo-DocTesting-Test01-search.json
