Spaces:
Sleeping
Sleeping
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() | |