بديل Twitter API: واجهة تويتر (X) اللحظية
لبوتات التداول والمنصات والـ Agents
Xanguard B2B واجهة بيانات تويتر (X) اللحظية للمطورين. اتصال WebSocket واحد يدفع إليك بصيغة JSON التغريدات الجديدة للحسابات التي تراقبها وحذف التغريدات وتغيّر الملف الشخصي والمتابعين الجدد وأحداث المتابعة وإلغاء المتابعة، مع REST API لإدارة قائمة المراقبة. متوسط الاكتشاف في الباقات المدفوعة نحو 200 مللي ثانية (البيانات الفعلية). من 50 حساباً بـ $49 شهرياً وحتى 1,000 حساب، والدفع بعملة SOL والتفعيل تلقائي.
آخر مراجعة للأسعار: 5 أكتوبر 2026
أخي الغالي، يا من تبني بوتات التداول والمنصات، أهلاً بك أنت والـ Agent الخاص بك في Xanguard. أنا المطوّر، وأرد على كل رسالة بنفسي. للربط أو عرض السعر أو مطابقة الحقول راسلني مباشرة على تيليجرام: @notAdegen
مطوّر Xanguard · أرد على الرسائل الخاصة بنفسي
الرابط لا يفتح؟ افتح تيليجرام وابحث عن @B2B_Xanguard_bot
خمسة أنواع من الأحداث اللحظية عبر WebSocket واحد
كل ما يحتاجه بوت التداول أو المنصة من تويتر: التغريدات، والحذف، وتغيّر الملف الشخصي، والمتابعون الجدد، والمتابعة وإلغاء المتابعة. وكلها JSON جاهز للاستخدام.
التغريدات twitter.post.new
تغريدات وردود واقتباسات وإعادات نشر، بمتوسط اكتشاف نحو 200 مللي ثانية. النص الكامل وروابط الوسائط والتغريدة المقتبَسة أو المردود عليها وبيانات الكاتب، مع استخراج عناوين العقود تلقائياً. في كل الباقات.
حذف تغريدة twitter.tweet.deleted
يصلك الحدث حين يحذف الحساب المراقَب تغريدة، مع معرّف التغريدة المحذوفة ونصها؛ وإذا تأكد الحذف دون معرفة أي تغريدة بالتحديد يكون هذان الحقلان null. في كل الباقات.
تغيّر الملف الشخصي twitter.profile.update
تغيير الاسم أو النبذة أو الصورة أو التغريدة المثبّتة، مع القيمة قبل التغيير وبعده. كثيراً ما يبدأ المشروع بتغيير روايته من ملفه الشخصي. من Pro فما فوق.
متابع جديد twitter.follower.new
يصلك حدث عند انضمام متابع جديد إلى الحساب المراقَب، مع تحديد من هو. مفيد لمعرفة من يتابع كبار المطورين بهدوء. من Pro فما فوق.
متابعة / إلغاء متابعة twitter.following.new / .removed
من تابعه الحساب المراقَب أو ألغى متابعته، مع اسمه ونبذته وعدد متابعيه. إشارات الشراكات وتحركات الأذكياء في اتصال واحد. Enterprise.
REST API
أضف حسابات المراقبة أو احذفها بمفتاح dt_ (POST /v1/dt/targets)، واستعلم عن الملفات الشخصية وسجل التغيّرات. قراءة عناوين العقود داخل الصور (OCR) في Enterprise.
اربط في 5 دقائق وابدأ باستلام الأحداث
بلا اجتماعات وبلا انتظار فريق مبيعات. تطلب الباقة من البوت وتحصل على المفتاح وتتصل.
اشترك
افتح @B2B_Xanguard_bot على تيليجرام، واختر الباقة وادفع بعملة SOL.
احصل على المفتاح
يُفعَّل الاشتراك تلقائياً بعد التأكيد على السلسلة، ويرسل لك البوت مفتاح API الذي يبدأ بـ dt_.
أضف الحسابات
أرسل في البوت /add مع المعرّف، أو استدعِ POST /v1/dt/targets.
اتصل بـ WebSocket
بعد الاتصال يصلك HELLO، فترسل LOGIN (op 2 مع المفتاح)، ثم تستقبل أحداث EVENT باستمرار.
بروتوكول opcode، وكود Python وNode جاهز للتشغيل
العنوان: wss://api.xanguard.tech/v1/dt/realtime/ws. تسلسل opcode متوافق مع TweetCatcher؛ يسمح كل مفتاح بحد أقصى 5 اتصالات متزامنة، ويُقطع الاتصال إذا لم تصل نبضة قلب (heartbeat) خلال 90 ثانية.
| op | Name | Direction | Notes |
|---|---|---|---|
| 10 | HELLO | server → client | Sent right after connect, with heartbeat_interval (ms) |
| 2 | LOGIN | client → server | Send the API key within 15 s: {"op": 2, "d": "dt_..."} |
| 4 | READY | server → client | Auth OK, with enabled modules and account count |
| 0 | EVENT | server → client | Live event, d.event is the event type |
| 1 | HEARTBEAT | client → server | Send every heartbeat_interval |
| 11 | HEARTBEAT_ACK | server → client | Heartbeat reply |
| 3 | DISCONNECT | server → client | d.reason says why (e.g. invalid or expired key) |
جدول البروتوكول وأمثلة الكود وبنية JSON أدناه بالإنجليزية عمداً لأنها كود يُنسخ كما هو.
import asyncio, json
import websockets
URL = "wss://api.xanguard.tech/v1/dt/realtime/ws"
API_KEY = "dt_YOUR_KEY"
async def main():
async with websockets.connect(URL) as ws:
# op 10 HELLO: carries the heartbeat interval (ms)
hello = json.loads(await ws.recv())
interval = hello["d"]["heartbeat_interval"] / 1000
# op 2 LOGIN: send the key within 15 s
await ws.send(json.dumps({"op": 2, "d": API_KEY}))
ready = json.loads(await ws.recv())
if ready["op"] != 4: # on failure you get op 3 DISCONNECT
raise SystemExit(ready["d"].get("reason"))
print("connected:", ready["d"]["modules"])
# heartbeat on the interval; no heartbeat for 90 s = disconnect
async def heartbeat():
while True:
await asyncio.sleep(interval)
await ws.send(json.dumps({"op": 1}))
hb = asyncio.create_task(heartbeat())
async for raw in ws:
msg = json.loads(raw)
if msg["op"] != 0: # only handle op 0 EVENT
continue
ev, d = msg["d"]["event"], msg["d"]["data"]
if ev == "twitter.post.new":
print(d["author"]["handle"], d["text"])
elif ev == "twitter.tweet.deleted":
print("deleted:", d["tweet_id"])
elif ev == "twitter.profile.update":
print("profile:", d["field"], d["updated"])
asyncio.run(main())
const WebSocket = require('ws');
const URL = 'wss://api.xanguard.tech/v1/dt/realtime/ws';
const ws = new WebSocket(URL);
let hb;
ws.on('message', (raw) => {
const msg = JSON.parse(raw.toString());
switch (msg.op) {
case 10: // HELLO: send LOGIN, then heartbeat on the interval
ws.send(JSON.stringify({ op: 2, d: 'dt_YOUR_KEY' }));
hb = setInterval(
() => ws.send(JSON.stringify({ op: 1 })),
msg.d.heartbeat_interval
);
break;
case 4: // READY: authenticated
console.log('connected', msg.d.modules);
break;
case 3: // DISCONNECT: invalid or expired key, etc.
console.error('disconnected:', msg.d.reason);
break;
case 0: { // EVENT: live event
const { event, data } = msg.d;
if (event === 'twitter.post.new') {
console.log(data.author.handle, data.text);
} else if (event === 'twitter.following.new') {
console.log('new follow:', data.handle);
}
break;
}
}
});
ws.on('close', () => clearInterval(hb));
كيف يبدو الـ JSON
البيانات التالية أمثلة توضيحية، والحقول المعتمدة في توثيق الواجهة. قد تصل التغريدة أولاً بحدث twitter.post.new ثم يُستكمل بحدث twitter.post.update يحمل نفس data.id.
twitter.post.new{
"op": 0,
"d": {
"event": "twitter.post.new",
"event_id": "evt_1234567890123456789",
"task_info": {"handle": "example_dev"},
"data": {
"id": "1234567890123456789",
"created_at": 1712000000000,
"type": "post",
"text": "gm, new release ships tonight",
"media": [],
"author": {
"id": "1234567890",
"handle": "example_dev",
"name": "Example Dev",
"stats": {"followers": 12000, "following": 800}
},
"in_reply_to": null,
"quoted_tweet": null
}
}
}
twitter.following.new (Enterprise){
"op": 0,
"d": {
"event": "twitter.following.new",
"event_id": "evt_f_example_dev_1712000000000",
"event_time": 1712000000000,
"task_info": {"handle": "example_dev", "id": "1234567890"},
"data": {
"id": "2233445566",
"handle": "example_founder",
"name": "Example Founder",
"bio": "building on Solana",
"followers": 5400,
"following": 310
}
}
}
twitter.profile.update (Pro+){
"op": 0,
"d": {
"event": "twitter.profile.update",
"event_id": "evt_p_example_dev_1712000000000",
"task_info": {"handle": "example_dev"},
"data": {
"field": "bio",
"prev": "Old bio text",
"updated": "New bio text"
}
}
}
twitter.follower.new / twitter.tweet.deleted{
"op": 0,
"d": {
"event": "twitter.follower.new",
"task_info": {"handle": "example_dev"},
"data": {
"id": "12345678",
"handle": "newfollower",
"name": "New Follower"
}
}
}
{
"op": 0,
"d": {
"event": "twitter.tweet.deleted",
"task_info": {"handle": "example_dev"},
"data": {
"tweet_id": "1234567890123456789",
"text": "text of the deleted tweet"
}
}
}
قيم data.type: post وreply وquote وrepost. وحقل field في تغيّر الملف الشخصي يكون أحد: bio وname وavatar وpinned_tweet.
الباقة حسب الوحدات، والسعر حسب عدد الحسابات
اختر مستوى الوحدات أولاً ثم عدد الحسابات المراقَبة. الأسعار شهرية بالدولار وتُدفع بعملة SOL، وآخر مراجعة لها في 5 أكتوبر 2026.
- أحداث التغريدات
- أحداث الحذف
- WebSocket + REST
- كل ما في Starter
- أحداث تغيّر الملف الشخصي
- أحداث المتابعين الجدد
- كل ما في Pro
- أحداث المتابعة وإلغاء المتابعة
- قراءة عناوين العقود في الصور (OCR)
| عدد الحسابات المراقَبة | Starter تغريدات + حذف | Pro + تغيّر الملف + متابعون جدد | Enterprise + متابعة وإلغاء متابعة | سعر الحساب في Starter |
|---|---|---|---|---|
| 50 | $49 | $99 | $249 | $0.98 |
| 250 | $229 | $429 | $979 | $0.92 |
| 500 | $449 | $749 | $1,649 | $0.90 |
| 1,000 | $849 | $1,349 | $2,849 | $0.85 |
ما فوق 1,000 حساب يُتفاوض عليه بشكل منفصل. وهناك إضافة CA Search (بحث عن تغريدات آخر 24 ساعة بعنوان العقد أو اسم العملة أو كلمة مفتاحية، بحد أقصى 200 تغريدة لكل طلب): 1,000 طلب يومياً بـ $100 شهرياً، و2,000 طلب بـ $180، و5,000 طلب بـ $250. جدول الأسعار الكامل بالإنجليزية: B2B API pricing.
كم تكلّف مراقبة 200 حساب لحظياً شهرياً؟
أسعار الجهات الأخرى من مواقعها الرسمية وراجعناها في 20 سبتمبر 2026، وسعر X API الرسمي راجعناه في 5 أكتوبر 2026 (docs.x.com). والمرجع دائماً أحدث سعر على موقع الجهة نفسها.
| الخيار | 200 حساب شهرياً | ملاحظات |
|---|---|---|
| Xanguard B2B Starter 250 | $229 | WebSocket + REST مع أحداث الحذف، حتى 250 حساباً |
| TweetStream (باقة Pro لـ 250 حساباً) | $499 | السعر المعلن على موقعهم |
| twitterapi.io (باقة 150 حساباً + 50 إضافية) | نحو $399 | الحساب الإضافي بـ $2 |
| X API الرسمي (بالاستهلاك) | نحو $210 | قراءة التغريدات فقط: 0.005 دولار للتغريدة، بتقدير 7 تغريدات يومياً لكل حساب؛ والمتابعات وتغيّر الملف الشخصي تُحسب بشكل منفصل، مع حدود معدّل |
الانتقال من خدمات أخرى
- TweetCatcher: يستخدم WebSocket تسلسل opcode متوافقاً (HELLO ثم LOGIN ثم EVENT مع نبضات القلب). بدّل العنوان والمفتاح وطابق بعض الحقول المختلفة، وغالباً ينتهي ذلك في أقل من ساعة. دليل الانتقال (بالإنجليزية)
- twitterapi.io: غيّر عنوان الطلبات إلى
api.xanguard.techوأبقِ ترويسةX-API-Keyوبنية البيانات كما هي. دليل الانتقال (بالإنجليزية) - مزوّدون آخرون: أرسل لي وثائق الواجهة التي تستخدمها أو عيّنة من بياناتها، وعادةً نجهّز مطابقة الحقول خلال ساعات، ونعمل على الربط معاً في المحادثة نفسها.
ما لا نوفّره حالياً
- إعادة إرسال التغريدات التي فاتتك أثناء انقطاع اتصال WebSocket بعد إعادة الاتصال.
- التزام مكتوب باتفاقية مستوى خدمة (SLA) للتوافر.
- الإرسال إلى Discord بشكل أصلي؛ والدفع بعملة SOL فقط، بلا بطاقات.
الأسئلة الشائعة
WebSocket واحد وJSON جاهز للاستخدام
من 50 حساباً بـ $49 شهرياً، والدفع بعملة SOL، ويصلك المفتاح تلقائياً بعد التأكيد على السلسلة.
الرابط لا يفتح؟ افتح تيليجرام وابحث عن @B2B_Xanguard_bot
الصفحة الرئيسية · أداة مراقبة تويتر · السرعة الفعلية · English version