File size: 2,808 Bytes
e80e1f0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import requests
import pandas as pd
import streamlit as st
import base64
import urllib
import functions as f
from st_aggrid import AgGrid, GridUpdateMode
from st_aggrid.grid_options_builder import GridOptionsBuilder

st.title("App Store Search")

# User input
search_terms = st.text_input("Enter keyword(s) or phrase(s) to search for apps (comma-separated):")

cc, sl = st.columns((5,2))

with cc:
    country_codes = st.text_input("Enter one or more two-letter country code (e.g., 'GB' for the UK):", "GB")
with sl:
    search_limit = st.number_input("Number of results per keyword:\n\n", min_value=1, max_value=1000, value=100, step=50)

# Add rating filter slider
rating_filter = st.slider("Show apps with rating under:", min_value=0.0, max_value=5.0, value=5.0, step=0.1)

if st.button("Search"):
    if search_terms and country_codes:
        app_data = f.init_search(search_terms, country_codes, limit=search_limit)
        
        # Filter rows based on rating
        app_data = app_data[app_data['average_rating'] <= rating_filter]

        # Store the data in the session state so it doesn't get refreshed on each rerun
        st.session_state['app_data'] = app_data

if 'app_data' in st.session_state:
    gd = GridOptionsBuilder.from_dataframe(st.session_state['app_data'])
    gd.configure_selection(selection_mode='multiple', use_checkbox=True)
    gridoptions = gd.build()

    grid_table = AgGrid(st.session_state['app_data'], height=250, gridOptions=gridoptions, update_mode=GridUpdateMode.SELECTION_CHANGED)

    if st.button("Process Selected Rows"):
        selected_row_dicts = grid_table["selected_rows"]
        selected_row = pd.DataFrame(selected_row_dicts)

        if 'link' in selected_row.columns:  # Ensure 'link' column exists
            selected_row['fetch_name'], selected_row['fetch_id'] = zip(*selected_row['link'].apply(f.extract_name_id))

            apps_to_fetch = {}

            for i, data in selected_row[:10][["name", "fetch_name", "fetch_id"]].iterrows():
                apps_to_fetch[data["name"]] =  {"iOS" : {data["fetch_name"] : data["fetch_id"]},
                                    "Android": None}

            reviews = f.fetch_data(apps_to_fetch.items())

            output_data = selected_row.merge(reviews, left_on="fetch_id", right_on="app_id", how="left")
            output_data = output_data.iloc[:,1:]

            st.dataframe(output_data)

            # Add download button
            st.download_button(
                        label="Download CSV File",
                        data=f.to_csv(selected_row),  # Download only the selected rows
                        file_name="app_data.csv",
                        mime="text/csv",
                    )
        else:
            st.warning("No 'link' column found in selected rows.")