| """ |
| Moharek GEO Platform - Hugging Face Space |
| """ |
|
|
| import sys |
| from pathlib import Path |
|
|
| sys.path.insert(0, str(Path(__file__).parent)) |
|
|
| import gradio as gr |
| from fastapi import FastAPI, Request |
| from fastapi.staticfiles import StaticFiles |
| from fastapi.responses import FileResponse |
|
|
| |
| from server.api import app as fastapi_app |
|
|
| |
| frontend_path = Path(__file__).parent / "frontend" |
|
|
| |
| @fastapi_app.get("/{full_path:path}") |
| async def serve_frontend(full_path: str): |
| |
| if full_path.startswith('app/'): |
| full_path = full_path[4:] |
| |
| |
| if not full_path or full_path == '/': |
| full_path = 'index.html' |
| |
| |
| file_path = frontend_path / full_path |
| |
| if file_path.exists() and file_path.is_file(): |
| return FileResponse(str(file_path)) |
| |
| |
| if '.' not in full_path: |
| html_path = frontend_path / f"{full_path}.html" |
| if html_path.exists(): |
| return FileResponse(str(html_path)) |
| |
| return {"ok": False, "error": "not found"} |
|
|
| |
| with gr.Blocks(title="Moharek GEO Platform") as demo: |
| gr.Markdown("# 🚀 Moharek GEO Platform") |
| gr.Markdown("## منصة تحسين محركات البحث بالذكاء الاصطناعي") |
| |
| with gr.Row(): |
| website_url = gr.Textbox(label="رابط الموقع", placeholder="https://example.com") |
| org_name = gr.Textbox(label="اسم الشركة", placeholder="اسم شركتك") |
| |
| max_pages = gr.Slider(10, 100, 50, step=10, label="عدد الصفحات") |
| analyze_btn = gr.Button("🚀 ابدأ التحليل", variant="primary") |
| |
| output_status = gr.Textbox(label="حالة التحليل", lines=3) |
| output_json = gr.JSON(label="نتائج التحليل") |
| |
| gr.Markdown(""" |
| ### 🌐 الوصول الكامل |
| - [لوحة التحكم](/portal.html) |
| - [الصفحة الرئيسية](/index.html) |
| - [API Docs](/api/docs) |
| """) |
| |
| def analyze(url, name, pages): |
| if not url or not url.startswith('http'): |
| return "❌ الرجاء إدخال رابط صحيح", None |
| |
| try: |
| import requests |
| response = requests.post( |
| "http://localhost:7860/api/jobs", |
| json={"url": url, "org_name": name or "Unknown", "org_url": url, "max_pages": int(pages), "runs": 1}, |
| timeout=30 |
| ) |
| |
| if response.status_code == 200: |
| data = response.json() |
| if data.get("ok"): |
| return f"✅ تم إنشاء التحليل! Job ID: {data.get('job_id')}", data |
| return f"❌ خطأ: {data.get('error')}", None |
| return f"❌ خطأ: {response.status_code}", None |
| except Exception as e: |
| return f"❌ خطأ: {str(e)}", None |
| |
| analyze_btn.click(analyze, [website_url, org_name, max_pages], [output_status, output_json]) |
|
|
| |
| app = gr.mount_gradio_app(fastapi_app, demo, path="/gradio") |
|
|
| if __name__ == "__main__": |
| import uvicorn |
| uvicorn.run(app, host="0.0.0.0", port=7860) |
|
|