import os import tempfile import requests from PIL import Image from io import BytesIO import PyPDF2 from urllib.parse import urlparse import speech_recognition as sr # التحقق من وجود المكتبات المطلوبة try: import moviepy.editor as mp MOVIEPY_AVAILABLE = True except ImportError: MOVIEPY_AVAILABLE = False try: import cv2 CV2_AVAILABLE = True except ImportError: CV2_AVAILABLE = False try: from pydub import AudioSegment PYDUB_AVAILABLE = True except ImportError: PYDUB_AVAILABLE = False try: import av AV_AVAILABLE = True except ImportError: AV_AVAILABLE = False # ============= وظائف تحليل الروابط ============= def analyze_url_type(url: str) -> str: """تحديد نوع الرابط بناء على النطاق""" domain = urlparse(url).netloc.lower() if "youtube.com" in domain or "youtu.be" in domain: return "YouTube" if "github.com" in domain: return "GitHub" if "twitter.com" in domain or "x.com" in domain: return "تغريدة" if domain.endswith(".pdf"): return "ملف PDF" return "موقع ويب عام" def fix_url(url: str) -> str: """إصلاح الروابط الناقصة""" if not url.startswith(("http://", "https://")): return "https://" + url.lstrip("//") return url def detect_media_type(url: str) -> str: """تحديد نوع الملف من امتداده""" url = url.lower() if url.endswith(('.jpg', '.jpeg', '.png', '.gif', '.webp')): return 'image' elif url.endswith(('.mp4', '.mov', '.avi', '.webm')): return 'video' elif url.endswith(('.mp3', '.wav', '.ogg', '.m4a')): return 'audio' elif url.endswith('.pdf'): return 'pdf' return 'link' # ============= وظائف تحليل الملفات ============= def analyze_image_from_url(image_url: str) -> str: """تحليل الصور من الروابط""" response = requests.get(image_url) response.raise_for_status() image = Image.open(BytesIO(response.content)) return f"تحليل الصورة: الحجم {image.size}، الصيغة {image.format}" def analyze_pdf_from_url(pdf_url: str) -> str: """استخراج النص من ملفات PDF""" response = requests.get(pdf_url) response.raise_for_status() with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as temp_file: temp_file.write(response.content) temp_path = temp_file.name try: with open(temp_path, "rb") as f: reader = PyPDF2.PdfReader(f) text = "".join([page.extract_text() or "" for page in reader.pages]) return f"تم استخراج النص التالي من PDF:\n{text[:500]}..." finally: os.remove(temp_path) def extract_text_from_audio_file(audio_path: str) -> str: """استخراج النص من الملفات الصوتية""" recognizer = sr.Recognizer() with sr.AudioFile(audio_path) as source: audio = recognizer.record(source) try: return recognizer.recognize_google(audio, language="ar-SA") except sr.UnknownValueError: return "لم أتمكن من التعرف على الصوت" except sr.RequestError: return "خطأ في الاتصال بخدمة التعرف على الصوت" def analyze_audio_from_url(audio_url: str) -> str: """تحليل الملفات الصوتية من الروابط""" response = requests.get(audio_url) response.raise_for_status() with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_audio: temp_audio.write(response.content) temp_path = temp_audio.name try: text = extract_text_from_audio_file(temp_path) return f"نص الصوت:\n{text}" finally: os.remove(temp_path) def analyze_video_from_url(video_url: str) -> str: """تحليل الفيديو باستخدام moviepy""" if not MOVIEPY_AVAILABLE: return "مكتبة moviepy غير متوفرة لتحليل الفيديو" response = requests.get(video_url) response.raise_for_status() with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as temp_video: temp_video.write(response.content) video_path = temp_video.name audio_path = video_path.replace(".mp4", ".wav") try: video = mp.VideoFileClip(video_path) video.audio.write_audiofile(audio_path, verbose=False, logger=None) text = extract_text_from_audio_file(audio_path) return f"نص الفيديو:\n{text}" finally: os.remove(video_path) if os.path.exists(audio_path): os.remove(audio_path) # ============= وظائف إضافية لمعالجة الفيديو ============= def process_video_with_ffmpeg(): """معالجة الفيديو باستخدام ffmpeg (إذا كان متاحًا)""" if not has_ffmpeg(): return "FFmpeg غير متوفر" try: ffmpeg.input('input.mp4').output('output.mp4', ss=10, t=5).run() return "تم معالجة الفيديو باستخدام FFmpeg" except Exception as e: return f"خطأ في معالجة الفيديو: {str(e)}" def process_video_with_cv2(): """معالجة الفيديو باستخدام OpenCV (إذا كان متاحًا)""" if not CV2_AVAILABLE: return "OpenCV غير متوفر" cap = cv2.VideoCapture('video.mp4') results = [] try: while cap.isOpened(): ret, frame = cap.read() if not ret: break # يمكن إضافة معالجة للإطارات هنا results.append(frame) return "تم معالجة الفيديو باستخدام OpenCV" finally: cap.release() def process_video_with_pydub(): """استخراج الصوت من الفيديو باستخدام pydub (إذا كان متاحًا)""" if not PYDUB_AVAILABLE: return "pydub غير متوفر" try: sound = AudioSegment.from_file("video.mp4") sound.export("audio.mp3", format="mp3") return "تم استخراج الصوت من الفيديو" except Exception as e: return f"خطأ في استخراج الصوت: {str(e)}" def process_video_with_av(): """معالجة الفيديو باستخدام PyAV (إذا كان متاحًا)""" if not AV_AVAILABLE: return "PyAV غير متوفر" try: container = av.open("video.mp4") frames = [] for frame in container.decode(video=0): frames.append(frame.to_image()) return f"تم استخراج {len(frames)} إطار من الفيديو" except Exception as e: return f"خطأ في معالجة الفيديو: {str(e)}"