2009-07-31 15 views
7

ट्विटर एपीआई में विधियों (birddog, shadow, and follow) का एक परिवार है जो एक (अधिकतर) स्थायी कनेक्शन खोलता है और आपको कई उपयोगकर्ताओं का पालन करने की अनुमति देता है। मैंने बैश में curl के साथ नमूना कनेक्शन कोड चलाया है, और यह अच्छी तरह से काम करता है: जब कोई उपयोगकर्ता निर्दिष्ट करता है तो एक ट्वीट लिखता है, मुझे अपने कंसोल में एक्सएमएल की स्ट्रीम मिलती है।PHP में स्ट्रीमिंग डेटा से कैसे निपटें?

मेरा प्रश्न है: मैं PHP के साथ डेटा कैसे एक्सेस कर सकता हूं जो प्रत्यक्ष फ़ंक्शन कॉल के रूप में वापस नहीं किया जाता है, लेकिन स्ट्रीम किया जाता है? यह डेटा स्पोरैडिक और अप्रत्याशित रूप से आता है, और यह ऐसा कुछ नहीं है जिसे मैंने कभी निपटाया है और न ही मुझे पता है कि जवाब कहां से शुरू करना है। पुस्तकालयों या नुकसान के किसी भी सलाह और विवरण की सराहना की जाएगी।

उत्तर

6

fopen और fgets

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

यह कोई महान (या यहां तक ​​कि अच्छा) कोड का मतलब है, लेकिन यह चाहिए कार्यक्षमता आप की जरूरत प्रदान कर रहा है। आपको अन्य चीजों के साथ त्रुटि प्रबंधन और डेटा पार्सिंग जोड़ने की आवश्यकता होगी।

+1

नोट स्ट्रीम समर्थन fopen को जोड़ा गया है() पीएचपी 5.0 में तो आप कम से कम है कि आवश्यकता होगी। – UnkwnTech

0

मैं AJAX का उपयोग करने का सुझाव देने का सुझाव दूंगा। मैं एक PHP डेवलपर नहीं हूं, लेकिन मुझे लगता है कि आप एपीएक्स को एजेक्स कॉल को वायरस कर सकते हैं और अपना वेब पेज अपडेट कर सकते हैं।

2

मुझे पूरा यकीन है कि आपकी स्क्रिप्ट स्ट्रीम पर डेटा सुनने के ~ 30 सेकंड के बाद समाप्त हो जाएगी। यहां तक ​​कि यदि ऐसा नहीं होता है, तो एक बार जब आप एक महत्वपूर्ण सर्वर लोड प्राप्त कर लेते हैं, तो खुले और सुनने वाले कनेक्शन की बड़ी संख्या सर्वर को घुटनों तक लाएगी।

मैं सुझाव दूंगा कि आप एक AJAX समाधान पर नज़र डालें जो एक स्क्रिप्ट को कॉल करता है जो सिर्फ संदेशों की एक पंक्ति संग्रहीत करता है। मुझे यकीन नहीं है कि ट्विटर एपीआई वास्तव में कैसे काम करता है, इसलिए मुझे यकीन नहीं है कि सभी ट्वीट्स प्राप्त करने के लिए अनुरोध करते समय आप स्क्रिप्ट चला सकते हैं, या यदि आपको किसी प्रकार का डिमन एक कतार में ट्वीट जोड़ना है कि PHP आपके AJAX कॉल के माध्यम से पढ़ और वापस भेज सकता है।

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

+0

जहां तक ​​मुझे पता है, यह सिर्फ एक कनेक्शन है। ट्विटर मुझे एक एक्सएमएल भेजता है (इसे एक ऑब्जेक्ट कहा जाता है?) प्रति संदेश; मेरा सर्वर कोई सक्रिय क्वेरी नहीं कर रहा है, केवल प्राप्त/सुन रहा है। –

+0

मैं एक डेमॉन स्थापित करने का सुझाव दूंगा जो सिर्फ सुनता है (शायद पाइथन में लिखा गया है, यह शायद बहुत आसान होगा) और सभी ट्वीट्स को MySQL डेटाबेस में डंप करता है। तब आपकी PHP स्क्रिप्ट डेटाबेस से पढ़ी जा सकती हैं। –

2

यानी कि चीजें बहुत आसान बनाने (और reconnections, सॉकेट हैंडलिंग, टीसीपी backoff, आदि जैसे मुश्किल बिट्स संभाल) इस इन दिनों के लिए पुस्तकालयों, कर रहे हैं जाने के लिए:

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

0

Phirehose निश्चित रूप से जिस तरह से है:

संबंधित मुद्दे