كيفية استخراج منشورات ترامب من Truth Social باستخدام Python 2026
لماذا تستخرج منشورات ترامب برمجيًا
إذا كنت تتداول بناءً على منشورات ترامب، فأنت تحتاج إلى نظام يعمل حتى وأنت نائم. لا يمكن لأي إنسان أن يراقب Truth Social على مدار الساعة سبعة أيام في الأسبوع، لكن نصًا برمجيًا بسيطًا يستطيع. الاستخراج البرمجي لمنشورات Truth Social يُمكّنك من: بناء تنبيهات فورية مخصصة، تجميع بيانات تاريخية لتحليل الأنماط، وإنشاء أنظمة تداول شبه آلية تستجيب للمنشورات ذات الصلة.
في عام 2026، Truth Social منصة نشطة تمامًا، وخلاصتها العامة متاحة برمجيًا. الوصول إلى منشورات الحسابات العامة — كحساب ترامب الرسمي — ممكن عبر ثلاث طرق رئيسية: خلاصة RSS، واجهة برمجة التطبيقات غير الرسمية، ومحاكاة المتصفح عبر Playwright. كل طريقة لها مزاياها واستخداماتها، وسنتناول الثلاث بأمثلة كود قابلة للتطبيق المباشر.
الطريقة الأولى: RSS Feed — الأسهل والأكثر استقرارًا
Truth Social يوفر خلاصة RSS لكل حساب عام. خلاصة ترامب متاحة على https://truthsocial.com/@realDonaldTrump.rss. هذه الخلاصة تُحدَّث عند كل منشور جديد وتحتوي على: نص المنشور، وقت النشر، ورابط المنشور المباشر.
الكود التالي يُراقب الخلاصة كل 30 ثانية ويُطبع المنشورات الجديدة:
import feedparser
import time
import sqlite3
from datetime import datetime
FEED_URL = "https://truthsocial.com/@realDonaldTrump.rss"
DB_PATH = "trump_posts.db"
def init_db():
conn = sqlite3.connect(DB_PATH)
conn.execute("""CREATE TABLE IF NOT EXISTS posts
(id TEXT PRIMARY KEY, content TEXT, published TEXT)""")
conn.commit()
return conn
def check_new_posts(conn):
feed = feedparser.parse(FEED_URL)
new_posts = []
for entry in feed.entries:
post_id = entry.get('id', entry.link)
exists = conn.execute(
"SELECT 1 FROM posts WHERE id=?", (post_id,)).fetchone()
if not exists:
conn.execute("INSERT INTO posts VALUES (?,?,?)",
(post_id, entry.summary, entry.published))
conn.commit()
new_posts.append(entry)
return new_posts
conn = init_db()
print("بدء مراقبة Truth Social...")
while True:
new = check_new_posts(conn)
for post in new:
print(f"[{datetime.now()}] منشور جديد: {post.summary[:100]}")
# هنا يمكن إضافة إرسال تنبيه تيليغرام
time.sleep(30)
هذا الكود كافٍ للبدء. المرحلة التالية هي إضافة إرسال تنبيه تيليغرام عند اكتشاف منشور جديد، وإضافة منطق تصنيف حسب الكلمات المفتاحية.
الطريقة الثانية: Playwright لمحاكاة المتصفح
Playwright مكتبة Python تُحاكي متصفحًا حقيقيًا (Chromium، Firefox، أو WebKit). تُستخدم عندما يكون المحتوى محمّلًا ديناميكيًا عبر JavaScript ولا يظهر في خلاصة RSS. لـTruth Social، Playwright أقل ضرورةً لمنشورات الحسابات العامة التي تغطيها RSS، لكنه مفيد لمحتوى إضافي كالردود أو الصور المُرفقة.
from playwright.async_api import async_playwright
import asyncio
async def get_latest_posts():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True)
page = await browser.new_page()
await page.goto("https://truthsocial.com/@realDonaldTrump",
wait_until="networkidle")
posts = await page.query_selector_all('[data-testid="status"]')
results = []
for post in posts[:5]: # أحدث 5 منشورات
text = await post.inner_text()
results.append(text)
await browser.close()
return results
posts = asyncio.run(get_latest_posts())
for p in posts:
print(p[:200])
ملاحظة: Playwright يستهلك ذاكرة أكثر من RSS، ويحتاج إلى تحديث دوري إذا تغيّر هيكل صفحة Truth Social. احتفظ برصيد خطأ (error handling) جيدًا وتنبيهات عند التوقف.
تصنيف المنشورات تلقائيًا حسب الأهمية التجارية
ليس كل منشور مهمًا للتداول. الخطوة الأكثر قيمة بعد الاستخراج هي تصنيف المنشورات حسب أهميتها المحتملة للأسواق. النهج البسيط هو قاموس كلمات مفتاحية لكل فئة:
CATEGORIES = {
"tariffs": ["tariff", "trade", "china", "import", "duty", "levy"],
"crypto": ["bitcoin", "crypto", "btc", "digital asset", "blockchain"],
"markets": ["stock", "market", "fed", "interest rate", "economy"],
"geopolitics": ["russia", "ukraine", "iran", "nato", "military"],
"oil_energy": ["oil", "opec", "energy", "gas", "pipeline"]
}
def classify_post(text):
text_lower = text.lower()
matches = {}
for cat, keywords in CATEGORIES.items():
hits = [kw for kw in keywords if kw in text_lower]
if hits:
matches[cat] = hits
if not matches:
return "general"
return max(matches, key=lambda k: len(matches[k]))
# مثال:
post = "We are imposing 145% tariffs on all Chinese imports!"
print(classify_post(post)) # tariffs
يمكن تطوير هذا المنطق باستخدام نماذج تعلم آلي خفيفة الوزن مثل FastText أو حتى نماذج لغوية صغيرة لتحقيق دقة تصنيف أعلى، خاصةً للمنشورات التي تتقاطع فيها موضوعات متعددة.
إرسال تنبيه تيليغرام من Python
لإرسال تنبيه تيليغرام عند اكتشاف منشور جديد، ستحتاج إلى: إنشاء بوت تيليغرام عبر BotFather، الحصول على رمز API للبوت، والحصول على Chat ID للمحادثة أو القناة التي تريد الإرسال إليها.
import requests
BOT_TOKEN = "YOUR_BOT_TOKEN"
CHAT_ID = "YOUR_CHAT_ID"
def send_telegram_alert(post_text, category, url):
emoji = {"tariffs": "🚨", "crypto": "₿", "markets": "📈",
"geopolitics": "🌍", "oil_energy": "🛢️"}.get(category, "📢")
message = f"{emoji} *منشور ترامب جديد* [{category.upper()}]\n\n{post_text[:300]}\n\n[فتح المنشور]({url})"
requests.post(
f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage",
json={"chat_id": CHAT_ID, "text": message,
"parse_mode": "Markdown", "disable_web_page_preview": True}
)
دمج هذا الكود مع نظام الاستخراج السابق يُنتج نظامًا كاملًا: مراقبة Truth Social → استخراج المنشورات الجديدة → تصنيفها → إرسال تنبيه تيليغرام مع الفئة ورابط المنشور. الوقت الإجمالي من النشر إلى وصول التنبيه: 15-45 ثانية على خادم VPS جيد.
| الطريقة | زمن الاستجابة | الاستقرار | استهلاك الموارد | صعوبة البناء |
|---|---|---|---|---|
| RSS + feedparser | 15-45 ثانية | عالٍ جدًا | منخفض جدًا | سهل |
| Playwright (headless) | 5-20 ثانية | متوسط (يتأثر بالتحديثات) | متوسط-عالٍ | متوسط |
| API غير رسمية | 5-15 ثانية | منخفض (قد تتغير) | منخفض | متوسط-متقدم |
| TrumpBot (جاهز) | < 30 ثانية | عالٍ جدًا | لا ينطبق | لا يحتاج كود |
الأسئلة الشائعة
هل استخراج منشورات Truth Social قانوني؟
الحسابات العامة كحساب ترامب الرسمي تُعدّ بياناتها عامة بطبيعتها. الاستخراج للاستخدام الشخصي وأغراض البحث المشروع عمومًا غير محظور قانونيًا في معظم الدول. مع ذلك، الاستخدام التجاري الواسع النطاق أو إعادة نشر المحتوى قد يُثير إشكاليات ملكية فكرية. اقرأ شروط الخدمة وراجع مستشارًا قانونيًا محليًا قبل البناء على نطاق واسع.
ما الفرق بين RSS وPlaywright لاستخراج منشورات Truth Social؟
RSS هو الأبسط والأكثر استقرارًا: خلاصة JSON/XML جاهزة تُحدَّث دوريًا، لا تتطلب محاكاة المتصفح. Playwright يُحاكي متصفحًا حقيقيًا ويستطيع التعامل مع محتوى JavaScript الديناميكي، لكنه أبطأ وأكثر هشاشةً أمام تغييرات التصميم. للمنشورات العامة، RSS كافٍ في 95% من الحالات.
ما أقل تأخر يمكن تحقيقه عند استخراج Truth Social بـPython؟
مع نظام RSS مُحسَّن على خادم VPS قريب جغرافيًا من خوادم Truth Social، يمكن تحقيق تأخر 10-20 ثانية. مع Playwright وحلقة استطلاع كل 5 ثوانٍ، يمكن الوصول إلى 5-15 ثانية. الحد العملي الأدنى دون إساءة استخدام الخادم هو حوالي 5 ثوانٍ.
كيف أُعالج تغييرات Truth Social في هيكل الصفحة؟
الاعتماد على RSS أكثر أمانًا لأن هيكله يتغير نادرًا. إذا استخدمت Playwright، اجعل محددات CSS الخاصة بك مرنة (استخدم data-attributes عوضًا عن أسماء الفئات التي قد تتغير). أضف نظام تنبيه يُعلمك عند توقف الاستخراج حتى تتمكن من الإصلاح السريع.
هل أحتاج خادمًا خاصًا (VPS) لتشغيل البوت؟
نعم، الخادم الخاص ضروري لأن البوت يعمل بشكل مستمر 24/7. DigitalOcean أو Linode يوفران خوادم بـ4-6 دولارات شهريًا وهي كافية تمامًا. خدمات مثل Heroku أو Railway توفر خيارًا أرخص لكن مع قيود على الاشتغال المستمر في الخطط المجانية.
كيف أُصنّف منشورات ترامب تلقائيًا حسب الموضوع؟
أبسط طريقة هي قائمة كلمات مفتاحية لكل فئة: ['tariff', 'trade', 'china', 'import'] للرسوم الجمركية، ['bitcoin', 'crypto', 'digital'] للعملات الرقمية. يمكن تطوير ذلك باستخدام نموذج تصنيف خفيف مثل FastText أو المقارنة ببيانات تدريب مُعلَّمة يدويًا لتحقيق دقة أعلى.
ما الأدوات الإضافية التي يمكن دمجها مع نظام الاستخراج؟
يمكن إضافة: تحليل مشاعر النص (sentiment analysis) لتحديد إيجابي/سلبي/محايد، ترجمة تلقائية للعربية عبر DeepL API، تخزين في قاعدة بيانات PostgreSQL لتحليلات تاريخية، ولوحة متابعة بسيطة مبنية بـFlask لعرض آخر المنشورات وإحصاءاتها.
ما حجم الموارد التقنية اللازمة لتشغيل النظام؟
نظام RSS بسيط بـPython يستهلك أقل من 100 ميجابايت رام ومعالج بطيء جدًا. نظام Playwright يحتاج إلى 512 ميجابايت إلى 1 جيجابايت رام بسبب محرك المتصفح. خادم VPS بمعالج واحد و1 جيجابايت رام كافٍ تمامًا لنظام RSS أو Playwright أحادي الخيط.