2010-08-09 8 views
6

मैं अपनी टीम को ट्विटर प्रतियोगिता का प्रबंधन करने में सहायता करने के लिए एक एप्लिकेशन बना रहा हूं। अब तक मैंने एपीआई जुर्माना से बातचीत करने में कामयाब रहा है, और मुझे आवश्यक ट्वीट्स का एक सेट वापस कर दिया है।ट्विटर प्रतियोगिता ~ बचत ट्वीट्स (PHP और MySQL)

मैं डेटाबेस में ट्वीट्स के संग्रहण को संभालने का सर्वोत्तम तरीका तय करने के लिए संघर्ष कर रहा हूं, कितनी बार उनकी जांच करनी है और यह सुनिश्चित करने के लिए कि कोई ओवरलैप या अंतराल नहीं है।

आप प्रति पृष्ठ अधिकतम 100 ट्वीट प्राप्त कर सकते हैं। फिलहाल, मेरा वर्तमान विचार एक क्रॉन स्क्रिप्ट को चलाने के लिए है, हर 5 मिनट में एक बार या एक बार में एक पूर्ण 100 ट्वीट्स ले लें, और उनके माध्यम से लूप को देखने के लिए देखें कि क्या मैं उन्हें ढूंढ सकूं, उन्हें जोड़ने से पहले ।

इसमें हर 5 मिनट में डीबी के खिलाफ 100 क्वेरी चलाने की स्पष्ट कमी है, और हालांकि INSERT भी हैं। जो मुझे वास्तव में पसंद नहीं है। इसके अलावा, मुझे कुछ और वास्तविक समय चाहिए। चूंकि ट्विटर एक लाइव सेवा है, इसलिए इसका कारण यह है कि हमें प्रवेशकर्ताओं की सूची को जैसे ही वे प्रवेश करते हैं, अपडेट करना चाहिए।

यह बार-बार ट्विटर पर मतदान करने की कमी को फेंकता है, हालांकि, आवश्यक हो सकता है, मुझे यकीन नहीं है कि मैं उनके एपीआई को हथियार देना चाहता हूं।

क्या किसी के पास सुरुचिपूर्ण समाधान पर कोई विचार है? मुझे यह सुनिश्चित करने की ज़रूरत है कि मैं सभी ट्वीट्स को कैप्चर करता हूं, और किसी को भी बाहर नहीं छोड़ता, और डीबी उपयोगकर्ता को अद्वितीय रखता हूं। हालांकि मैंने सबकुछ जोड़कर और फिर उपयोगकर्ता नाम द्वारा परिणामी तालिका को समूहीकृत करने पर विचार किया है, लेकिन यह साफ नहीं है।

मुझे अलग-अलग चीजों के प्रदर्शन पक्ष से निपटने में खुशी है क्योंकि यह सिर्फ MySQL और डिस्प्ले से एक पुल है। लेकिन बैकएंड डिज़ाइन मुझे सिरदर्द दे रहा है क्योंकि मुझे एपीआई या डीबी को हथियाने के बिना इसे टिक रखने के लिए एक प्रभावी तरीका नहीं दिख रहा है। , तो मैं समझता हूँ कि आप जो खोज रहे हैं http://dev.twitter.com/pages/streaming_api_methods

आप शायद एक statuses/filter चाहता हूँ, का उपयोग करते हुए:

+0

क्या ट्विटर एपीआई नीति में कोई खंड नहीं है जो कहता है कि आप ट्वीट्स को सहेज नहीं सकते हैं? – Noz

उत्तर

1

ट्विटर एपीआई एक स्ट्रीमिंग एपीआई कि है संभव है कि आप सब कुछ आप पर कब्जा सुनिश्चित करने के लिए क्या करना चाहते हैं प्रदान करता है track पैरामीटर जो भी विशिष्ट विशेषताओं (हैशटैग, शब्द, वाक्यांश, स्थान, उपयोगकर्ता) के साथ आप देख रहे हैं।

कई ट्विटर एपीआई पुस्तकालयों ने इसे बनाया है, लेकिन मूल रूप से आप एक HTTP कनेक्शन खोलते रहते हैं और ट्विटर लगातार आपको ट्वीट्स भेजता है। इस पर विवरण के लिए streaming API overview देखें। यदि आपकी लाइब्रेरी आपके लिए यह नहीं करती है, तो आपको गिराए गए कनेक्शन की जांच करनी होगी और फिर से कनेक्ट करना होगा, त्रुटि कोड आदि देखें - यह सब अवलोकन में है। लेकिन जैसे ही वे आते हैं उन्हें जोड़कर आप पहली जगह डुप्लीकेट को पूरी तरह से खत्म कर सकते हैं (जब तक कि आप प्रति उपयोगकर्ता केवल एक प्रविष्टि की अनुमति न दें - लेकिन क्लाइंट-साइड प्रतिबंध जो आप बाद में सौदा करेंगे)।

जहां तक ​​आपके ट्विटर को सिर्फ सामान भेजने के बाद, आप अपने अंत में नियंत्रण में हैं - आप आसानी से अपने क्लाइंट को ट्वीट्स में कैश कर सकते हैं, और फिर उन्हें लिख सकते हैं दिए गए समय पर डीबी या गिनती अंतराल - जो कुछ भी 5 मिनट में इकट्ठा होता है उसे लिखें, या एक बार 100 ट्वीट्स लिखने के बाद लिखें, या दोनों (जाहिर है कि ये संख्या केवल प्लेसहोल्डर्स हैं)। यह तब होता है जब आप मौजूदा उपयोगकर्ता नामों की जांच कर सकते हैं यदि आपको एक कैश-अप सूची लिखना है, तो आपको चीजों को कुशल बनाने के लिए सबसे अच्छा मौका मिलेगा, हालांकि आप चाहते हैं।

अद्यतन: यदि आप लाइव परिणाम प्राप्त करना चाहते हैं (जो आपको ऐसा लगता है) तो ऊपर मेरा समाधान संभवतः ऐसा करने का सबसे अच्छा तरीका है।लेकिन जैसा कि किसी अन्य उत्तर में उल्लिखित है, प्रतियोगिता के खत्म होने के बाद प्रविष्टियों को इकट्ठा करने के लिए Search API का उपयोग करना संभव हो सकता है, और उन्हें स्टोर करने के बारे में चिंता न करें - जब आप परिणामों के लिए पूछते हैं तो आप पृष्ठों को निर्दिष्ट कर सकते हैं (जैसा कि उल्लिखित है खोज एपीआई लिंक), लेकिन सीमाएं हैं कि आप कुल मिलाकर कितने परिणाम प्राप्त कर सकते हैं, जिससे आप कुछ प्रविष्टियों को याद कर सकते हैं। आपके आवेदन के लिए कौन सा समाधान सबसे अच्छा काम करता है आपके ऊपर है।

+0

धन्यवाद, यह सबसे लचीला समाधान की तरह प्रतीत होता है। –

+0

अतिरिक्त रूप से, यदि आप ट्वीट की आईडी में एक अद्वितीय बाधा डालते हैं, तो आप सीएसवी फ़ाइल से ट्वीट लोड कर सकते हैं और डुप्लिकेट के बारे में चिंता नहीं कर सकते हैं। – Jayrox

+0

आप एक फ्लैट फ़ाइल (बहुत तेज़) में ट्वीट से आवश्यक डेटा को सहेजने के लिए PHP के 'fputcsv' का उपयोग कर सकते हैं। फिर MySQL के 'लोड डेटा स्थानीय infile' का उपयोग करें और डेटाबेस में ट्वीट लोड करें। यह भी बहुत तेज़ है। – Jayrox

0

मैंने आपके प्रश्न पर पढ़ा और ऐसा लगता है कि आप ट्विटर द्वारा पहले से संग्रहीत डेटा को डुप्लिकेट करना चाहते हैं। प्रतिस्पर्धा पर अधिक विशिष्टताओं के बिना आपके चल रहे, उपयोगकर्ता उदाहरण के लिए कैसे प्रवेश करते हैं, प्रविष्टियों की अनुमानित राशि; यह जानना असंभव है कि डेटाबेस पर स्थानीय रूप से इस जानकारी को संग्रहीत करना या नहीं, इस समस्या से संपर्क करने का सबसे अच्छा तरीका है।

एक बेहतर समाधान हो सकता है, स्थानीय रूप से डुप्लिकेट डेटा संग्रहित करना छोड़ें और प्रवेशकर्ताओं को सीधे ट्विटर से खींचें, यानी जब आप विजेता को खोजने का प्रयास करते हैं। कोड चल रहा है, तो आप ऑन-द-फ्लाई पर डुप्लिकेट प्रविष्टियों को खत्म कर सकते हैं। एक बार जब यह पहले से प्राप्त की गई 100 प्रविष्टियों को संसाधित करने के बाद आपको "अगला पृष्ठ" कॉल करने की आवश्यकता होगी। हालांकि, मुझे यकीन नहीं है कि यह सीधे ट्विटर एपीआई के माध्यम से संभव है।

+0

यह संभव है, और मैंने पहले से ही इस कार्यक्षमता को हासिल कर लिया है। इसके अलावा मीट्रिक और रिकॉर्ड्स के लिए, लोग चाहते हैं कि हमारे साथ और साथ ही ट्विटर पर दर्ज की गई सामग्री :) –

2

5 मिनट में 100 प्रश्न कुछ भी नहीं है। विशेष रूप से जब एक ट्वीट में अनिवार्य रूप से इसके साथ जुड़े डेटा के केवल 3 टुकड़े होते हैं: उपयोगकर्ता आईडी, टाइमस्टैम्प, ट्वीट, ट्वीट आईडी - कहें, लगभग 170 वर्ण प्रति डेटा डेटा के ट्वीट। जब तक आप 4.77 मेगाहट्र्ज 8088 पर अपना डेटाबेस नहीं चला रहे हैं, तो आपका डेटाबेस उस तरह के "लोड"

+1

एपीआई से ट्वीट्स में 170 वर्णों से उनके साथ काफी अधिक डेटा जुड़ा हुआ है। ट्विटर प्रति ट्वीट से जेसन रिटर्न 3KB से अधिक हो सकता है और अक्सर होते हैं। – Jayrox

0

पर भी झपकी नहीं देगा, मुझे लगता है कि हर एक्स मिनट में एक क्रॉन चला रहा है और इसे मिठाई निर्माण की तारीख से दूर कर सकता है । आप अंतिम रिकॉर्ड किए गए ट्वीट की अंतिम तिथि/समय ढूंढने के लिए अपने डेटाबेस से पूछ सकते हैं, फिर डुप्लिकेट को रोकने के लिए मिलान करने वाले समय होने पर केवल तभी चयन किया जाता है। फिर, जब आप डेटाबेस में अपने आवेषण करते हैं, तो एक या दो डालने वाले बयान का उपयोग करें जिसमें सभी प्रविष्टियां शामिल हैं जिन्हें आप प्रदर्शन जारी रखने के लिए रिकॉर्ड करना चाहते हैं।

INSERT INTO `tweets` (id, date, ...) VALUES (..., ..., ...), (..., ..., ...), ...; 

यह बहुत गहन प्रतीत नहीं होता है ... हालांकि ट्वीट्स की संख्या पर निर्भर करता है जो आप रिकॉर्ड करने की उम्मीद करते हैं। तालिका को ठीक से इंडेक्स करना भी सुनिश्चित करें।

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