import streamlit as st from datasets import load_dataset import pandas as pd import json import os # Load the dataset and convert it to a pandas DataFrame dataset = load_dataset("awacke1/DatasetOfDatasetsUSA") df = pd.DataFrame(dataset['train']) # Path to the file where likes are stored likes_file_path = 'likes_data.json' # Load or initialize likes history if os.path.exists(likes_file_path): with open(likes_file_path, 'r') as file: likes_history = json.load(file) else: likes_history = {} # Define a function to save likes history def save_likes_history(): with open(likes_file_path, 'w') as file: json.dump(likes_history, file) # Define a function to update likes def update_likes(index): if index in likes_history: likes_history[index] += 1 else: likes_history[index] = 1 save_likes_history() st.experimental_rerun() # Sidebar for search with st.sidebar: search_query = st.text_input("🔍 Search", "") search_button = st.button("Search") # Filter DataFrame based on search query if search_query: filtered_df = df[df.apply(lambda row: search_query.lower() in row.to_string().lower(), axis=1)] else: filtered_df = df # Display search results or full DataFrame start_index = 0 # Start from the first record; adjust based on pagination if implemented display_limit = 10 # Number of records to display at a time; adjust as needed # Pagination setup if 'index' not in st.session_state: st.session_state.index = 0 # Display records with pagination for i in range(st.session_state.index, min(st.session_state.index + display_limit, len(filtered_df))): item = filtered_df.iloc[i] cityOrState, link, linkType = item['cityOrState'], item['link'], item['linkType'] liked = likes_history.get(str(i), 0) with st.expander(f"{cityOrState} - {linkType} 🔗"): st.markdown(f"[{link}]({link})") like_button = st.button("👍 Like", key=f"like_{i}") if like_button: update_likes(str(i)) # Navigation buttons for pagination prev, _, next = st.columns([1,10,1]) if prev.button("Previous"): st.session_state.index = max(0, st.session_state.index - display_limit) if next.button("Next") and st.session_state.index + display_limit < len(filtered_df): st.session_state.index += display_limit