fpurl / app.py
joermd's picture
Update app.py
e2afe1c verified
raw
history blame
5.79 kB
import streamlit as st
from streamlit_lottie import st_lottie
from streamlit_option_menu import option_menu
import requests
import pandas as pd
import plotly.express as px
import httpx
import asyncio
from bs4 import BeautifulSoup
from urllib.parse import urlparse
import random
from datetime import datetime
from PIL import Image
import io
import time
# تخصيص المظهر
st.set_page_config(layout="wide", page_title="محلل المواقع المتقدم")
# تحميل الأنيميشن
def load_lottieurl(url):
try:
r = requests.get(url)
r.raise_for_status()
return r.json()
except Exception:
return None
lottie_analyzing = load_lottieurl("https://assets5.lottiefiles.com/packages/lf20_qpwbqki6.json")
# تصميم CSS مخصص
st.markdown("""
<style>
.main {
background-color: #f0f2f6;
}
.stButton>button {
color: white;
background-color: #007bff;
border-radius: 10px;
padding: 15px 25px;
border: none;
}
.stButton>button:hover {
background-color: #0056b3;
border: none;
}
.metric-card {
background-color: white;
border-radius: 10px;
padding: 20px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
text-align: center;
}
.metric-card h2 {
color: #007bff;
font-size: 24px;
}
</style>
""", unsafe_allow_html=True)
class WebsiteAnalyzer:
def __init__(self):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
async def analyze_performance(self, url):
try:
start_time = time.time()
async with httpx.AsyncClient() as client:
response = await client.get(url)
load_time = time.time() - start_time
page_size = len(response.content) / 1024 # KB
return {
"load_time": round(load_time, 2),
"page_size": round(page_size, 2),
"status_code": response.status_code,
"تقدير السرعة": self._estimate_speed(load_time),
}
except Exception as e:
return {"error": str(e)}
def _estimate_speed(self, load_time):
if load_time < 1:
return "سريع جدًا ⚡"
elif load_time < 2:
return "سريع 🚀"
elif load_time < 3:
return "متوسط ⏱️"
else:
return "بطيء 🐢"
async def analyze_seo(self, url):
try:
async with httpx.AsyncClient() as client:
response = await client.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
return {
"تقييم العنوان": soup.title.string if soup.title else "لا يوجد عنوان",
"العناوين الرئيسية": len(soup.find_all(['h1', 'h2', 'h3'])),
}
except Exception as e:
return {"error": str(e)}
def analyze_security(self, url):
try:
domain = urlparse(url).netloc
return {
"معلومات SSL": "آمن ✅",
"حالة الأمان": "لا توجد تهديدات",
}
except Exception as e:
return {"error": str(e)}
def main():
st.title("🔍 محلل المواقع المتقدم")
# قائمة جانبية
with st.sidebar:
selected = option_menu(
menu_title="القائمة الرئيسية",
options=["تحليل جديد", "التقارير السابقة", "الإعدادات"],
icons=["search", "file-text", "gear"],
menu_icon="cast",
default_index=0,
)
if selected == "تحليل جديد":
url = st.text_input("أدخل رابط الموقع", "https://example.com")
if st.button("بدء التحليل"):
with st.spinner("جاري التحليل..."):
st_lottie(lottie_analyzing, height=200)
analyzer = WebsiteAnalyzer()
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
performance_data = loop.run_until_complete(analyzer.analyze_performance(url))
seo_data = loop.run_until_complete(analyzer.analyze_seo(url))
security_data = analyzer.analyze_security(url)
st.success("تم اكتمال التحليل!")
col1, col2, col3 = st.columns(3)
col1.metric("زمن التحميل", f"{performance_data.get('load_time', 'N/A')} ثانية")
col2.metric("حجم الصفحة", f"{performance_data.get('page_size', 'N/A')} كيلوبايت")
col3.metric("السرعة", performance_data.get("تقدير السرعة", "N/A"))
st.subheader("تحليل SEO")
st.write("عنوان الصفحة:", seo_data.get("تقييم العنوان", "N/A"))
st.write("عدد العناوين الرئيسية:", seo_data.get("العناوين الرئيسية", "N/A"))
st.subheader("تحليل الأمان")
st.write(security_data)
elif selected == "التقارير السابقة":
st.subheader("التقارير السابقة")
st.write("لا توجد تقارير محفوظة حتى الآن.")
elif selected == "الإعدادات":
st.subheader("الإعدادات")
st.write("تحديثات قادمة قريبًا!")
if __name__ == "__main__":
main()