File size: 3,775 Bytes
a207b64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import streamlit as st
import gspread
from google.oauth2.service_account import Credentials
import pandas as pd

def CreatePage():
    st.header("View & Download Results")

    if "results" in st.session_state and st.session_state["results"]:
        results_df = pd.DataFrame(st.session_state["results"])
        st.write("### Results Preview")

        # Display the results preview
        if "Extracted Information" in results_df.columns and "Search Results" in results_df.columns:
            st.dataframe(results_df.style.map(lambda val: 'background-color: #d3f4ff' if isinstance(val, str) else '', subset=["Extracted Information", "Search Results"]))
        else:
            st.warning("Required columns are missing in results data.")

        # Download options
        download_option = st.selectbox(
            "Select data to download:",
            ["All Results", "Extracted Information", "Web Results"]
        )

        if download_option == "All Results":
            data_to_download = results_df
        elif download_option == "Extracted Information":
            data_to_download = results_df[["Entity", "Extracted Information"]]
        elif download_option == "Web Results":
            data_to_download = results_df[["Entity", "Search Results"]]

        st.download_button(
            label=f"Download {download_option} as CSV",
            data=data_to_download.to_csv(index=False),
            file_name=f"{download_option.lower().replace(' ', '_')}.csv",
            mime="text/csv"
        )

        # Option to update Google Sheets
        update_option = st.selectbox(
            "Do you want to update Google Sheets?",
            ["No", "Yes"]
        )

        if update_option == "Yes":
            if 'sheet_id' not in st.session_state:
                st.session_state.sheet_id = ''
            if 'range_name' not in st.session_state:
                st.session_state.range_name = ''

            # Input fields for Google Sheets ID and Range
            sheet_id = st.text_input("Enter Google Sheet ID", value=st.session_state.sheet_id)
            range_name = st.text_input("Enter Range (e.g., 'Sheet1!A1')", value=st.session_state.range_name)

            if sheet_id and range_name:
                st.session_state.sheet_id = sheet_id
                st.session_state.range_name = range_name

                # Prepare data for update
                data_to_update = [results_df.columns.tolist()] + results_df.values.tolist()

                # Update Google Sheets button
                if st.button("Update Google Sheet"):
                    try:
                        if '!' not in range_name:
                            st.error("Invalid range format. Please use the format 'SheetName!Range'.")
                        else:
                            sheet_name, cell_range = range_name.split('!', 1) 
                            scopes = ["https://www.googleapis.com/auth/spreadsheets"]
                            creds = Credentials.from_service_account_file("/Users/sam22ridhi/Desktop/data/DataScribe/credentials/credentials.json", scopes=scopes)
                            client = gspread.authorize(creds)
                            sheet = client.open_by_key(sheet_id).worksheet(sheet_name)
                            sheet.clear()
                            sheet.update(f"{cell_range}", data_to_update)
                            st.success("Data updated in the Google Sheet!")
                    except Exception as e:
                        st.error(f"Error updating Google Sheet: {e}")
            else:
                st.warning("Please enter both the Sheet ID and Range name before updating.")
    else:
        st.warning("No results available to view. Please run the extraction process.")