دلوقتي انا عايز اعمل صفحه فيس بوك اخباريه كل اللي ...

बनाया गया: 28 जून 2026

का उपयोग करके उत्तर दिया गया GPT-5.5 Thinking द्वारा Chat01

प्रश्न

دلوقتي انا عايز اعمل صفحه فيس بوك اخباريه
كل اللي عليك هتجيب الاخبار من https://news.google.com/
و بعدها هتجيب صوره
و هتاخد كلام الخبر و تخلي chatgpt يغير الصيغة ليخليه تشد و تكون كويسه
وخلي chatgpt يخلي الخبر دا من 3 لي 10 كلمات
و عايز برضه الكلمات دي احطها علي الصوره
و هديلك اسطنبه فيها اللوجو الخاص بيه و صوره تحطها تحت الكلام اللي هتكتبه و علامات السوشيال ميديا

مثال
https://www.skynewsarabia.com/middle-east/1878042-%D8%A5%D8%B9%D9%84%D8%A7%D9%85-%D8%A5%D8%B3%D8%B1%D8%A7%D8%A6%D9%8A%D9%84%D9%8A-%D9%8A%D9%86%D8%B4%D8%B1-%D8%A7%D9%84%D9%85%D9%84%D8%AD%D9%82-%D8%A7%D9%84%D8%B3%D8%B1%D9%8A-%D9%84%D8%A7%D8%AA%D9%81%D8%A7%D9%82-%D9%84%D8%A8%D9%86%D8%A7%D9%86-%D9%88%D8%A5%D8%B3%D8%B1%D8%A7%D8%A6%D9%8A%D9%84

العنوان : إعلام إسرائيلي ينشر "الملحق السري" لاتفاق لبنان وإسرائيل
جواها صوره
انت هتاخد الكلام دا
علام إسرائيلي ينشر "الملحق السري" لاتفاق لبنان وإسرائيل
تديه لي chatgpt يظبطه عن كده و يخليه شكله افضل و عنوان جذاب
و تحط الاستنبات كلها و بعدها تجهزلي الصوره و طول ما الاسكربت شغال يفضل يجيب في اخبار و اي خبر جديد ينزل يجهزه

विचार

Considering URL special case and answering implementation request

The user is asking for a script implementation and provided URLs. Since special rules apply when URLs are shared, I should review the provided pages before proceeding. After that, I'll guide them on implementation. I don’t think I need citations unless I reference specific page structures.

Providing a plan and a possible script

The user is asking for a Python automation script, potentially to continuously scrape Google News, but that might violate terms. A more reliable option is to use RSS feeds instead. I'll suggest using the OpenAI API to rewrite headlines and Pillow for text overlay on images. I'll clarify legal concerns like copyright and scraping limitations, and let the user know they need to provide assets like logos and templates.

Outlining the code structure for automation

Since the user hasn't provided files, I can still provide placeholders for the code structure. I'll focus on showing how to use the OpenAI API for rewriting, and suggest dependencies like Pillow and libraries for Arabic text shaping. The script will fetch news via Google News RSS, store URLs, and create images with the proper Arabic text overlay. I'll also mention optional Facebook auto-posting.

Thought for 34s

उत्तर

تمام، اللي إنت عايزه ممكن يتعمل أوتوماتيك بالكامل.

والفكرة مناسبة جدًا، لأن Google News فيه عناوين رئيسية وروابط أخبار بشكل مستمر، ومثال سكاي نيوز اللي إنت بعته واضح فيه العنوان + صورة الخبر + بداية المحتوى، وده يكفي عشان السكربت يلقط البيانات ويحوّلها لصورة جاهزة للنشر【turn861917view0†L29-L45】【turn861917view1†L118-L129】.

المطلوب يتعمل بالترتيب

السكربت هيشتغل كده:

  1. يسحب أحدث الأخبار من Google News
  2. يفتح رابط الخبر الأصلي
  3. يجيب:
    • عنوان الخبر
    • صورة الخبر
    • وصف/بداية الخبر
  4. يبعت العنوان/الوصف لـ ChatGPT
  5. ChatGPT يحوّل العنوان إلى Hook جذاب من 3 إلى 10 كلمات
  6. يركّب صورة بوست فيها:
    • صورة الخبر
    • العنوان المختصر
    • اللوجو
    • العناصر الثابتة في الاستنبة
    • أي صورة/شريط تحت العنوان
    • أيقونات السوشيال
  7. يحفظ الصورة في فولدر
  8. يعلّم الخبر إنه اتنشر عشان ما يتكررش
  9. يفضل شغال ويستقبل أي خبر جديد

أفضل طريقة تنفيذ

بدل ما نكشط واجهة Google News نفسها، الأفضل نستخدم RSS feed الخاص بـ Google News
لأنه:

  • أسرع
  • أنظف
  • أقل عرضة إنه يبوظ

مثال:

txt
https://news.google.com/rss?hl=ar&gl=EG&ceid=EG:ar

اللي هتحتاجه

1) تثبيت المكتبات

bash
pip install requests beautifulsoup4 feedparser pillow python-bidi arabic-reshaper openai python-dotenv lxml

2) ترتيب الملفات

اعمل فولدر بالشكل ده:

txt
project/ ├── bot.py ├── .env ├── assets/ │ ├── template.png │ ├── logo.png │ ├── social_icons.png │ ├── under_text.png │ └── Cairo-Bold.ttf ├── output/ └── state/

3) ملف .env

حط فيه مفتاح OpenAI:

env
OPENAI_API_KEY=ضع_المفتاح_هنا

السكربت الكامل

ده سكربت جاهز كبداية قوية:

python
import os import io import re import time import json import textwrap import requests import feedparser from bs4 import BeautifulSoup from urllib.parse import urlparse from PIL import Image, ImageDraw, ImageFont, ImageOps from dotenv import load_dotenv import arabic_reshaper from bidi.algorithm import get_display from openai import OpenAI # ========================= # الإعدادات # ========================= load_dotenv() OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") client = OpenAI(api_key=OPENAI_API_KEY) RSS_URL = "https://news.google.com/rss?hl=ar&gl=EG&ceid=EG:ar" CHECK_INTERVAL = 300 # كل 5 دقائق TEMPLATE_PATH = "assets/template.png" LOGO_PATH = "assets/logo.png" SOCIAL_ICONS_PATH = "assets/social_icons.png" UNDER_TEXT_PATH = "assets/under_text.png" FONT_PATH = "assets/Cairo-Bold.ttf" OUTPUT_DIR = "output" STATE_DIR = "state" SEEN_FILE = os.path.join(STATE_DIR, "seen.json") HEADERS = { "User-Agent": "Mozilla/5.0" } os.makedirs(OUTPUT_DIR, exist_ok=True) os.makedirs(STATE_DIR, exist_ok=True) # ========================= # أدوات مساعدة # ========================= def load_seen(): if os.path.exists(SEEN_FILE): with open(SEEN_FILE, "r", encoding="utf-8") as f: return set(json.load(f)) return set() def save_seen(seen): with open(SEEN_FILE, "w", encoding="utf-8") as f: json.dump(list(seen), f, ensure_ascii=False, indent=2) def clean_filename(text): text = re.sub(r'[\\/*?:"<>|]', "", text) text = re.sub(r"\s+", "_", text.strip()) return text[:120] def reshape_ar(text): reshaped = arabic_reshaper.reshape(text) return get_display(reshaped) def wrap_arabic_text(draw, text, font, max_width): words = text.split() lines = [] current = "" for word in words: test = (current + " " + word).strip() shaped = reshape_ar(test) bbox = draw.textbbox((0, 0), shaped, font=font) width = bbox[2] - bbox[0] if width <= max_width: current = test else: if current: lines.append(current) current = word if current: lines.append(current) return lines def download_image(url): try: r = requests.get(url, headers=HEADERS, timeout=20) r.raise_for_status() return Image.open(io.BytesIO(r.content)).convert("RGB") except Exception: return None def image_fit(img, size): return ImageOps.fit(img, size, method=Image.LANCZOS) def get_domain_name(url): try: domain = urlparse(url).netloc.replace("www.", "") return domain except: return "news source" # ========================= # سحب الأخبار # ========================= def fetch_google_news(): feed = feedparser.parse(RSS_URL) items = [] for entry in feed.entries: title = entry.get("title", "").strip() link = entry.get("link", "").strip() published = entry.get("published", "").strip() if title and link: items.append({ "title": title, "link": link, "published": published }) return items def resolve_final_url(google_news_url): try: r = requests.get(google_news_url, headers=HEADERS, timeout=20, allow_redirects=True) return r.url except Exception: return google_news_url # ========================= # استخراج بيانات الخبر # ========================= def extract_article_data(url): try: r = requests.get(url, headers=HEADERS, timeout=20) r.raise_for_status() soup = BeautifulSoup(r.text, "lxml") title = None desc = None image_url = None og_title = soup.find("meta", property="og:title") og_desc = soup.find("meta", property="og:description") og_image = soup.find("meta", property="og:image") if og_title and og_title.get("content"): title = og_title["content"].strip() if og_desc and og_desc.get("content"): desc = og_desc["content"].strip() if og_image and og_image.get("content"): image_url = og_image["content"].strip() if not title and soup.title: title = soup.title.get_text(strip=True) if not desc: meta_desc = soup.find("meta", attrs={"name": "description"}) if meta_desc and meta_desc.get("content"): desc = meta_desc["content"].strip() source = get_domain_name(url) return { "title": title or "", "desc": desc or "", "image_url": image_url, "source": source, "url": url } except Exception as e: print("extract_article_data error:", e) return None # ========================= # إعادة صياغة العنوان بـ ChatGPT # ========================= def generate_short_headline(original_title, description=""): prompt = f""" حوّل عنوان الخبر التالي إلى عنوان عربي جذاب للنشر على فيسبوك. الشروط: - من 3 إلى 10 كلمات فقط - يكون إخباري ومباشر وجذاب - بدون مبالغة رخيصة - بدون هاشتاج - بدون علامات اقتباس - أعد العنوان فقط لا غير العنوان الأصلي: {original_title} وصف الخبر: {description} """.strip() try: response = client.responses.create( model="gpt-5-mini", input=prompt ) text = response.output_text.strip() text = text.replace("\n", " ").strip() return text except Exception as e: print("OpenAI error:", e) return original_title[:60] # ========================= # تصميم البوست # ========================= def create_news_poster(article_image, short_title, source_name, output_path): # تحميل الاستنبة if os.path.exists(TEMPLATE_PATH): base = Image.open(TEMPLATE_PATH).convert("RGBA") else: base = Image.new("RGBA", (1080, 1350), (20, 20, 20, 255)) W, H = base.size # مناطق التوزيع - تقدر تغيّرها حسب الاستنبة news_img_box = (60, 140, 1020, 760) # left, top, right, bottom text_box = (70, 800, 1010, 1040) source_y = 1060 under_text_y = 1110 social_y = 1230 # صورة الخبر if article_image: fitted = image_fit(article_image, (news_img_box[2] - news_img_box[0], news_img_box[3] - news_img_box[1])) base.paste(fitted, (news_img_box[0], news_img_box[1])) # طبقة شفافة تحت النص overlay = Image.new("RGBA", base.size, (0, 0, 0, 0)) draw_overlay = ImageDraw.Draw(overlay) draw_overlay.rounded_rectangle(text_box, radius=25, fill=(0, 0, 0, 145)) base = Image.alpha_composite(base, overlay) draw = ImageDraw.Draw(base) # اللوجو if os.path.exists(LOGO_PATH): logo = Image.open(LOGO_PATH).convert("RGBA") logo.thumbnail((180, 180)) base.alpha_composite(logo, (50, 30)) # الخط title_font = ImageFont.truetype(FONT_PATH, 56) source_font = ImageFont.truetype(FONT_PATH, 28) # لف النص العربي max_text_width = text_box[2] - text_box[0] - 40 lines = wrap_arabic_text(draw, short_title, title_font, max_text_width) # تقليل الخط لو السطور كتير while len(lines) > 3: size = title_font.size - 4 if size < 34: break title_font = ImageFont.truetype(FONT_PATH, size) lines = wrap_arabic_text(draw, short_title, title_font, max_text_width) # رسم العنوان current_y = text_box[1] + 20 for line in lines: shaped = reshape_ar(line) bbox = draw.textbbox((0, 0), shaped, font=title_font) line_width = bbox[2] - bbox[0] x = (W - line_width) // 2 draw.text((x, current_y), shaped, font=title_font, fill="white") current_y += title_font.size + 16 # اسم المصدر source_text = f"المصدر: {source_name}" shaped_source = reshape_ar(source_text) bbox = draw.textbbox((0, 0), shaped_source, font=source_font) source_x = (W - (bbox[2] - bbox[0])) // 2 draw.text((source_x, source_y), shaped_source, font=source_font, fill=(230, 230, 230)) # صورة تحت الكلام if os.path.exists(UNDER_TEXT_PATH): under = Image.open(UNDER_TEXT_PATH).convert("RGBA") under.thumbnail((850, 100)) under_x = (W - under.size[0]) // 2 base.alpha_composite(under, (under_x, under_text_y)) # أيقونات السوشيال if os.path.exists(SOCIAL_ICONS_PATH): icons = Image.open(SOCIAL_ICONS_PATH).convert("RGBA") icons.thumbnail((360, 60)) icons_x = (W - icons.size[0]) // 2 base.alpha_composite(icons, (icons_x, social_y)) base.convert("RGB").save(output_path, quality=95) print("Saved:", output_path) # ========================= # معالجة خبر واحد # ========================= def process_one_news(item, seen): google_link = item["link"] final_url = resolve_final_url(google_link) if final_url in seen: return article = extract_article_data(final_url) if not article: return title = article["title"] or item["title"] desc = article["desc"] image_url = article["image_url"] source = article["source"] short_title = generate_short_headline(title, desc) article_image = None if image_url: article_image = download_image(image_url) if article_image is None: print("No image found, skipping:", final_url) return filename = clean_filename(short_title) + ".jpg" output_path = os.path.join(OUTPUT_DIR, filename) create_news_poster( article_image=article_image, short_title=short_title, source_name=source, output_path=output_path ) seen.add(final_url) save_seen(seen) # ========================= # اللوب الرئيسي # ========================= def main(): seen = load_seen() print("Bot started...") while True: try: news_items = fetch_google_news() print(f"Found {len(news_items)} items") for item in news_items[:10]: process_one_news(item, seen) except Exception as e: print("Main loop error:", e) print(f"Sleeping {CHECK_INTERVAL} sec...") time.sleep(CHECK_INTERVAL) if __name__ == "__main__": main()

السكربت ده بيعمل إيه؟

  • يجيب الأخبار من Google News
  • يفتح كل خبر
  • يستخرج العنوان والصورة
  • يولّد عنوان قصير جذاب
  • ينشئ صورة بوست
  • يحفظها
  • ما يكررّش نفس الخبر
  • يفضل شغال كل 5 دقايق

مهم جدًا

لو عايز الشكل يطلع احترافي جدًا

لازم تبعتلي أو تجهّز:

  1. الاستنبة الأساسية
    template.png

  2. اللوجو
    logo.png

  3. أيقونات السوشيال
    social_icons.png

  4. الصورة/الشريط اللي تحت الكلام
    under_text.png

  5. خط عربي كويس
    زي:

    • Cairo Bold
    • DIN Next Arabic
    • GE SS
    • Tajawal Bold

تحسينات أنصحك بيها

1) بدل ما تاخد نص الخبر كامل

خد:

  • العنوان
  • أول سطرين
  • أو meta description

وده كفاية جدًا لتوليد عنوان جذاب.

2) خزن الأخبار في قاعدة بيانات

بدل JSON تقدر تستخدم SQLite لو المشروع هيكبر.

3) تضيف نشر تلقائي على فيسبوك

ممكن بعد تجهيز الصورة:

  • يرفع الصورة
  • يضيف كابشن
  • ينشر أوتوماتيك

وده يتم عن طريق Facebook Graph API.

4) فلترة الأخبار

مثلاً:

  • سياسة فقط
  • رياضة فقط
  • اقتصاد فقط
  • أخبار عربية فقط

نقطة قانونية مهمة

لو هتستخدم صور الأخبار الأصلية من المواقع، لازم تتأكد من حقوق الاستخدام.
للاستخدام المهني الأفضل:

  • إما يكون عندك حق استخدام الصور
  • أو تستخدم صورة مرخّصة
  • أو تولّد صورة إخبارية تصميمية بدل الصورة الأصلية

لو عايزني أكمّلهولك بشكل جاهز 100%

ابعتلي دول:

  • الاستنبة
  • اللوجو
  • أيقونات السوشيال
  • صورة/عنصر تحت العنوان
  • مقاس البوست المطلوب (مثلاً 1080×1350 أو 1200×630)

وساعتها أقدر أرتب لك النسخة النهائية بالمقاسات الدقيقة داخل الكود
بحيث يبقى Plug & Play وتشغله على طول.

ولو تحب، أقدر كمان أجهز لك في الرسالة الجاية:

  1. نسخة مطورة من السكربت
  2. نسخة فيها نشر تلقائي على فيسبوك
  3. نسخة فيها لوحة تحكم بسيطة

لو تحب، أبعتهالك دلوقتي.

प्रश्न

ايوه و انا عايز الاسكربت كامل

विचार

undefined

विचार

undefined

विचार

undefined

विचार

Preparing the final submission with citations

I’m finalizing everything in Arabic, including citations. I’ll mention OpenAI’s SDK and Google RSS; for Facebook’s Graph API, it’s an option but will be cited cautiously. The focus will be on relevant factual internet statements. I'll include a download link and key steps, but I need to keep it concise.

Thought for 1m 51s

उत्तर

جهزت لك السكربت كامل في مشروع جاهز للتحميل:

تحميل مشروع سكربت صفحة الأخبار Facebook News Bot

النسخة دي فيها:

  • سحب الأخبار من Google News RSS.
  • فتح رابط الخبر الأصلي.
  • استخراج العنوان + الوصف + صورة الخبر.
  • إرسال العنوان لـ OpenAI عشان يحوله لعنوان جذاب من 3 إلى 10 كلمات.
  • تركيب العنوان على الصورة داخل الاستنبة.
  • إضافة اللوجو + الصورة تحت الكلام + أيقونات السوشيال.
  • حفظ الصور في فولدر output.
  • منع تكرار نفس الخبر باستخدام قاعدة بيانات SQLite.
  • خيار نشر تلقائي على صفحة فيسبوك باستخدام Facebook Graph API. النشر للصفحات يتم عادة عبر Page token، والصور عبر مسار مثل /{page-id}/photos. (Postproxy - Unified Social Media API)

استخدمت RSS بدل كشط واجهة Google News لأن Google News RSS مناسب للمتابعة المستمرة وتخصيص الدولة/اللغة/البحث، مع ملاحظة أن Google لا توفر له توثيقًا رسميًا واضحًا مثل API كامل. (WP RSS Aggregator)
والسكربت يعتمد على مكتبة OpenAI Python الرسمية، وهي مصممة للاستخدام من تطبيقات Python. (OpenAI Developers)

طريقة التشغيل

بعد ما تفك الضغط:

bash
cd fb_news_bot python -m venv venv

على Windows:

bash
venv\Scripts\activate

على macOS / Linux:

bash
source venv/bin/activate

ثم:

bash
pip install -r requirements.txt

انسخ ملف الإعدادات:

bash
cp .env.example .env

افتح .env وحط مفتاح OpenAI:

env
OPENAI_API_KEY=ضع_مفتاح_OpenAI_هنا

ضع ملفات التصميم داخل فولدر assets:

txt
assets/template.png assets/logo.png assets/under_text.png assets/social_icons.png assets/font.ttf

جرّبه مرة واحدة:

bash
python run_once.py

لو الصور طلعت كويسة في فولدر output، شغله باستمرار:

bash
python bot.py

لو عايز النشر التلقائي على فيسبوك

في ملف .env غيّر:

env
AUTO_POST_TO_FACEBOOK=true FACEBOOK_PAGE_ID=رقم_الصفحة FACEBOOK_PAGE_ACCESS_TOKEN=توكن_الصفحة FACEBOOK_GRAPH_VERSION=v23.0

أنصحك أولًا تشغله بـ:

env
AUTO_POST_TO_FACEBOOK=false

لحد ما تتأكد إن التصميم طالع مظبوط، وبعدها فعّل النشر.

تعديل أماكن العناصر

من .env تقدر تغيّر الإحداثيات:

env
ARTICLE_IMAGE_BOX=60,150,1020,760 HEADLINE_BOX=70,800,1010,1035 SOURCE_BOX=70,1045,1010,1095 LOGO_BOX=45,35,225,155 UNDER_TEXT_BOX=160,1110,920,1190 SOCIAL_ICONS_BOX=360,1240,720,1305

كل قيمة معناها:

txt
left,top,right,bottom

مهم: لو هتستخدم صور الأخبار الأصلية تجاريًا، راجع حقوق الاستخدام أو اكتفِ بوضع رابط المصدر في الكابشن.

इस प्रश्नोत्तर को साझा करें