import gradio as gr 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) if hashtags else "هاشتاغات غير متوفرة" # استخراج عدد المشاهدات views_element = video.find_next('strong', {"data-e2e": "video-views"}) video_info["Views"] = views_element.get_text(strip=True) if views_element else "عدد المشاهدات غير متوفر" # استخراج عدد الإعجابات likes_element = video.find('strong', {"data-e2e": "browse-like-count"}) video_info["Likes"] = likes_element.get_text(strip=True) if likes_element else "غير متوفر" # استخراج عدد التعليقات comments_element = video.find('strong', {"data-e2e": "browse-comment-count"}) video_info["Comments"] = comments_element.get_text(strip=True) if comments_element else "غير متوفر" # استخراج عدد المشاركات shares_element = video.find('strong', {"data-e2e": "undefined-count"}) video_info["Shares"] = shares_element.get_text(strip=True) if shares_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']}\n" f"- عدد الإعجابات: {video['Likes']}\n" f"- عدد التعليقات: {video['Comments']}\n" f"- عدد المشاركات: {video['Shares']}" 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()