import streamlit as st import requests import json import os BOOKMARKS_FILE = "bookmarks.json" st.set_page_config(page_title="📖 Quran App", layout="wide", page_icon="🌙") # Use exact Bismillah version from API (with BOM character) BISMILLAH_TEXT = "بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ" # Bookmark functions def load_bookmarks(): if os.path.exists(BOOKMARKS_FILE): with open(BOOKMARKS_FILE, "r") as f: return json.load(f) return [] def save_bookmarks_file(bookmarks): with open(BOOKMARKS_FILE, "w") as f: json.dump(bookmarks, f, indent=2) def add_bookmark(bm): bookmarks = load_bookmarks() if not any(b == bm for b in bookmarks): bookmarks.append(bm) save_bookmarks_file(bookmarks) st.sidebar.success(f"Bookmarked Ayah {bm['ayah']} from {bm['surah']}!") # API fetching functions @st.cache_data def get_surah_list(): return requests.get("https://api.alquran.cloud/v1/surah").json()["data"] @st.cache_data def fetch_data(url): return requests.get(url).json().get("data") def get_translation(surah, ayah=None, lang="en.asad"): url = f"https://api.alquran.cloud/v1/{'ayah' if ayah else 'surah'}/{surah}{(':'+str(ayah)) if ayah else ''}/{lang}" return fetch_data(url) def get_arabic_audio(surah, ayah=None): url = f"https://api.alquran.cloud/v1/{'ayah' if ayah else 'surah'}/{surah}{(':'+str(ayah)) if ayah else ''}/ar.alafasy" return fetch_data(url) # UI setup st.sidebar.header("Quran Explorer") lang = st.sidebar.selectbox("Translation Language", ["Arabic", "English", "Urdu", "French"]) lang_codes = {"Arabic": "ar", "English": "en.asad", "Urdu": "ur.junagarhi", "French": "fr.hamidullah"} lang_code = lang_codes[lang] surahs = get_surah_list() surah_names = [f"{s['number']}. {s['englishName']} ({s['name']})" for s in surahs] surah_sel = st.sidebar.selectbox("Select Surah", ["-- Select Surah --"] + surah_names) mode = st.sidebar.radio("Choose Mode", ("Full Surah", "Specific Ayah")) if surah_sel != "-- Select Surah --": surah_num = int(surah_sel.split(".")[0]) if mode == "Specific Ayah": ayah_num = st.sidebar.number_input("Ayah Number", min_value=1, step=1) st.markdown(""" """, unsafe_allow_html=True) st.markdown("