chalet_jornal / app.py
Medon90ae's picture
Update app.py
5cfc7ba verified
import streamlit as st
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from data_collection import extract_tourism_trends, load_chalet_data, analyze_chalet_data
from content_creation import generate_tourism_article, extract_keywords, generate_article_title, generate_meta_description
from content_analysis import analyze_content_readability, analyze_sentiment, improve_content, analyze_content_completeness, compare_contents, save_analysis_results
from media_generation import enhance_multiple_images, create_image_prompt, suggest_image_improvements, save_enhanced_image, get_chalet_images_from_dataset
from performance_analysis import analyze_content_performance, create_performance_charts, load_performance_data, add_performance_record, analyze_performance_trends, analyze_content_keywords_performance, create_keyword_performance_chart
from data_management import load_tourism_datasets, filter_dataset_by_criteria, analyze_dataset, extract_keywords_from_dataset, save_dataset_to_csv, load_dataset_from_csv, merge_datasets
from audience_targeting import create_audience_segments, analyze_audience_segments, create_segment_visualization, generate_targeted_content, load_audience_data_from_file, save_audience_segments
from model_training import get_available_models, create_training_data_from_chalets, save_training_data, login_to_huggingface, prepare_sentiment_data, train_sentiment_model
# إضافة استيراد للوظائف الجديدة
from content_automation import automated_content_creation, batch_content_creation, create_content_for_trending_topics
import os
import datetime
# إعداد الصفحة
st.set_page_config(
page_title="شاليه صحفي - نظام المحتوى السياحي الذكي",
page_icon="🏝️",
layout="wide",
initial_sidebar_state="expanded"
)
# العنوان الرئيسي
st.title("🏝️ نظام شاليه_صحفي للمحتوى السياحي الذكي")
st.markdown("---")
# تهيئة حالة الجلسة
if 'chalet_data' not in st.session_state:
st.session_state.chalet_data = None
if 'tourism_dataset' not in st.session_state:
st.session_state.tourism_dataset = None
if 'performance_data' not in st.session_state:
st.session_state.performance_data = load_performance_data()
if 'audience_data' not in st.session_state:
st.session_state.audience_data = None
if 'logged_in_hf' not in st.session_state:
st.session_state.logged_in_hf = False
# القائمة الجانبية للتنقل
menu = ["الصفحة الرئيسية", "جمع البيانات", "إنشاء المحتوى", "تحليل المحتوى",
"توليد الوسائط", "تحليل الأداء", "إدارة البيانات", "استهداف الجمهور", "تدريب النماذج", "أتمتة المحتوى"]
choice = st.sidebar.selectbox("اختر الوظيفة", menu)
# عرض الصفحة المناسبة حسب الاختيار
if choice == "الصفحة الرئيسية":
st.subheader("مرحباً بك في نظام شاليه_صحفي")
st.write("""هذا النظام يجمع بين الصحافة والذكاء الاصطناعي والتسويق السياحي لإنشاء محتوى صحفي
مستهدف يسوّق للشاليهات بطريقة فعالة ومبتكرة.""")
# عرض المكونات الرئيسية للنظام
st.subheader("المكونات الرئيسية للنظام")
col1, col2 = st.columns(2)
with col1:
st.markdown("### 📊 جمع وتحليل البيانات")
st.markdown("- استخراج البيانات من مصادر الأخبار")
st.markdown("- تحليل اتجاهات السياحة")
st.markdown("### ✍️ إنشاء المحتوى")
st.markdown("- إنشاء مقالات صحفية بأساليب متنوعة")
st.markdown("- توليد محتوى مستهدف للشرائح المختلفة")
st.markdown("### 🔍 تحليل المحتوى")
st.markdown("- تحليل قابلية القراءة")
st.markdown("- تحليل المشاعر واستخراج الكلمات المفتاحية")
with col2:
st.markdown("### 🖼️ توليد الوسائط")
st.markdown("- تحسين صور الشاليهات")
st.markdown("- اقتراحات لتصوير الشاليهات")
st.markdown("### 📈 تحليل الأداء")
st.markdown("- قياس تأثير المحتوى على المبيعات")
st.markdown("- تحليل سلوك المستخدمين")
st.markdown("### 👥 استهداف الجمهور")
st.markdown("- تحليل وتصنيف شرائح الجمهور")
st.markdown("- تخصيص المحتوى لكل شريحة")
# عرض إحصائيات النظام
st.subheader("إحصائيات النظام")
stats_col1, stats_col2, stats_col3 = st.columns(3)
with stats_col1:
# عدد الشاليهات في قاعدة البيانات
if st.session_state.tourism_dataset is not None:
chalet_count = len(st.session_state.tourism_dataset)
else:
chalet_count = 0
st.metric("عدد الشاليهات", chalet_count)
with stats_col2:
# عدد المقالات المنشأة
if os.path.exists("analysis_results"):
analysis_count = len([f for f in os.listdir("analysis_results") if f.endswith(".json")])
else:
analysis_count = 0
st.metric("عدد التحليلات", analysis_count)
with stats_col3:
# عدد الصور المحسنة
if os.path.exists("enhanced_images"):
image_count = len([f for f in os.listdir("enhanced_images") if f.endswith((".jpg", ".png", ".jpeg"))])
else:
image_count = 0
st.metric("عدد الصور المحسنة", image_count)
elif choice == "جمع البيانات":
st.subheader("جمع وتحليل البيانات السياحية")
tab1, tab2 = st.tabs(["اتجاهات السياحة", "بيانات الشاليهات"])
with tab1:
st.write("### استخراج اتجاهات السياحة")
if st.button("استخراج اتجاهات السياحة"):
with st.spinner("جاري استخراج اتجاهات السياحة..."):
trends = extract_tourism_trends()
st.write("### اتجاهات السياحة الحالية:")
for trend in trends:
st.write(f"- [{trend['title']}]({trend['link']})")
st.write(f" المصدر: {trend['source']}, تاريخ النشر: {trend['pubDate']}")
with tab2:
st.write("### جمع وتحليل بيانات الشاليهات")
data_source = st.radio(
"اختر مصدر البيانات:",
["استخراج من الويب", "تحميل من ملف CSV"]
)
if data_source == "استخراج من الويب":
if st.button("استخراج بيانات الشاليهات من الويب"):
with st.spinner("جاري استخراج بيانات الشاليهات..."):
chalets = scrape_chalets_from_web()
if chalets:
df = pd.DataFrame(chalets)
st.session_state.chalet_data = df
st.success(f"تم استخراج {len(df)} شاليه بنجاح!")
# حفظ البيانات في ملف CSV
df.to_csv("real_chalets_data.csv", index=False)
st.info("تم حفظ البيانات في ملف real_chalets_data.csv")
# عرض البيانات
st.write("### بيانات الشاليهات:")
st.dataframe(df)
else:
st.error("لم يتم العثور على أي بيانات للشاليهات")
else: # تحميل من ملف CSV
uploaded_file = st.file_uploader("قم برفع ملف CSV يحتوي على بيانات الشاليهات", type="csv")
if uploaded_file is not None:
df = pd.read_csv(uploaded_file)
st.session_state.chalet_data = df
st.success(f"تم تحميل {len(df)} شاليه بنجاح!")
# عرض البيانات
st.write("### بيانات الشاليهات:")
st.dataframe(df)
# تحليل البيانات
if st.session_state.chalet_data is not None:
if st.button("تحليل بيانات الشاليهات"):
with st.spinner("جاري تحليل بيانات الشاليهات..."):
analysis = analyze_chalet_data(st.session_state.chalet_data)
st.write("### تحليل البيانات:")
col1, col2 = st.columns(2)
with col1:
st.write(f"عدد الشاليهات: {analysis['total_chalets']}")
st.write(f"متوسط السعر: {analysis['avg_price']:.2f} جنيه")
st.write(f"أقصى سعة: {analysis['max_capacity']} أشخاص")
st.write(f"الموقع الأكثر شعبية: {analysis['popular_location']}")
with col2:
st.write(f"متوسط التقييم: {analysis['avg_rating']:.2f} من 5")
st.write(f"نطاق الأسعار: من {analysis['price_range'][0]} إلى {analysis['price_range'][1]} جنيه")
st.write(f"أهم المميزات: {analysis['top_amenities']}")
st.write("### توزيع الجمهور المستهدف:")
if analysis['audience_distribution']:
audience_df = pd.DataFrame.from_dict(analysis['audience_distribution'], orient='index', columns=['العدد'])
st.bar_chart(audience_df)
else:
st.info("لا توجد بيانات كافية عن الجمهور المستهدف")
elif choice == "إنشاء المحتوى":
st.subheader("إنشاء المحتوى الصحفي السياحي")
# تهيئة المتغيرات
selected_chalet = None
# إضافة خيار لاختيار شاليه من البيانات
if st.session_state.chalet_data is not None:
chalet_options = st.session_state.chalet_data['name'].tolist()
selected_chalet_name = st.selectbox("اختر شاليه من البيانات:", [""] + chalet_options)
if selected_chalet_name:
# استخراج بيانات الشاليه المحدد
selected_chalet = st.session_state.chalet_data[st.session_state.chalet_data['name'] == selected_chalet_name].iloc[0].to_dict()
# عرض معلومات الشاليه
st.write("### معلومات الشاليه")
col1, col2 = st.columns(2)
with col1:
st.write(f"**الموقع:** {selected_chalet['location']}")
if 'price' in selected_chalet:
st.write(f"**السعر:** {selected_chalet['price']} جنيه")
if 'capacity' in selected_chalet:
st.write(f"**السعة:** {selected_chalet['capacity']} أشخاص")
with col2:
if 'rating' in selected_chalet:
st.write(f"**التقييم:** {selected_chalet['rating']} من 5")
if 'season' in selected_chalet:
st.write(f"**الموسم:** {selected_chalet['season']}")
if 'target_audience' in selected_chalet:
st.write(f"**الجمهور المستهدف:** {selected_chalet['target_audience']}")
if 'amenities' in selected_chalet:
st.write(f"**المميزات:** {selected_chalet['amenities']}")
if 'description' in selected_chalet:
st.write(f"**الوصف:** {selected_chalet['description']}")
# إضافة خيار لإدخال بيانات شاليه يدوياً
st.write("### أو أدخل بيانات شاليه يدوياً")
chalet_name = st.text_input("اسم الشاليه:")
chalet_location = st.text_input("موقع الشاليه:")
style = st.selectbox("اختر أسلوب المقال:", ["informative", "promotional", "narrative"])
if st.button("إنشاء المقال"):
if selected_chalet or (chalet_name and chalet_location):
with st.spinner("جاري إنشاء المقال..."):
if selected_chalet:
# استخدام بيانات الشاليه المحدد
article = generate_tourism_article(selected_chalet, style)
chalet_data = selected_chalet
else:
# استخدام البيانات المدخلة يدوياً
manual_chalet_data = {
"name": chalet_name,
"location": chalet_location
}
article = generate_tourism_article(manual_chalet_data, style)
chalet_data = manual_chalet_data
# إنشاء عنوان للمقال
title = generate_article_title(chalet_data, style)
st.write(f"### {title}")
# إنشاء وصف تعريفي
meta_description = generate_meta_description(chalet_data, style)
st.write(f"*{meta_description}*")
st.write("### المقال المُنشأ:")
st.write(article)
# استخراج الكلمات المفتاحية
keywords = extract_keywords(article)
st.write("### الكلمات المفتاحية:")
st.write(", ".join(keywords))
# إضافة زر لحفظ المقال
if st.button("حفظ المقال"):
# إنشاء مجلد للمقالات إذا لم يكن موجوداً
if not os.path.exists("articles"):
os.makedirs("articles")
# إنشاء اسم الملف
filename = f"articles/{chalet_data['name'].replace(' ', '_')}_{style}_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.txt"
# حفظ المقال
with open(filename, 'w', encoding='utf-8') as f:
f.write(f"{title}\n\n")
f.write(f"{meta_description}\n\n")
f.write(article)
f.write("\n\nالكلمات المفتاحية: " + ", ".join(keywords))
st.success(f"تم حفظ المقال في {filename}")
else:
st.error("يرجى اختيار شاليه من القائمة أو إدخال اسم الشاليه وموقعه")
elif choice == "تحليل المحتوى":
st.subheader("تحليل وتحسين المحتوى")
tab1, tab2 = st.tabs(["تحليل المحتوى", "مقارنة المحتويات"])
with tab1:
text_to_analyze = st.text_area("أدخل النص للتحليل:", height=200)
target_audience = st.selectbox("الجمهور المستهدف:", ["عائلات", "شباب", "كبار السن", "عام"])
if st.button("تحليل وتحسين"):
if text_to_analyze:
with st.spinner("جاري تحليل المحتوى..."):
# تحليل قابلية القراءة
readability = analyze_content_readability(text_to_analyze)
# تحليل المشاعر
sentiment = analyze_sentiment(text_to_analyze)
# تحليل اكتمال المحتوى
completeness = analyze_content_completeness(text_to_analyze)
# اقتراحات التحسين
improvements = improve_content(text_to_analyze, target_audience)
# عرض النتائج
st.write("### تحليل قابلية القراءة:")
st.write(f"مستوى القراءة: {readability['level']}")
st.write(f"متوسط طول الجملة: {readability['avg_sentence_length']:.1f} كلمة")
st.write(f"عدد الكلمات: {readability['word_count']}")
st.write(f"عدد الجمل: {readability['sentence_count']}")
st.write("### تحليل المشاعر:")
sentiment_label = "إيجابي" if sentiment['label'] == "POSITIVE" else "سلبي" if sentiment['label'] == "NEGATIVE" else "محايد"
st.write(f"النبرة العامة: {sentiment_label} (الثقة: {sentiment['score']:.2f})")
st.write("### تحليل اكتمال المحتوى:")
st.write(f"درجة الاكتمال: {completeness['completeness_score']:.1f}%")
if completeness['missing_elements']:
st.write("العناصر المفقودة:")
for element in completeness['missing_elements']:
st.write(f"- {element}")
st.write("### اقتراحات التحسين:")
if improvements['improvements']:
for improvement in improvements['improvements']:
st.write(f"- {improvement}")
else:
st.write("المحتوى جيد ولا يحتاج إلى تحسينات كبيرة.")
# حفظ نتائج التحليل
if st.button("حفظ نتائج التحليل"):
analysis_results = {
"text": text_to_analyze,
"target_audience": target_audience,
"readability": readability,
"sentiment": {
"label": sentiment_label,
"score": sentiment['score']
},
"completeness": {
"score": completeness['completeness_score'],
"missing_elements": completeness['missing_elements']
},
"improvements": improvements['improvements']
}
saved_path = save_analysis_results(analysis_results, f"analysis_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.json")
if saved_path:
st.success(f"تم حفظ نتائج التحليل في {saved_path}")
else:
st.error("يرجى إدخال نص للتحليل")
with tab2:
st.write("### مقارنة بين محتويين")
text1 = st.text_area("المحتوى الأول:", height=150)
text2 = st.text_area("المحتوى الثاني:", height=150)
if st.button("مقارنة المحتويين"):
if text1 and text2:
with st.spinner("جاري مقارنة المحتويين..."):
comparison = compare_contents(text1, text2)
st.write(f"### المحتوى الأفضل: {comparison['better_content']}")
st.write("### مقارنة تفصيلية:")
col1, col2 = st.columns(2)
with col1:
st.write("**المحتوى الأول:**")
st.write(f"مستوى القراءة: {comparison['comparison']['content1']['readability']['level']}")
sentiment_label1 = "إيجابي" if comparison['comparison']['content1']['sentiment']['label'] == "POSITIVE" else "سلبي" if comparison['comparison']['content1']['sentiment']['label'] == "NEGATIVE" else "محايد"
st.write(f"المشاعر: {sentiment_label1} (الثقة: {comparison['comparison']['content1']['sentiment']['score']:.2f})")
st.write(f"درجة الاكتمال: {comparison['comparison']['content1']['completeness']:.1f}%")
st.write(f"الدرجة الإجمالية: {comparison['comparison']['content1']['total_score']:.1f}%")
with col2:
st.write("**المحتوى الثاني:**")
st.write(f"مستوى القراءة: {comparison['comparison']['content2']['readability']['level']}")
sentiment_label2 = "إيجابي" if comparison['comparison']['content2']['sentiment']['label'] == "POSITIVE" else "سلبي" if comparison['comparison']['content2']['sentiment']['label'] == "NEGATIVE" else "محايد"
st.write(f"المشاعر: {sentiment_label2} (الثقة: {comparison['comparison']['content2']['sentiment']['score']:.2f})")
st.write(f"درجة الاكتمال: {comparison['comparison']['content2']['completeness']:.1f}%")
st.write(f"الدرجة الإجمالية: {comparison['comparison']['content2']['total_score']:.1f}%")
else:
st.error("يرجى إدخال كلا المحتويين للمقارنة")
elif choice == "توليد الوسائط":
st.subheader("تحسين صور الشاليهات")
# تعريف المتغيرات قبل استخدامها
chalet_name = st.text_input("اسم الشاليه:")
chalet_location = st.text_input("موقع الشاليه:")
target_audience = st.selectbox("الجمهور المستهدف:", ["", "عائلات", "أزواج", "شباب"])
uploaded_files = st.file_uploader("قم برفع صور الشاليه (يمكنك رفع أكثر من صورة)", type=["jpg", "jpeg", "png"], accept_multiple_files=True)
enhancement_type = st.radio(
"اختر نوع التحسين:",
["brightness", "contrast", "sharpness", "professional"],
format_func=lambda x: {
"brightness": "زيادة السطوع",
"contrast": "تحسين التباين",
"sharpness": "زيادة الحدة",
"professional": "تحسين احترافي شامل"
}[x]
)
if uploaded_files:
st.write("### الصور الأصلية")
for uploaded_file in uploaded_files:
st.image(uploaded_file, caption="الصورة الأصلية", use_container_width=True)
if st.button("تحسين الصور"):
with st.spinner("جاري تحسين الصور..."):
enhanced_images, descriptions = enhance_multiple_images(uploaded_files, enhancement_type)
st.write("### الصور بعد التحسين")
for i, (enhanced_image, description) in enumerate(zip(enhanced_images, descriptions)):
st.image(enhanced_image, caption=description, use_container_width=True)
# إضافة زر لتنزيل الصورة المحسنة
if st.button(f"حفظ الصورة {i+1}"):
# حفظ الصورة
filename = f"{chalet_name}_{enhancement_type}_{i+1}.jpg"
saved_path = save_enhanced_image(enhanced_image, filename)
if saved_path:
st.success(f"تم حفظ الصورة في {saved_path}")
else:
st.info("يرجى رفع صورة واحدة أو أكثر للشاليه أولاً.")
# الآن هذه المتغيرات تم تعريفها قبل استخدامها هنا
if chalet_name or chalet_location or target_audience:
chalet_data = {
"name": chalet_name,
"location": chalet_location,
"target_audience": target_audience
}
st.write("### اقتراحات لتصوير الشاليه")
suggestions = suggest_image_improvements(chalet_data)
for suggestion in suggestions:
st.write(f"- {suggestion}")
elif choice == "تحليل الأداء":
st.subheader("تحليل أداء المحتوى")
tab1, tab2, tab3 = st.tabs(["بيانات الأداء", "تحليل الأداء", "اتجاهات الأداء"])
with tab1:
st.write("### إدارة بيانات أداء المحتوى")
# إضافة سجل أداء جديد
st.write("#### إضافة سجل أداء جديد")
content_id = st.text_input("معرف المحتوى:")
content_type = st.selectbox("نوع المحتوى:", ["informative", "promotional", "narrative"])
views = st.number_input("عدد المشاهدات:", min_value=0, value=0)
engagement = st.number_input("معدل التفاعل (%):", min_value=0.0, max_value=100.0, value=0.0)
conversion = st.number_input("معدل التحويل (%):", min_value=0.0, max_value=100.0, value=0.0)
publish_date = st.date_input("تاريخ النشر:", datetime.datetime.now())
if st.button("إضافة سجل"):
if content_id and content_type:
result = add_performance_record(
content_id,
content_type,
views,
engagement,
conversion,
publish_date.strftime("%Y-%m-%d")
)
if result:
st.success("تم إضافة سجل الأداء بنجاح")
# تحديث البيانات في حالة الجلسة
st.session_state.performance_data = load_performance_data()
else:
st.error("حدث خطأ أثناء إضافة سجل الأداء")
else:
st.error("يرجى إدخال معرف المحتوى ونوعه على الأقل")
# عرض البيانات الحالية
st.write("### بيانات أداء المحتوى الحالية")
if st.session_state.performance_data is not None and not st.session_state.performance_data.empty:
st.dataframe(st.session_state.performance_data)
else:
st.info("لا توجد بيانات أداء متاحة حالياً")
with tab2:
st.write("### تحليل أداء المحتوى")
if st.session_state.performance_data is not None and not st.session_state.performance_data.empty:
if st.button("تحليل الأداء"):
with st.spinner("جاري تحليل البيانات..."):
# تحليل الأداء
analysis = analyze_content_performance(st.session_state.performance_data)
# عرض النتائج
st.write("### ملخص الأداء")
col1, col2, col3 = st.columns(3)
with col1:
st.metric("متوسط المشاهدات", f"{analysis['avg_metrics']['avg_views']:.0f}")
with col2:
st.metric("متوسط التفاعل", f"{analysis['avg_metrics']['avg_engagement']:.2f}%")
with col3:
st.metric("متوسط التحويل", f"{analysis['avg_metrics']['avg_conversion']:.2f}%")
if analysis['best_content']:
st.write("### أفضل محتوى")
st.write(f"المعرف: {analysis['best_content']['content_id']}")
st.write(f"النوع: {analysis['best_content']['content_type']}")
st.write(f"معدل التحويل: {analysis['best_content']['conversion']:.2f}%")
if analysis['worst_content']:
st.write("### أسوأ محتوى")
st.write(f"المعرف: {analysis['worst_content']['content_id']}")
st.write(f"النوع: {analysis['worst_content']['content_type']}")
st.write(f"معدل التحويل: {analysis['worst_content']['conversion']:.2f}%")
if not analysis['correlations'].empty:
st.write("### العلاقات بين المقاييس")
st.dataframe(analysis['correlations'])
# عرض الرسوم البيانية
st.write("### الرسوم البيانية")
fig = create_performance_charts(st.session_state.performance_data)
st.pyplot(fig)
# تحليل أداء الكلمات المفتاحية
if 'keywords' in st.session_state.performance_data.columns:
st.write("### تحليل أداء الكلمات المفتاحية")
keywords_analysis = analyze_content_keywords_performance(st.session_state.performance_data)
if keywords_analysis['top_keywords']:
st.write("#### أفضل الكلمات المفتاحية أداءً:")
for keyword in keywords_analysis['top_keywords']:
st.write(f"- {keyword['keyword']}: معدل التحويل {keyword['performance']['avg_conversion']:.2f}%")
# عرض رسم بياني لأداء الكلمات المفتاحية
fig = create_keyword_performance_chart(keywords_analysis)
st.pyplot(fig)
else:
st.info("لا توجد بيانات أداء كافية للتحليل")
with tab3:
st.write("### اتجاهات الأداء بمرور الوقت")
days = st.slider("عدد الأيام للتحليل:", min_value=7, max_value=90, value=30)
if st.button("تحليل الاتجاهات"):
with st.spinner("جاري تحليل اتجاهات الأداء..."):
trends = analyze_performance_trends(days)
if trends['trend_views'] or trends['trend_engagement'] or trends['trend_conversion']:
# عرض اتجاهات المشاهدات
if trends['trend_views']:
st.write("#### اتجاه المشاهدات")
views_df = pd.DataFrame(trends['trend_views'])
st.line_chart(views_df.set_index('date')['value'])
# عرض اتجاهات التفاعل
if trends['trend_engagement']:
st.write("#### اتجاه التفاعل")
engagement_df = pd.DataFrame(trends['trend_engagement'])
st.line_chart(engagement_df.set_index('date')['value'])
# عرض اتجاهات التحويل
if trends['trend_conversion']:
st.write("#### اتجاه التحويل")
conversion_df = pd.DataFrame(trends['trend_conversion'])
st.line_chart(conversion_df.set_index('date')['value'])
# عرض أفضل وأسوأ يوم
if trends['best_day']:
st.write("#### أفضل يوم أداءً")
st.write(f"التاريخ: {trends['best_day']['date']}")
st.write(f"المشاهدات: {trends['best_day']['views']:.0f}")
st.write(f"التفاعل: {trends['best_day']['engagement']:.2f}%")
st.write(f"التحويل: {trends['best_day']['conversion']:.2f}%")
if trends['worst_day']:
st.write("#### أسوأ يوم أداءً")
st.write(f"التاريخ: {trends['worst_day']['date']}")
st.write(f"المشاهدات: {trends['worst_day']['views']:.0f}")
st.write(f"التفاعل: {trends['worst_day']['engagement']:.2f}%")
st.write(f"التحويل: {trends['worst_day']['conversion']:.2f}%")
else:
st.info(f"لا توجد بيانات كافية لتحليل الاتجاهات خلال الـ {days} يوم الماضية")
elif choice == "إدارة البيانات":
st.subheader("إدارة مجموعات البيانات")
tab1, tab2, tab3 = st.tabs(["استكشاف البيانات", "تصفية البيانات", "تحليل البيانات"])
# إضافة زر لتحميل البيانات الحقيقية
if st.sidebar.button("تحميل بيانات حقيقية"):
with st.spinner("جاري تحميل البيانات الحقيقية..."):
st.session_state.tourism_dataset = load_tourism_datasets()
st.sidebar.success("تم تحميل البيانات الحقيقية بنجاح!")
# تحميل مجموعة البيانات إذا لم تكن محملة بالفعل
if 'tourism_dataset' not in st.session_state:
with st.spinner("جاري تحميل البيانات..."):
st.session_state.tourism_dataset = load_tourism_datasets()
with tab1:
st.write("### استكشاف بيانات الشاليهات")
# عرض البيانات
if st.session_state.tourism_dataset is not None:
df = st.session_state.tourism_dataset.to_pandas()
st.dataframe(df)
# معلومات إحصائية
st.write("### معلومات إحصائية")
st.write(f"عدد الشاليهات: {len(df)}")
if 'price' in df.columns:
st.write(f"متوسط السعر: {df['price'].mean():.2f} جنيه")
if 'rating' in df.columns:
st.write(f"متوسط التقييم: {df['rating'].mean():.2f} من 5")
# استخراج الكلمات المفتاحية من الأوصاف
if 'description' in df.columns:
if st.button("استخراج الكلمات المفتاحية"):
with st.spinner("جاري استخراج الكلمات المفتاحية..."):
keywords = extract_keywords_from_dataset(st.session_state.tourism_dataset, 'description')
st.write("### الكلمات المفتاحية الشائعة:")
keywords_df = pd.DataFrame(keywords)
st.dataframe(keywords_df)
# عرض سحابة الكلمات
st.write("### سحابة الكلمات:")
fig, ax = plt.subplots(figsize=(10, 6))
ax.bar(keywords_df['word'][:15], keywords_df['count'][:15])
plt.xticks(rotation=45, ha='right')
st.pyplot(fig)
else:
st.info("لا توجد بيانات متاحة. يرجى تحميل البيانات أولاً.")
with tab2:
st.write("### تصفية البيانات حسب المعايير")
if st.session_state.tourism_dataset is not None:
df = st.session_state.tourism_dataset.to_pandas()
# معايير التصفية
col1, col2 = st.columns(2)
with col1:
if 'location' in df.columns:
location_filter = st.selectbox("الموقع:", ["", *df['location'].unique()])
else:
location_filter = ""
if 'target_audience' in df.columns:
audience_filter = st.selectbox("الجمهور المستهدف:", ["", *df['target_audience'].unique()])
else:
audience_filter = ""
with col2:
if 'season' in df.columns:
season_filter = st.selectbox("الموسم:", ["", *df['season'].unique()])
else:
season_filter = ""
if 'rating' in df.columns:
min_rating = st.slider("الحد الأدنى للتقييم:", 0.0, 5.0, 0.0, 0.1)
else:
min_rating = 0.0
# تطبيق التصفية
if st.button("تصفية البيانات"):
criteria = {}
if location_filter:
criteria['location'] = location_filter
if audience_filter:
criteria['target_audience'] = audience_filter
if season_filter:
criteria['season'] = season_filter
# تصفية البيانات
filtered_dataset = filter_dataset_by_criteria(st.session_state.tourism_dataset, criteria)
# تصفية حسب التقييم (لا يمكن استخدامها مباشرة في filter_dataset_by_criteria)
filtered_df = filtered_dataset.to_pandas()
if min_rating > 0 and 'rating' in filtered_df.columns:
filtered_df = filtered_df[filtered_df['rating'] >= min_rating]
# عرض النتائج
st.write(f"تم العثور على {len(filtered_df)} شاليه مطابق للمعايير:")
st.dataframe(filtered_df)
# حفظ البيانات المصفاة
if st.button("حفظ البيانات المصفاة"):
filename = f"filtered_chalets_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.csv"
filtered_df.to_csv(filename, index=False)
st.success(f"تم حفظ البيانات المصفاة في {filename}")
else:
st.info("لا توجد بيانات متاحة. يرجى تحميل البيانات أولاً.")
with tab3:
st.write("### تحليل بيانات الشاليهات")
if st.session_state.tourism_dataset is not None:
if st.button("تحليل البيانات"):
with st.spinner("جاري تحليل البيانات..."):
analysis = analyze_dataset(st.session_state.tourism_dataset)
# عرض التحليل
st.write(f"عدد الشاليهات: {analysis['count']}")
# توزيع المواقع
if analysis['locations']:
st.write("### توزيع المواقع")
location_df = pd.DataFrame({
'الموقع': list(analysis['locations'].keys()),
'العدد': list(analysis['locations'].values())
})
st.bar_chart(location_df.set_index('الموقع'))
# توزيع الجمهور المستهدف
if analysis['audience_distribution']:
st.write("### توزيع الجمهور المستهدف")
audience_df = pd.DataFrame({
'الجمهور': list(analysis['audience_distribution'].keys()),
'العدد': list(analysis['audience_distribution'].values())
})
st.bar_chart(audience_df.set_index('الجمهور'))
# توزيع المواسم
if analysis['season_distribution']:
st.write("### توزيع المواسم")
season_df = pd.DataFrame({
'الموسم': list(analysis['season_distribution'].keys()),
'العدد': list(analysis['season_distribution'].values())
})
st.bar_chart(season_df.set_index('الموسم'))
else:
st.info("لا توجد بيانات متاحة. يرجى تحميل البيانات أولاً.")
elif choice == "استهداف الجمهور":
st.subheader("استهداف الجمهور المناسب")
tab1, tab2, tab3 = st.tabs(["تحليل شرائح الجمهور", "إنشاء محتوى مستهدف", "توصيات التسويق"])
# تحميل بيانات الجمهور
audience_data_source = st.sidebar.radio(
"مصدر بيانات الجمهور:",
["تحميل من ملف", "استخراج من بيانات الشاليهات"]
)
if audience_data_source == "تحميل من ملف":
uploaded_file = st.sidebar.file_uploader("قم برفع ملف بيانات الجمهور", type=["csv", "xlsx"])
if uploaded_file is not None:
if uploaded_file.name.endswith('.csv'):
audience_df = pd.read_csv(uploaded_file)
else:
audience_df = pd.read_excel(uploaded_file)
st.session_state.audience_data = audience_df
st.sidebar.success("تم تحميل بيانات الجمهور بنجاح!")
elif audience_data_source == "استخراج من بيانات الشاليهات" and st.session_state.chalet_data is not None:
if st.sidebar.button("استخراج بيانات الجمهور"):
# هنا يمكن إضافة منطق لاستخراج بيانات الجمهور من بيانات الشاليهات
st.sidebar.info("هذه الميزة قيد التطوير")
with tab1:
st.write("### تحليل شرائح الجمهور")
if st.session_state.audience_data is not None:
st.dataframe(st.session_state.audience_data)
if st.button("تحليل شرائح الجمهور"):
with st.spinner("جاري تحليل بيانات الجمهور..."):
# إنشاء شرائح الجمهور
segmentation_result = create_audience_segments(st.session_state.audience_data)
if segmentation_result:
st.session_state.segmented_data = segmentation_result['segmented_data']
st.session_state.segment_profiles = analyze_audience_segments(st.session_state.segmented_data)
# عرض ملخص التحليل
st.write("### ملخص شرائح الجمهور")
for segment, profile in st.session_state.segment_profiles.items():
with st.expander(f"{segment} - حجم: {profile['size']} مستخدم"):
st.write(f"**متوسط تكرار الحجز:** {profile['avg_booking_frequency']:.2f} مرات سنوياً")
st.write(f"**متوسط مدة الإقامة:** {profile['avg_stay_duration']:.2f} أيام")
st.write(f"**حساسية السعر:** {profile['price_sensitivity']:.2f} (0 = غير حساس، 1 = حساس جداً)")
st.write(f"**معدل الاستجابة للإعلانات:** {profile['response_rate']:.2f}")
if 'age_distribution' in profile:
st.write("**توزيع الفئات العمرية:**")
for age, count in profile['age_distribution'].items():
st.write(f"- {age}: {count} مستخدم")
if 'top_interests' in profile:
st.write("**أهم الاهتمامات:**")
for interest, count in profile['top_interests'].items():
st.write(f"- {interest}: {count} مستخدم")
# عرض الرسوم البيانية
st.write("### توزيع شرائح الجمهور")
fig = create_segment_visualization(st.session_state.segmented_data, segmentation_result['features'])
st.pyplot(fig)
# حفظ شرائح الجمهور
if st.button("حفظ شرائح الجمهور"):
filename = f"audience_segments_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.csv"
save_audience_segments(st.session_state.segmented_data, filename)
st.success(f"تم حفظ شرائح الجمهور في {filename}")
else:
st.error("حدث خطأ أثناء تحليل شرائح الجمهور")
else:
st.info("يرجى تحميل بيانات الجمهور أولاً")
with tab2:
st.write("### إنشاء محتوى مستهدف")
# اختيار الشاليه
chalet_name = st.text_input("اسم الشاليه:")
chalet_location = st.text_input("موقع الشاليه:")
# اختيار شريحة الجمهور
if 'segment_profiles' in st.session_state:
segment_options = list(st.session_state.segment_profiles.keys())
selected_segment = st.selectbox("اختر شريحة الجمهور المستهدفة:", segment_options)
if st.button("إنشاء محتوى مستهدف"):
if chalet_name and chalet_location:
with st.spinner("جاري إنشاء المحتوى المستهدف..."):
chalet_data = {
"name": chalet_name,
"location": chalet_location
}
segment_profile = st.session_state.segment_profiles[selected_segment]
content_recommendations = generate_targeted_content(chalet_data, segment_profile)
# عرض التوصيات
st.write(f"### محتوى مستهدف لـ {selected_segment}")
st.write(f"**نوع المحتوى المناسب:** {content_recommendations['content_type']}")
st.write("**الرسائل الرئيسية:**")
for message in content_recommendations['key_messages']:
st.write(f"- {message}")
st.write("**التركيز في الصور:**")
for focus in content_recommendations['image_focus']:
st.write(f"- {focus}")
st.write("**قنوات التسويق الموصى بها:**")
for channel in content_recommendations['marketing_channels']:
st.write(f"- {channel}")
else:
st.error("يرجى إدخال اسم الشاليه وموقعه")
else:
st.info("يرجى تحليل شرائح الجمهور أولاً في التبويب السابق")
with tab3:
st.write("### توصيات التسويق")
if 'segment_profiles' in st.session_state:
# عرض توصيات التسويق لكل شريحة
for segment, profile in st.session_state.segment_profiles.items():
with st.expander(f"توصيات لـ {segment}"):
st.write("**استراتيجية التسعير:**")
if profile['price_sensitivity'] > 0.7:
st.write("- التركيز على القيمة مقابل المال")
st.write("- تقديم عروض وخصومات متكررة")
st.write("- إبراز الميزات الأساسية بسعر تنافسي")
else:
st.write("- التركيز على الجودة والتميز")
st.write("- تقديم باقات شاملة بأسعار مميزة")
st.write("- إبراز الميزات الفريدة والخدمات الإضافية")
st.write("**قنوات التسويق:**")
if profile['response_rate'] > 0.15:
st.write("- التركيز على وسائل التواصل الاجتماعي")
st.write("- حملات البريد الإلكتروني المستهدفة")
st.write("- التسويق عبر المؤثرين")
else:
st.write("- التركيز على محركات البحث")
st.write("- منصات حجز السفر والفنادق")
st.write("- برامج الولاء والإحالة")
st.write("**نوع المحتوى:**")
if profile['avg_stay_duration'] > 5:
st.write("- محتوى تفصيلي عن المرافق والخدمات")
st.write("- دليل للأنشطة والمعالم القريبة")
st.write("- قصص وتجارب الإقامات الطويلة")
else:
st.write("- محتوى مختصر يركز على أهم الميزات")
st.write("- عروض عطلة نهاية الأسبوع")
st.write("- صور جذابة وفيديوهات قصيرة")
else:
st.info("يرجى تحليل شرائح الجمهور أولاً في التبويب الأول")
elif choice == "تدريب النماذج":
st.subheader("تدريب النماذج")
if not st.session_state.logged_in_hf:
if st.button("تسجيل الدخول إلى Hugging Face"):
st.session_state.logged_in_hf = login_to_huggingface()
if st.session_state.logged_in_hf:
models = get_available_models()
selected_model = st.selectbox("اختر النموذج للتدريب", [m['name'] for m in models])
model_info = next(m for m in models if m['name'] == selected_model)
st.write(f"وصف النموذج: {model_info['description']}")
st.write(f"تنسيق البيانات المطلوب: {model_info['data_format']}")
# مصدر بيانات التدريب
data_source = st.radio(
"مصدر بيانات التدريب:",
["تحميل من ملف", "إنشاء من بيانات الشاليهات"]
)
if data_source == "تحميل من ملف":
uploaded_file = st.file_uploader("قم برفع ملف CSV يحتوي على بيانات التدريب", type="csv")
if uploaded_file is not None:
if st.button("بدء التدريب"):
with st.spinner("جاري تدريب النموذج..."):
if model_info['id'] == 'sentiment':
dataset = prepare_sentiment_data(uploaded_file)
if dataset:
results = train_sentiment_model(dataset)
if results:
st.success(f"تم تدريب النموذج بنجاح! مسار النموذج: {results['model_path']}")
st.write("نتائج التقييم:", results['eval_results'])
else:
st.error("حدث خطأ أثناء تدريب النموذج")
else:
st.error("فشل في تجهيز البيانات للتدريب")
else:
st.info("تدريب هذا النوع من النماذج قيد التطوير")
elif data_source == "إنشاء من بيانات الشاليهات" and st.session_state.chalet_data is not None:
if st.button("إنشاء بيانات التدريب"):
with st.spinner("جاري إنشاء بيانات التدريب..."):
training_data = create_training_data_from_chalets(st.session_state.chalet_data, model_info['id'])
if training_data is not None and not training_data.empty:
st.write("### بيانات التدريب المُنشأة:")
st.dataframe(training_data)
# حفظ بيانات التدريب
filename = f"{model_info['id']}_training_data_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.csv"
save_training_data(training_data, filename)
st.success(f"تم حفظ بيانات التدريب في {filename}")
# تدريب النموذج
if st.button("بدء التدريب على البيانات المُنشأة"):
with st.spinner("جاري تدريب النموذج..."):
if model_info['id'] == 'sentiment':
dataset = prepare_sentiment_data(filename)
if dataset:
results = train_sentiment_model(dataset)
if results:
st.success(f"تم تدريب النموذج بنجاح! مسار النموذج: {results['model_path']}")
st.write("نتائج التقييم:", results['eval_results'])
else:
st.error("حدث خطأ أثناء تدريب النموذج")
else:
st.error("فشل في تجهيز البيانات للتدريب")
else:
st.info("تدريب هذا النوع من النماذج قيد التطوير")
else:
st.error("فشل في إنشاء بيانات التدريب")
else:
st.info("يرجى تحميل بيانات الشاليهات أولاً")
else:
st.warning("يرجى تسجيل الدخول إلى Hugging Face أولاً")
elif choice == "أتمتة المحتوى":
st.subheader("أتمتة إنشاء المحتوى")
tab1, tab2, tab3 = st.tabs(["إنشاء محتوى تلقائي", "إنشاء محتوى دفعي", "محتوى المواضيع الرائجة"])
with tab1:
st.write("### إنشاء محتوى تلقائي لشاليه محدد")
# اختيار شاليه
if st.session_state.chalet_data is not None:
chalet_options = st.session_state.chalet_data['name'].tolist()
selected_chalet_name = st.selectbox("اختر شاليه:", [""] + chalet_options)
style = st.selectbox("اختر أسلوب المقال:", ["informative", "promotional", "narrative"])
target_audience = st.selectbox("الجمهور المستهدف:", ["عام", "عائلات", "شباب", "كبار السن"])
if st.button("إنشاء محتوى تلقائي"):
if selected_chalet_name:
with st.spinner("جاري إنشاء المحتوى التلقائي..."):
# استخراج بيانات الشاليه المحدد
selected_chalet = st.session_state.chalet_data[st.session_state.chalet_data['name'] == selected_chalet_name].iloc[0].to_dict()
# إنشاء المحتوى
result = automated_content_creation(selected_chalet, style, target_audience)
if result:
st.success(f"تم إنشاء المحتوى بنجاح وحفظه في {result['save_path']}")
st.write(f"### {result['title']}")
st.write(f"*{result['meta_description']}*")
st.write("### المقال:")
st.write(result['article'])
st.write("### الكلمات المفتاحية:")
st.write(", ".join(result['keywords']))
st.write("### تحليل المحتوى:")
col1, col2 = st.columns(2)
with col1:
st.write("**قابلية القراءة:**")
st.write(f"مستوى القراءة: {result['analysis']['readability']['level']}")
st.write(f"متوسط طول الجملة: {result['analysis']['readability']['avg_sentence_length']:.1f} كلمة")
with col2:
st.write("**تحليل المشاعر:**")
sentiment_label = "إيجابي" if result['analysis']['sentiment']['label'] == "POSITIVE" else "سلبي" if result['analysis']['sentiment']['label'] == "NEGATIVE" else "محايد"
st.write(f"النبرة العامة: {sentiment_label} (الثقة: {result['analysis']['sentiment']['score']:.2f})")
st.write("**اكتمال المحتوى:**")
st.write(f"درجة الاكتمال: {result['analysis']['completeness']['completeness_score']:.1f}%")
if result['analysis']['improvements']['improvements']:
st.write("**اقتراحات التحسين:**")
for improvement in result['analysis']['improvements']['improvements']:
st.write(f"- {improvement}")
else:
st.error("حدث خطأ أثناء إنشاء المحتوى التلقائي")
else:
st.error("يرجى اختيار شاليه")
else:
st.info("يرجى تحميل بيانات الشاليهات أولاً من قسم جمع البيانات")
with tab2:
st.write("### إنشاء محتوى دفعي لمجموعة من الشاليهات")
if st.session_state.chalet_data is not None:
style = st.selectbox("اختر أسلوب المقالات:", ["informative", "promotional", "narrative"], key="batch_style")
target_audience = st.selectbox("الجمهور المستهدف:", ["عام", "عائلات", "شباب", "كبار السن"], key="batch_audience")
# اختيار عدد الشاليهات
num_chalets = st.slider("عدد الشاليهات:", 1, len(st.session_state.chalet_data), 5)
if st.button("إنشاء محتوى دفعي"):
with st.spinner(f"جاري إنشاء محتوى لـ {num_chalets} شاليه..."):
# اختيار عينة عشوائية من الشاليهات
sample_chalets = st.session_state.chalet_data.sample(num_chalets)
# إنشاء المحتوى
results = batch_content_creation(sample_chalets, style, target_audience)
if results:
st.success(f"تم إنشاء {len(results)} مقال بنجاح")
# عرض ملخص النتائج
for i, result in enumerate(results):
with st.expander(f"مقال {i+1}: {result['title']}"):
st.write(f"*{result['meta_description']}*")
st.write(f"الكلمات المفتاحية: {', '.join(result['keywords'])}")
st.write(f"مسار الحفظ: {result['save_path']}")
else:
st.error("حدث خطأ أثناء إنشاء المحتوى الدفعي")
else:
st.info("يرجى تحميل بيانات الشاليهات أولاً من قسم جمع البيانات")
with tab3:
st.write("### إنشاء محتوى للمواضيع الرائجة")
if st.button("إنشاء محتوى للمواضيع الرائجة"):
with st.spinner("جاري استخراج المواضيع الرائجة وإنشاء محتوى ذي صلة..."):
results = create_content_for_trending_topics()
if results:
st.success(f"تم إنشاء {len(results)} مقال للمواضيع الرائجة بنجاح")
# عرض ملخص النتائج
for i, result in enumerate(results):
with st.expander(f"مقال {i+1}: {result['title']}"):
st.write(f"*{result['meta_description']}*")
st.write(f"الكلمات المفتاحية: {', '.join(result['keywords'])}")
st.write(f"مسار الحفظ: {result['save_path']}")
else:
st.warning("لم يتم إنشاء أي محتوى للمواضيع الرائجة")
elif choice == "أتمتة المحتوى":
st.subheader("أتمتة إنشاء المحتوى")
tab1, tab2, tab3 = st.tabs(["إنشاء محتوى تلقائي", "إنشاء محتوى دفعي", "محتوى المواضيع الرائجة"])
with tab1:
st.write("### إنشاء محتوى تلقائي لشاليه محدد")
# اختيار شاليه
if st.session_state.chalet_data is not None:
chalet_options = st.session_state.chalet_data['name'].tolist()
selected_chalet_name = st.selectbox("اختر شاليه:", [""] + chalet_options)
style = st.selectbox("اختر أسلوب المقال:", ["informative", "promotional", "narrative"])
target_audience = st.selectbox("الجمهور المستهدف:", ["عام", "عائلات", "شباب", "كبار السن"])
if st.button("إنشاء محتوى تلقائي"):
if selected_chalet_name:
with st.spinner("جاري إنشاء المحتوى التلقائي..."):
# استخراج بيانات الشاليه المحدد
selected_chalet = st.session_state.chalet_data[st.session_state.chalet_data['name'] == selected_chalet_name].iloc[0].to_dict()
# إنشاء المحتوى
result = automated_content_creation(selected_chalet, style, target_audience)
if result:
st.success(f"تم إنشاء المحتوى بنجاح وحفظه في {result['save_path']}")
st.write(f"### {result['title']}")
st.write(f"*{result['meta_description']}*")
st.write("### المقال:")
st.write(result['article'])
st.write("### الكلمات المفتاحية:")
st.write(", ".join(result['keywords']))
st.write("### تحليل المحتوى:")
col1, col2 = st.columns(2)
with col1:
st.write("**قابلية القراءة:**")
st.write(f"مستوى القراءة: {result['analysis']['readability']['level']}")
st.write(f"متوسط طول الجملة: {result['analysis']['readability']['avg_sentence_length']:.1f} كلمة")
with col2:
st.write("**تحليل المشاعر:**")
sentiment_label = "إيجابي" if result['analysis']['sentiment']['label'] == "POSITIVE" else "سلبي" if result['analysis']['sentiment']['label'] == "NEGATIVE" else "محايد"
st.write(f"النبرة العامة: {sentiment_label} (الثقة: {result['analysis']['sentiment']['score']:.2f})")
st.write("**اكتمال المحتوى:**")
st.write(f"درجة الاكتمال: {result['analysis']['completeness']['completeness_score']:.1f}%")
if result['analysis']['improvements']['improvements']:
st.write("**اقتراحات التحسين:**")
for improvement in result['analysis']['improvements']['improvements']:
st.write(f"- {improvement}")
else:
st.error("حدث خطأ أثناء إنشاء المحتوى التلقائي")
else:
st.error("يرجى اختيار شاليه")
else:
st.info("يرجى تحميل بيانات الشاليهات أولاً من قسم جمع البيانات")
with tab2:
st.write("### إنشاء محتوى دفعي لمجموعة من الشاليهات")
if st.session_state.chalet_data is not None:
style = st.selectbox("اختر أسلوب المقالات:", ["informative", "promotional", "narrative"], key="batch_style")
target_audience = st.selectbox("الجمهور المستهدف:", ["عام", "عائلات", "شباب", "كبار السن"], key="batch_audience")
# اختيار عدد الشاليهات
num_chalets = st.slider("عدد الشاليهات:", 1, len(st.session_state.chalet_data), 5)
if st.button("إنشاء محتوى دفعي"):
with st.spinner(f"جاري إنشاء محتوى لـ {num_chalets} شاليه..."):
# اختيار عينة عشوائية من الشاليهات
sample_chalets = st.session_state.chalet_data.sample(num_chalets)
# إنشاء المحتوى
results = batch_content_creation(sample_chalets, style, target_audience)
if results:
st.success(f"تم إنشاء {len(results)} مقال بنجاح")
# عرض ملخص النتائج
for i, result in enumerate(results):
with st.expander(f"مقال {i+1}: {result['title']}"):
st.write(f"*{result['meta_description']}*")
st.write(f"الكلمات المفتاحية: {', '.join(result['keywords'])}")
st.write(f"مسار الحفظ: {result['save_path']}")
else:
st.error("حدث خطأ أثناء إنشاء المحتوى الدفعي")
else:
st.info("يرجى تحميل بيانات الشاليهات أولاً من قسم جمع البيانات")
with tab3:
st.write("### إنشاء محتوى للمواضيع الرائجة")
if st.button("إنشاء محتوى للمواضيع الرائجة"):
with st.spinner("جاري استخراج المواضيع الرائجة وإنشاء محتوى ذي صلة..."):
results = create_content_for_trending_topics()
if results:
st.success(f"تم إنشاء {len(results)} مقال للمواضيع الرائجة بنجاح")
# عرض ملخص النتائج
for i, result in enumerate(results):
with st.expander(f"مقال {i+1}: {result['title']}"):
st.write(f"*{result['meta_description']}*")
st.write(f"الكلمات المفتاحية: {', '.join(result['keywords'])}")
st.write(f"مسار الحفظ: {result['save_path']}")
else:
st.warning("لم يتم إنشاء أي محتوى للمواضيع الرائجة")
if __name__ == "__main__":
pass