Christian W.
06/22/2024, 8:30 PMChristian W.
06/23/2024, 12:18 PMimport requests
import json
import pandas as pd
from pymongo import MongoClient, UpdateOne
from oauthlib import oauth1
from requests_oauthlib import OAuth1Session
# MongoDB Atlas credentials
...
def parse_suiteql_response(response):
response_json = json.loads(response.text)
items = response_json['items']
offset = response_json['offset']
count = response_json['count']
total = response_json['totalResults']
if response_json["hasMore"]:
next_link = next(link for link in response_json["links"] if link["rel"] == "next")["href"]
else:
next_link = None
return items, offset, count, total, next_link
def run_suiteql_query(query):
client = OAuth1Session(
client_secret="..",
client_key="..",
resource_owner_key="..",
resource_owner_secret="..",
realm="..",
signature_method=oauth1.SIGNATURE_HMAC_SHA256
)
url_account = ".."
url = f"https://{url_account}.<http://suitetalk.api.netsuite.com/services/rest/query/v1/suiteql|suitetalk.api.netsuite.com/services/rest/query/v1/suiteql>"
headers = {
"Prefer": "transient",
"Content-Type": "application/json"
}
body = json.dumps({"q": query})
data = []
while True:
response = <http://client.post|client.post>(url=url, data=body, headers=headers)
try:
response.raise_for_status()
except requests.exceptions.HTTPError as e:
raise Exception(f"SuiteQL request failed. {e}. Response Body: {response.text}")
items, offset, count, total, next_link = parse_suiteql_response(response)
print(f"Retrieved {offset + count} of {total} results")
data = data + items
if next_link:
url = next_link
else:
break
return data
.....
Marcos Lopez
06/26/2024, 3:46 PM