Spaces:
Build error
Build error
| 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.") | |