Files
test/test.py
2025-11-27 22:25:36 +00:00

438 lines
16 KiB
Python

import requests
import json
# 1. Create a session object
session = requests.Session()
# 2. Set the User-Agent for the session
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36"
session.headers.update({'User-Agent': user_agent})
# 3. Define and add cookies to the session
cookies_to_add = [
("SID", "g.a000vwi83sZx47d1q9Po8BgPR3jBX7lpsrzWSuPIKyp6RycUEctVzyy0oo1gNvQbwZa53AWllwACgYKAVQSARMSFQHGX2MiUpZ3JZlRTzUS5L-5fPmgpBoVAUF8yKprZzPlNM_X83070Ct35bq_0076", "/", ".google.com"),
("__Secure-1PSID", "g.a000vwi83sZx47d1q9Po8BgPR3jBX7lpsrzWSuPIKyp6RycUEctVKNqZm8qWU9ZC2DlRVPn0igACgYKAfQSARMSFQHGX2MiYGW66m_L_p1vlqiuEg-IrxoVAUF8yKrgRbA9tcA4VinZix0qlexX0076", "/", ".google.com"),
("__Secure-3PSID", "g.a000vwi83sZx47d1q9Po8BgPR3jBX7lpsrzWSuPIKyp6RycUEctVnGF-cJAl9Wr1rJ-NOCW63wACgYKAZASARMSFQHGX2Mi1gYcRRnI8v2AdvofwvFG5BoVAUF8yKooSw-opCZ1-vxmkQXCB7330076", "/", ".google.com"),
("HSID", "AJifEcy5MKbQSoqIz", "/", ".google.com"),
("SSID", "AB87p4RIXK_USto4D", "/", ".google.com"),
("APISID", "fQw9oTJbNnptFKdr/AIXxJuvoAk3qrIeWi", "/", ".google.com"),
("SAPISID", "3zFHAXrGoL_XNe0X/A7AafTXBL2NRj7N2h", "/", ".google.com"),
("__Secure-1PAPISID", "3zFHAXrGoL_XNe0X/A7AafTXBL2NRj7N2h", "/", ".google.com"),
("__Secure-3PAPISID", "3zFHAXrGoL_XNe0X/A7AafTXBL2NRj7N2h", "/", ".google.com"),
("AEC", "AVcja2e2MbzHDDL2yqJDMgUeDL-S3BEFB_yK293aRhQwshqv22Bd7IQ9mvg", "/", ".google.com"),
("NID", "523=SVwTZRVo9GJ5sSI0guSXNWwegQ7YY0h597wyCkrqkuIRMnQqpH3qrPA0SGB77KF69ibosOMUd-VNbNg1R7TXjPYFxYTUTP0uLtg41CaQctv6j1NKBaVPJoUkK3wzQ1e3l5yGsfBwGtypz5vxHP6yeyRtVWmYSiDiHr7AN1dKYXwzVVi7Dp8bvtppEAwUX7dQCqQ-4qGlHcoMW44STYwNELgd6CVXWPIhypl4qx_Wwcv7sY3GGP04s2kb0ljX7rYXKagj_Uv3xJDujDa4XUTAJKficyiWOrZT5LpeewUp1Kt5RyEBH2U7IHocmsWC6lfAKsoIt21wc1QwYioj9XkIIasJ4tCu1F7yXHjrglyGwbe5i67stMHI2FL3KXdoxe3ly_MORZWlVNM1Co7W43Rab01HMj2Ad940eXU9aV1PVzwlTtqiF0R0gLO_ubD6kykDRVMVMdMjMapz_dgIUfbkGMluSVykNRKnO7yf_rS7DKjXZXsh18UEsLcz6WjKtEYgmvm51MdH2JN5dcElSK_SWxrejJl-UW_eT_EqUQaeCtK2N7dTMFT38PGAkZFEKCvMqpjU86iLbFbmq_lKT-dm6IjIxFXj8yv652EYoCBlS3MsTjaQWP4_yRJa3oWhnB1kgwiBgBVmidRShZOT09L77WL6jVKE6YE09QrjGnoH_RjZFTwwGiuSFCLKfz9SwVsJBNV-nn5nZrU40kWmlhnfBNY3Kphq0fwO9RQ6wvzMAGzz684-kxzePSX3CgA74-rppEZrkXFMFjSaZGE-D7NAQp1qD2ez0-H2n0OXbRaLDN7JXn9fqhZu_FwvHJGfTBPZOZnk7taSnZSipmFU8gsTRQSVdFX6SlCXGpKueSRjhho", "/", ".google.com"),
("S", "maestro=IUwVdLn0rPZ27SY26uYPEonS9u1J9oQi8YzVJpqIc-w", "/", ".google.com"),
("__Secure-1PSIDTS", "sidts-CjIB7pHptaI1HakO1xLmYgvHilIKZJuufs1na9HjqCHJL13_z6LJNW13liGWofxE3NQ-NxAA", "/", ".google.com"),
("__Secure-3PSIDTS", "sidts-CjIB7pHptaI1HakO1xLmYgvHilIKZJuufs1na9HjqCHJL13_z6LJNW13liGWofxE3NQ-NxAA", "/", ".google.com"),
("_gid", "GA1.3.1639311329.1744393279", "/", ".lookerstudio.google.com"), # Different domain
("_ga", "GA1.1.1275703331.1743917675", "/", ".lookerstudio.google.com"), # Different domain
("_ga_LPCKLD3Z7X", "GS1.1.1744393286.6.0.1744393286.0.0.0", "/", ".lookerstudio.google.com"), # Different domain
("RAP_XSRF_TOKEN", "AImk1AJGP3sIKZ7N5-RA2jKHcJ0jdpxGKw:1744393288187", "/", "lookerstudio.google.com"), # Different domain (no leading dot)
("_gat", "1", "/", ".lookerstudio.google.com"), # Different domain
("SIDCC", "AKEyXzW9xrpFKS4Ox9-THfQ3DfB62JRx-bxxg0ZEiKYze2jaerhvWrVMFVCyjTjxIJfOhCOKQw4", "/", ".google.com"),
("__Secure-1PSIDCC", "AKEyXzXdMIev0GvM5xA0kMifj4jnuGZYNiob-2fJssX_jTBlwE8M4Bm9edS4J_i7UTSMFFEbCIm_", "/", ".google.com"),
("__Secure-3PSIDCC", "AKEyXzU8YysnVlR_9UcCx2GFo5hIUNPh6OqSCRE6Fpo9y12BNmobniOBCjTZc1_qHTS6VnivWX25", "/", ".google.com"),
("_ga_S4FJY0X3VX", "GS1.1.1744393279.7.1.1744393369.0.0.0", "/", ".lookerstudio.google.com") # Different domain
]
for name, value, path, domain in cookies_to_add:
session.cookies.set(name=name, value=value, path=path, domain=domain)
# 4. Define the Target URL
url = "https://lookerstudio.google.com/batchedDataV2?appVersion=20250324_0406"
# 5. Define Headers (User-Agent and Cookies are handled by the session)
headers = {
"authority": "lookerstudio.google.com",
"accept": "application/json, text/plain, */*",
"accept-encoding": "gzip, deflate, br, zstd", # requests usually handles this, but specifying can be safer
"accept-language": "en-US,en;q=0.9",
"cache-control": "no-cache",
# "encoding": "null", # This header seems unusual/invalid for requests, omitting
"origin": "https://lookerstudio.google.com",
"pragma": "no-cache",
"priority": "u=1, i",
"referer": "https://lookerstudio.google.com/reporting/1413fcfb-1416-4e56-8967-55f8e9f30ec8/page/p_pbm4eo88qc",
"sec-ch-ua": '"Google Chrome";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"x-client-data": "CIS2yQEIorbJAQipncoBCMHbygEIk6HLAQiFoM0BCP6lzgEIvdXOAQjJ4M4BCIbizgEIu+fOAQjS6M4BCKzpzgE=",
"x-rap-xsrf-token": "AImk1AJGP3sIKZ7N5-RA2jKHcJ0jdpxGKw:1744393288187",
# Content-Type will be set automatically by requests when using json=payload
}
# 6. Define the JSON Body (Payload)
# Use triple quotes for the multi-line string and parse it with json.loads
body_string = """
{
"dataRequest": [
{
"requestContext": {
"reportContext": {
"reportId": "1413fcfb-1416-4e56-8967-55f8e9f30ec8",
"pageId": "p_pbm4eo88qc",
"mode": 1,
"componentId": "cd-rdkny9a9qc",
"displayType": "simple-table",
"actionId": "crossFilters"
},
"requestMode": 0
},
"datasetSpec": {
"dataset": [
{
"datasourceId": "c2fc8cdd-46bb-454c-bf09-90ebfd4067d7",
"revisionNumber": 0,
"parameterOverrides": []
}
],
"queryFields": [
{
"name": "qt_3nwfu9yq1c",
"datasetNs": "d0",
"tableNs": "t0",
"resultTransformation": {
"analyticalFunction": 0,
"isRelativeToBase": false
},
"dataTransformation": {
"sourceFieldName": "_Event_Id_"
}
},
{
"name": "qt_8yjok4izsc",
"datasetNs": "d0",
"tableNs": "t0",
"resultTransformation": {
"analyticalFunction": 0,
"isRelativeToBase": false
},
"dataTransformation": {
"sourceFieldName": "_DateTime_EST_"
}
},
{
"name": "qt_sfkc163arc",
"datasetNs": "d0",
"tableNs": "t0",
"dataTransformation": {
"sourceFieldName": "_KYTC_Type_"
}
},
{
"name": "qt_4e66idhbrc",
"datasetNs": "d0",
"tableNs": "t0",
"dataTransformation": {
"sourceFieldName": "_Incident_Source_"
}
},
{
"name": "qt_re76qrqe2c",
"datasetNs": "d0",
"tableNs": "t0",
"dataTransformation": {
"sourceFieldName": "_District_",
"aggregation": 0
}
},
{
"name": "qt_tfkc163arc",
"datasetNs": "d0",
"tableNs": "t0",
"dataTransformation": {
"sourceFieldName": "_County_Name_"
}
},
{
"name": "qt_ufkc163arc",
"datasetNs": "d0",
"tableNs": "t0",
"dataTransformation": {
"sourceFieldName": "_Route_Label_"
}
},
{
"name": "qt_vfkc163arc",
"datasetNs": "d0",
"tableNs": "t0",
"dataTransformation": {
"sourceFieldName": "_BMP_Initial_"
}
},
{
"name": "qt_o7kc163arc",
"datasetNs": "d0",
"tableNs": "t0",
"dataTransformation": {
"sourceFieldName": "_EMP_Initial_"
}
},
{
"name": "qt_p7kc163arc",
"datasetNs": "d0",
"tableNs": "t0",
"dataTransformation": {
"sourceFieldName": "_Description_"
}
}
],
"sortData": [
{
"sortColumn": {
"name": "qt_8yjok4izsc",
"datasetNs": "d0",
"tableNs": "t0",
"dataTransformation": {
"sourceFieldName": "_DateTime_EST_"
}
},
"sortDir": 1
}
],
"includeRowsCount": true,
"relatedDimensionMask": {
"addDisplay": false,
"addUniqueId": false,
"addLatLong": false
},
"paginateInfo": {
"startRow": 1,
"rowsCount": 50
},
"dsFilterOverrides": [],
"filters": [
{
"filterDefinition": {
"filterExpression": {
"include": false,
"conceptType": 0,
"concept": {
"ns": "t0",
"name": "qt_exs3vib9qc"
},
"filterConditionType": "PT",
"stringValues": [
"Shoulder"
],
"numberValues": [],
"queryTimeTransformation": {
"dataTransformation": {
"sourceFieldName": "_Source_Type_"
}
}
}
},
"dataSubsetNs": {
"datasetNs": "d0",
"tableNs": "t0",
"contextNs": "c0"
},
"version": 3
},
{
"filterDefinition": {
"filterExpression": {
"include": true,
"conceptType": 0,
"concept": {
"name": "qt_kjyfx83arc",
"ns": "t0"
},
"queryTimeTransformation": {
"dataTransformation": {
"sourceFieldName": "_County_Name_"
}
},
"filterConditionType": "IN",
"stringValues": [
"Boyd",
"Carter",
"Greenup"
]
}
},
"dataSubsetNs": {
"datasetNs": "d0",
"tableNs": "t0",
"contextNs": "c0"
},
"version": 3,
"isCanvasFilter": true
}
],
"features": [],
"dateRanges": [],
"contextNsCount": 1,
"calculatedField": [],
"needGeocoding": false,
"geoFieldMask": [],
"multipleGeocodeFields": [],
"timezone": "America/New_York"
},
"role": "main",
"retryHints": {
"useClientControlledRetry": true,
"isLastRetry": false,
"retryCount": 0,
"originalRequestId": "cd-rdkny9a9qc_0_0"
}
},
{
"requestContext": {
"reportContext": {
"reportId": "1413fcfb-1416-4e56-8967-55f8e9f30ec8",
"pageId": "p_pbm4eo88qc",
"mode": 1,
"componentId": "cd-hgodhfhbrc",
"displayType": "dimension-filter",
"actionId": "crossFilters"
},
"requestMode": 7
},
"datasetSpec": {
"dataset": [
{
"datasourceId": "c2fc8cdd-46bb-454c-bf09-90ebfd4067d7",
"revisionNumber": 0,
"parameterOverrides": []
}
],
"queryFields": [
{
"name": "qt_vwmdhfhbrc",
"datasetNs": "d0",
"tableNs": "t0",
"dataTransformation": {
"sourceFieldName": "_Incident_Source_"
}
},
{
"name": "qt_d5jjfyu6wc",
"datasetNs": "d0",
"tableNs": "t0",
"dataTransformation": {
"sourceFieldName": "datastudio_record_count_system_field_id_98323387"
}
}
],
"sortData": [
{
"sortColumn": {
"name": "qt_vwmdhfhbrc",
"datasetNs": "d0",
"tableNs": "t0",
"dataTransformation": {
"sourceFieldName": "_Incident_Source_"
}
},
"sortDir": 0
}
],
"includeRowsCount": true,
"relatedDimensionMask": {
"addDisplay": false,
"addUniqueId": false,
"addLatLong": false
},
"paginateInfo": {
"startRow": 1,
"rowsCount": 5001
},
"dsFilterOverrides": [],
"filters": [
{
"filterDefinition": {
"filterExpression": {
"include": true,
"conceptType": 0,
"concept": {
"name": "qt_kjyfx83arc",
"ns": "t0"
},
"queryTimeTransformation": {
"dataTransformation": {
"sourceFieldName": "_County_Name_"
}
},
"filterConditionType": "IN",
"stringValues": [
"Boyd",
"Carter",
"Greenup"
]
}
},
"dataSubsetNs": {
"datasetNs": "d0",
"tableNs": "t0",
"contextNs": "c0"
},
"version": 3,
"isCanvasFilter": true
}
],
"features": [],
"dateRanges": [],
"contextNsCount": 1,
"dateRangeDimensions": [
{
"name": "qt_ilkdhfhbrc",
"datasetNs": "d0",
"tableNs": "t0",
"dataTransformation": {
"sourceFieldName": "_Incident_Begin_Time_",
"transformationConfig": {
"transformationType": 5
}
}
}
],
"calculatedField": [],
"needGeocoding": false,
"geoFieldMask": [],
"multipleGeocodeFields": [],
"timezone": "America/New_York"
},
"role": "main",
"retryHints": {
"useClientControlledRetry": true,
"isLastRetry": false,
"retryCount": 0,
"originalRequestId": "cd-hgodhfhbrc_0_0"
}
}
]
}
"""
payload = json.loads(body_string)
# 7. Send the POST request using the session
try:
print(f"Sending POST request to {url}...")
response = session.post(url, headers=headers, json=payload)
# Raise an exception for bad status codes (4xx or 5xx)
response.raise_for_status()
# 8. Process the response
print(f"Status Code: {response.status_code}")
# Attempt to print the response as JSON, fall back to text if decoding fails
try:
print(response.text)
print("Response JSON:")
# Use json.dumps for pretty printing the received JSON
print(json.dumps(response.json(), indent=2))
except json.JSONDecodeError:
print("Response Text (non-JSON):")
print(response.text)
except requests.exceptions.RequestException as e:
print(f"An error occurred during the request: {e}")
if hasattr(e, 'response') and e.response is not None:
print(f"Response status code: {e.response.status_code}")
print(f"Response text: {e.response.text}")