Hi All
I'm trying to use this function to search for bugs online
def bug_search():
url = r"https://esearchapi.esri.com/search"
data = {
"num": 15,
"client": "support_all",
"start": 0,
"site": "support_bug_articles",
"format": "json",
"len": 100,
"lr": "en",
"index": "support_all",
"_source": {
"excludes": [
"content",
"meta",
"connectorSpecific"
]
},
"q": "",
"sort": "metaFields.date-sort:D",
"partialfields": "version:11%2E3"
}
response = requests.post(url=url, data=json.dumps(data))
1. It only returns 10 hits in the response
2. The response seems to be ignoring the offset value
3. There is a lot of non English language in the response even though "lr" = "en".
Can anyone point me in the right direction to properly query this api?
Solved! Go to Solution.
I got it working by using a session in python.
def bug_search(max_return = 20):
url = r"https://esearchapi.esri.com/search"
MAX_PAGE_LEN = 5
results = []
session = requests.Session()
headers = {
"Accept": "application/json, text/plain, */*",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "en-US,en;q=0.9,en-AU;q=0.8",
"Origin": "https://support.esri.com",
"Referer": "https://support.esri.com/",
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-site",
"sec-ch-ua": '"Microsoft Edge";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"'
}
session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0"
})
for offset in range(0, max_return, MAX_PAGE_LEN):
if offset + MAX_PAGE_LEN > max_return:
offset = max_return - MAX_PAGE_LEN
data = {
"num": MAX_PAGE_LEN,
"client": "support_all",
"start": offset,
"site": "support_bug_articles",
"format": "json",
"len": max_return,
"lr": "en",
"index": "support_all",
"_source": {
"excludes": [
"content",
"meta",
"connectorSpecific"
]
},
"q": "",
"sort": "metaFields.date-sort:D",
"partialfields": "version:11%2E3"
}
response = session.post(url, headers=headers, json=data)
hits = response.json()["search"]["hits"]
results.extend([json.dumps(i) for i in hits])
results = [json.loads(i) for i in set(results)]
return results
I got it working by using a session in python.
def bug_search(max_return = 20):
url = r"https://esearchapi.esri.com/search"
MAX_PAGE_LEN = 5
results = []
session = requests.Session()
headers = {
"Accept": "application/json, text/plain, */*",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "en-US,en;q=0.9,en-AU;q=0.8",
"Origin": "https://support.esri.com",
"Referer": "https://support.esri.com/",
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-site",
"sec-ch-ua": '"Microsoft Edge";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"'
}
session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0"
})
for offset in range(0, max_return, MAX_PAGE_LEN):
if offset + MAX_PAGE_LEN > max_return:
offset = max_return - MAX_PAGE_LEN
data = {
"num": MAX_PAGE_LEN,
"client": "support_all",
"start": offset,
"site": "support_bug_articles",
"format": "json",
"len": max_return,
"lr": "en",
"index": "support_all",
"_source": {
"excludes": [
"content",
"meta",
"connectorSpecific"
]
},
"q": "",
"sort": "metaFields.date-sort:D",
"partialfields": "version:11%2E3"
}
response = session.post(url, headers=headers, json=data)
hits = response.json()["search"]["hits"]
results.extend([json.dumps(i) for i in hits])
results = [json.loads(i) for i in set(results)]
return results