سؤال

هناك عائلة من الأساليب (Birddog، الظل، واتبع) في Twitter API الذي يفتح اتصالاً دائمًا (في الغالب) ويسمح لك بمتابعة العديد من المستخدمين.لقد قمت بتشغيل نموذج رمز الاتصال باستخدام cURL في bash، وهو يعمل بشكل جيد:عندما يكتب مستخدم أحدده تغريدة، أحصل على دفق من XML في وحدة التحكم الخاصة بي.

سؤالي هو: كيف يمكنني الوصول إلى البيانات باستخدام PHP التي لا يتم إرجاعها كاستدعاء دالة مباشر، ولكن يتم دفقها؟ تصل هذه البيانات بشكل متقطع وغير متوقع، وهي ليست شيئًا تعاملت معه من قبل ولا أعرف من أين أبدأ في البحث عن إجابات.سيكون موضع تقدير أي نصيحة وأوصاف للمكتبات أو المزالق.

هل كانت مفيدة؟

المحلول

com.fopen و fgets

<?php
$sock = fopen('http://domain.tld/path/to/file', 'r');
$data = null;
while(($data = fgets($sock)) == TRUE)
{
    echo $data;
}
fclose($sock);

هذا ليس بأي حال من الأحوال رمزًا رائعًا (أو حتى جيدًا) ولكنه يجب توفير الوظائف التي تحتاجها.ستحتاج إلى إضافة معالجة الأخطاء وتحليل البيانات من بين أشياء أخرى.

نصائح أخرى

أنا متأكد تمامًا من أن مهلة البرنامج النصي الخاص بك ستنتهي بعد حوالي 30 ثانية من الاستماع للبيانات الموجودة على الدفق.حتى لو لم يحدث ذلك، بمجرد حصولك على تحميل كبير للخادم، فإن العدد الهائل من الاتصالات المفتوحة والمستمعة سوف يركع الخادم على ركبتيه.

أود أن أقترح عليك إلقاء نظرة على حل AJAX الذي يقوم بإجراء اتصال ببرنامج نصي يقوم فقط بتخزين قائمة انتظار من الرسائل.لست متأكدًا من كيفية عمل واجهة برمجة تطبيقات Twitter بالضبط، لذلك لست متأكدًا مما إذا كان بإمكانك تشغيل برنامج نصي عند الطلب للحصول على جميع التغريدات، أو إذا كان عليك أن يكون لديك نوع من البرنامج الخفي لإلحاق التغريدات بقائمة الانتظار يمكن لـ PHP القراءة والتمرير عبر مكالمة AJAX الخاصة بك.

توجد مكتبات لهذا الغرض هذه الأيام تجعل الأمور أسهل كثيرًا (وتتعامل مع الأجزاء الصعبة مثل عمليات إعادة الاتصال، ومعالجة المقبس، وتراجع TCP، وما إلى ذلك)، على سبيل المثال:

http://code.google.com/p/phirehose/

أود أن أقترح النظر في استخدام AJAX.أنا لست مطور PHP، ولكن أعتقد أنه يمكنك توصيل اتصال AJAX بواجهة برمجة التطبيقات (API) وتحديث صفحة الويب الخاصة بك.

Phirehose هو بالتأكيد الطريق الصحيح:

http://code.google.com/p/phirehose/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top