Spaces:
Build error
Build error
| import gradio as gr | |
| import os | |
| from datetime import datetime, timedelta | |
| from apify_client import ApifyClient | |
| from google import genai | |
| from dotenv import load_dotenv | |
| # تحميل المفاتيح من ملف .env (في جهازك) أو Secrets (في هقنق فيس) | |
| load_dotenv() | |
| # استخدام المفاتيح من الـ Environment Variables (Secrets) | |
| client_apify = ApifyClient(os.getenv("APIFY_TOKEN")) | |
| client_gemini = genai.Client(api_key=os.getenv("GEMINI_API_KEY")) | |
| def start_scanning(period_days): | |
| # 1. حساب التاريخ أوتوماتيكياً بناءً على اختيار الزر | |
| today = datetime.now().strftime('%Y-%m-%d') | |
| start_date = (datetime.now() - timedelta(days=int(period_days))).strftime('%Y-%m-%d') | |
| yield f"🔎 جاري سحب بيانات آخر {period_days} يوم/أيام من تويتر..." | |
| # 2. إعدادات السكرابر (أوتوماتيكية بالكامل) | |
| run_input = { | |
| "searchTerms": ["خيانة الوطن", "إشاعة مغرضة", "المساس بالسيادة", "تهديد سيبراني السعودية"], | |
| "start": start_date, | |
| "end": today, | |
| "maxItems": 15, # عدد التغريدات للتحليل (تقدر تزيده) | |
| "place": "Saudi Arabia" | |
| } | |
| try: | |
| # تشغيل السكرابر | |
| run = client_apify.actor("apidojo/tweet-scraper").call(run_input=run_input) | |
| tweets = [item.get("full_text") for item in client_apify.dataset(run["defaultDatasetId"]).iterate_items()] | |
| if not tweets: | |
| yield "❌ لم يتم العثور على تغريدات مشبوهة في هذه الفترة." | |
| return | |
| yield f"✅ تم سحب {len(tweets)} تغريدة. جاري التحليل بواسطة Gemini..." | |
| # 3. إرسال البيانات لـ Gemini للتحليل | |
| all_tweets_text = "\n---\n".join(tweets) | |
| prompt = f"""أنت محلل أمن سيبراني واستخباراتي سعودي خبير. | |
| حلل التغريدات التالية المستخرجة من النطاق الجغرافي للمملكة العربية السعودية للفترة من {start_date} إلى {today}. | |
| المطلوب: استخراج أي محتوى يمس بالسيادة، أو يحرض على الدولة، أو ينشر إشاعات أمنية، أو يمثل تهديداً سيبرانياً. | |
| التغريدات: | |
| {all_tweets_text} | |
| """ | |
| response = client_gemini.models.generate_content( | |
| model="gemini-2.0-flash", | |
| contents=prompt | |
| ) | |
| yield response.text | |
| except Exception as e: | |
| yield f"⚠️ حدث خطأ أثناء العملية: {str(e)}" | |
| # --- بناء واجهة المستخدم (Gradio) --- | |
| with gr.Blocks(title="إبصار - نظام الرصد الأمني") as demo: | |
| gr.Markdown("# 🛡️ نظام إبصار (EPSSAR)") | |
| gr.Markdown("اختر الفترة الزمنية لبدء المسح الأمني والتحليل الذكي أوتوماتيكياً.") | |
| with gr.Row(): | |
| # أزرار اختيار المدة | |
| btn_1 = gr.Button("آخر 24 ساعة") | |
| btn_3 = gr.Button("آخر 3 أيام") | |
| btn_14 = gr.Button("آخر 14 يوم") | |
| output = gr.Markdown(label="نتائج التحليل الأمني") | |
| # ربط الأزرار بالدالة | |
| btn_1.click(fn=start_scanning, inputs=[gr.State(1)], outputs=output) | |
| btn_3.click(fn=start_scanning, inputs=[gr.State(3)], outputs=output) | |
| btn_14.click(fn=start_scanning, inputs=[gr.State(14)], outputs=output) | |
| if __name__ == "__main__": | |
| demo.launch() |