Failed to parse JSON response using Python

202 views Asked by At

I am trying to automate export of Amplitude reports and then adding them in G-Spreadsheets using Python but I am getting the below error:

Error: Failed to parse JSON response: Expecting value: line 1 column 1 (char 0)
Failed to fetch data for [RAW] Amplitude Totals - Viewed (.*) Page
Error: Failed to parse JSON response: Expecting value: line 1 column 1 (char 0)
Failed to fetch data for [RAW] Amplitude Totals - Viewed Product Page
Error: Failed to parse JSON response: Expecting value: line 1 column 1 (char 0)
Failed to fetch data for [RAW] Amplitude Totals - Product Added
Error: Failed to parse JSON response: Expecting value: line 1 column 1 (char 0)
Failed to fetch data for [RAW] Amplitude Totals - Checkout Started
Error: Failed to parse JSON response: Expecting value: line 1 column 1 (char 0)
Failed to fetch data for [RAW] Amplitude Totals - Order Completed

I have been trying to make the code work but unfortunately I am stuck at the above error. What am I doing wrong here? Below is the code:

import requests
import base64
import gspread
from google.oauth2 import service_account
import json


def fetch_amplitude_data(api_key, secret_key, start_time, end_time, report_url):
    url = report_url
    params = {
        'start': start_time,
        'end': end_time
    }
    credentials = f"{api_key}:{secret_key}"
    encoded_credentials = base64.b64encode(credentials.encode('utf-8')).decode('utf-8')
    headers = {
        'Authorization': f'Basic {encoded_credentials}'
    }

    response = response = requests.get(url + '?format=json', params=params, headers=headers)


    if response.status_code == 200:
        try:
            data = response.json()
            return data
        except json.decoder.JSONDecodeError as e:
            print(f"Error: Failed to parse JSON response: {e}")
            return None
    else:
        print(f"Error: Failed to fetch data from Amplitude. Status code: {response.status_code}")
        return None


api_key = ''
secret_key = ''
start_time = '2023-04-01T00:00:00Z'
end_time = '2023-05-16T23:59:59Z'

report_urls = [
    'https://analytics.amplitude.com/magbak/chart/new/coqje4ni',
    'https://analytics.amplitude.com/magbak/chart/new/uxszho05',
    'https://analytics.amplitude.com/magbak/chart/new/edf4hjtn',
    'https://analytics.amplitude.com/magbak/chart/new/vxed7m7e',
    'https://analytics.amplitude.com/magbak/chart/new/mpe5vnf0'
]

tab_names = [
    '[RAW] Amplitude Totals - Viewed (.*) Page',
    '[RAW] Amplitude Totals - Viewed Product Page',
    '[RAW] Amplitude Totals - Product Added',
    '[RAW] Amplitude Totals - Checkout Started',
    '[RAW] Amplitude Totals - Order Completed'
]

scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
credentials = service_account.Credentials.from_service_account_file('C:/Users/Administrator/Downloads/second-caster-373808-fcf096bc469f.json.', scopes=scope)

client = gspread.authorize(credentials)

spreadsheet = client.open('[MagBak GP Pixel vs MagBak Native Pixel] Audit (April 18, 2023 - May 15, 2023) ')

for i, report_url in enumerate(report_urls):
    amplitude_data = fetch_amplitude_data(api_key, secret_key, start_time, end_time, report_url)
    if amplitude_data is not None:
        # Select the respective tab
        tab = spreadsheet.worksheet(tab_names[i])

        # Clear existing data in the tab
        tab.clear()

        # Update the tab with the fetched data
        tab.update([amplitude_data])
        print(f"Data updated in {tab_names[i]}")
    else:
        print(f"Failed to fetch data for {tab_names[i]}")

Any help would be appreciated. THANKS!

1

There are 1 answers

0
Asas do Desconto On

You have a extra period here: "C:/Users/Administrator/Downloads/second-caster-373808-fcf096bc469f.json."

Verify if is that the cause