KIMOSSINO commited on
Commit
664290f
·
verified ·
1 Parent(s): 83d2a51

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -20
app.py CHANGED
@@ -7,48 +7,79 @@ import gradio as gr
7
 
8
  def extract_titles_and_hashtags(file):
9
  try:
10
- # قراءة محتوى الملف
11
- content = file.read() if hasattr(file, 'read') else open(file.name, 'r', encoding='utf-8').read()
 
 
 
12
  except Exception as e:
13
  print(f"خطأ أثناء قراءة الملف: {str(e)}")
14
  return f"خطأ أثناء قراءة الملف: {str(e)}", None, None
15
 
16
  try:
17
- # تحليل HTML باستخدام BeautifulSoup
18
- soup = BeautifulSoup(content, 'html.parser')
19
- print("تم تحليل HTML بنجاح.")
20
  except Exception as e:
21
  print(f"خطأ أثناء تحليل HTML: {str(e)}")
22
  return f"خطأ أثناء تحليل HTML: {str(e)}", None, None
23
 
24
- # استخراج البيانات
25
  data = []
26
  hashtags_counter = Counter()
 
27
 
28
- # العثور على الحاويات التي تحتوي على البيانات
29
- desc_containers = soup.find_all('div', class_="css-vi46v1-DivDesContainer")
30
- print(f"عدد الحاويات التي تم العثور عليها: {len(desc_containers)}")
31
-
32
  if not desc_containers:
33
  return "لم يتم العثور على أي بيانات مطابقة.", None, None
34
 
35
- for container in desc_containers:
36
- title = container.get('aria-label', 'بدون عنوان')
 
37
 
38
- hashtags = [
39
- tag.get_text(strip=True)
40
- for tag in container.find_all('a')
41
- if tag.get_text(strip=True).startswith('#')
42
- ]
43
- hashtags_counter.update(hashtags)
44
 
45
- data.append({"Title": title, "Hashtags": ", ".join(hashtags)})
 
 
 
46
 
47
  df_titles = pd.DataFrame(data)
48
- df_hashtags = pd.DataFrame(hashtags_counter.items(), columns=["Hashtag", "Count"]).sort_values(by="Count", ascending=False)
49
 
50
  return df_titles, df_hashtags
51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  # إنشاء ملفات للتنزيل
53
  def create_downloadable_files(df_titles, df_hashtags, format_choice):
54
  if format_choice == "Excel":
 
7
 
8
  def extract_titles_and_hashtags(file):
9
  try:
10
+ # قراءة محتوى الملف مع التحكم في حجم الملف
11
+ if file.size > 50 * 1024 * 1024: # تحديد الحد الأقصى لـ 50 ميجابايت
12
+ return "الملف كبير جدًا. الرجاء رفع ملف أصغر.", None, None
13
+
14
+ content = file.read().decode('utf-8') if hasattr(file, 'read') else open(file.name, 'r', encoding='utf-8').read()
15
  except Exception as e:
16
  print(f"خطأ أثناء قراءة الملف: {str(e)}")
17
  return f"خطأ أثناء قراءة الملف: {str(e)}", None, None
18
 
19
  try:
20
+ # تحليل HTML باستخدام BeautifulSoup مع محدد أسرع
21
+ soup = BeautifulSoup(content, 'lxml') # استخدام lxml بدلاً من html.parser للسرعة
 
22
  except Exception as e:
23
  print(f"خطأ أثناء تحليل HTML: {str(e)}")
24
  return f"خطأ أثناء تحليل HTML: {str(e)}", None, None
25
 
26
+ # استخراج البيانات مع تحديد العدد الأقصى للعناصر
27
  data = []
28
  hashtags_counter = Counter()
29
+ max_items = 1000 # تحديد الحد الأقصى للعناصر المستخرجة
30
 
31
+ # العثور على الحاويات مع استخدام محدد أكثر مرونة
32
+ desc_containers = soup.find_all('div', class_=lambda value: value and 'css-' in value and 'DivDesContainer' in value)
33
+
 
34
  if not desc_containers:
35
  return "لم يتم العثور على أي بيانات مطابقة.", None, None
36
 
37
+ for container in desc_containers[:max_items]:
38
+ try:
39
+ title = container.get('aria-label', 'بدون عنوان')
40
 
41
+ hashtags = [
42
+ tag.get_text(strip=True)
43
+ for tag in container.find_all('a')
44
+ if tag.get_text(strip=True).startswith('#')
45
+ ]
46
+ hashtags_counter.update(hashtags)
47
 
48
+ data.append({"Title": title, "Hashtags": ", ".join(hashtags)})
49
+ except Exception as e:
50
+ print(f"خطأ في معالجة عنصر: {str(e)}")
51
+ continue
52
 
53
  df_titles = pd.DataFrame(data)
54
+ df_hashtags = pd.DataFrame(hashtags_counter.most_common(), columns=["Hashtag", "Count"])
55
 
56
  return df_titles, df_hashtags
57
 
58
+ # تعديل على دالة Gradio للتعامل مع الأخطاء
59
+ def gradio_interface(file, format_choice):
60
+ if not file:
61
+ return "الرجاء رفع ملف.", None
62
+
63
+ try:
64
+ df_titles, df_hashtags = extract_titles_and_hashtags(file)
65
+
66
+ if isinstance(df_titles, str): # في حالة وجود رسالة خطأ
67
+ return df_titles, None
68
+
69
+ if df_titles is None or df_hashtags is None:
70
+ return "لم يتم استخراج أي بيانات.", None
71
+
72
+ # عرض النتائج
73
+ titles_html = df_titles.to_html(index=False) if not df_titles.empty else "لا توجد عناوين مستخرجة."
74
+ hashtags_html = df_hashtags.to_html(index=False) if not df_hashtags.empty else "لا توجد هاشتاغات مستخرجة."
75
+
76
+ # إنشاء الملف للتنزيل
77
+ buffer, file_name = create_downloadable_files(df_titles, df_hashtags, format_choice)
78
+
79
+ return titles_html + "<br><br>" + hashtags_html, (file_name, buffer)
80
+
81
+ except Exception as e:
82
+ return f"خطأ غير متوقع: {str(e)}", None
83
  # إنشاء ملفات للتنزيل
84
  def create_downloadable_files(df_titles, df_hashtags, format_choice):
85
  if format_choice == "Excel":