import gradio as gr from collections import Counter from bs4 import BeautifulSoup def analyze_videos(file): try: # قراءة محتوى الملف if hasattr(file, 'read'): content = file.read() else: with open(file.name, 'r', encoding='utf-8') as f: content = f.read() except Exception as e: return f"خطأ أثناء قراءة الملف: {str(e)}", "" # تحليل HTML باستخدام BeautifulSoup try: soup = BeautifulSoup(content, 'html.parser') except Exception as e: return f"خطأ في تحليل محتوى HTML: {str(e)}", "" # استخراج بيانات الفيديوهات videos_data = [] video_elements = soup.find_all('a', class_="css-1wrhn5c-AMetaCaptionLine") if not video_elements: return "لم يتم العثور على أي بيانات مطابقة.", "" for video in video_elements: video_info = {} # استخراج الرابط video_info["Link"] = video.get('href', 'رابط غير متوفر') # استخراج العنوان title_element = video.find('span', class_="css-j2a19r-SpanText") video_info["Title"] = title_element.get_text(strip=True) if title_element else "عنوان غير متوفر" # استخراج الهاشتاغات hashtags = [ tag.get_text(strip=True) for tag in video.find_all('strong', class_="css-1p6dp51-StrongText") ] video_info["Hashtags"] = ", ".join(hashtags) # استخراج عدد المشاهدات views_element = video.find_next('strong', {"data-e2e": "video-views"}) video_info["Views"] = views_element.get_text(strip=True) if views_element else "عدد المشاهدات غير متوفر" videos_data.append(video_info) # تجهيز النصوص النهائية videos_summary = "\n\n".join( f"📹 الفيديو {i+1}:\n" f"- الرابط: {video['Link']}\n" f"- العنوان: {video['Title']}\n" f"- الهاشتاغات: {video['Hashtags']}\n" f"- عدد المشاهدات: {video['Views']}" for i, video in enumerate(videos_data) ) return videos_summary or "لم يتم استخراج أي معلومات." # إنشاء واجهة Gradio def gradio_interface(): with gr.Blocks() as demo: gr.Markdown("## 📝 محلل فيديوهات تيك توك") with gr.Row(): file_input = gr.File(label="📂 رفع ملف HTML", file_types=[".html"]) with gr.Row(): analyze_btn = gr.Button("تحليل البيانات", variant="primary") with gr.Row(): output_box = gr.Textbox( label="📜 البيانات المستخرجة", lines=20, interactive=False, placeholder="ستظهر البيانات هنا" ) analyze_btn.click( fn=analyze_videos, inputs=[file_input], outputs=[output_box], ) return demo # تشغيل التطبيق if __name__ == "__main__": demo = gradio_interface() demo.launch()