apps-beta / app.py
felix-weiland's picture
Upload 2 files
e80e1f0
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.")