इस एंडपॉइंट को पोस्ट संपादन मेटाडेटा शामिल करने के लिए अपडेट किया गया है। इस मेटाडेटा के बारे में अधिक जानने के लिए “Edit Posts” fundamentals page देखें।
Decahose स्ट्रीम
- Expanded और enhanced URLs: - छोटे किए गए URLs को पूरी तरह विस्तृत करता है और अतिरिक्त metadata (पेज title और description) प्रदान करता है
- स्ट्रीम partitioning - 2 partitions, जिनमें से प्रत्येक में Decahose स्ट्रीम के वॉल्यूम का 50% शामिल होता है
- बेहतर विश्वसनीयता - backend systems की भौगोलिक विविधता
ENTERPRISE
लाइक की स्ट्रीमिंग
- लाइक एक स्वतंत्र, अलग स्ट्रीम के माध्यम से डिलीवर किए जाते हैं
- ऐतिहासिक रूप से लाइक को “Favorites” कहा जाता था। enriched native format payload में यही नामकरण बना रहता है
- स्ट्रीम्स में केवल सार्वजनिक लाइक शामिल होते हैं
- सार्वजनिक का मतलब है कि लाइक करने वाला उपयोगकर्ता, पोस्ट बनाने वाला उपयोगकर्ता, और पोस्ट — तीनों ही प्लेटफ़ॉर्म पर सार्वजनिक हों
- लाइक, Retweets से काफ़ी मिलते-जुलते हैं और एंगेजमेंट का एक सार्वजनिक संकेत होते हैं
- Payload तत्वों में शामिल हैं:
- मूल पोस्ट ऑब्जेक्ट
- मूल पोस्ट बनाने वाला Actor ऑब्जेक्ट
- like कार्रवाई करने वाला Actor ऑब्जेक्ट
- केवल मूल सामग्री को ही लाइक किया जा सकता है
- Retweets को लाइक नहीं किया जा सकता। किसी Retweet पर किया गया like मूल पोस्ट पर लागू होता है
- Quoted Tweets को लाइक किया जा सकता है
- Like activities में लागू Gnip Enrichments शामिल होते हैं (जहां खरीदे/लागू किए गए हों)
- समर्थित Products / Features
- लाइक streams, बैकफ़िल को सपोर्ट करती हैं (जहां खरीदा/लागू किया गया हो)
- लाइक streams के लिए Replay सपोर्ट नहीं है
- लाइक के लिए Search या Historical सपोर्ट नहीं है
- PowerTrack में लाइक सपोर्ट जोड़ने की कोई तत्काल योजना नहीं है
- Decahose में डिलीवर किए गए 10% sample Posts के लिए, स्ट्रीम में लागू सार्वजनिक लाइक का 100% शामिल होता है
- Partitions: 2
- URL संरचना
मार्गदर्शिकाएँ
Recovery और रिडंडेंसी
- कई परिवेशों के समर्थन के लिए, हम आपके खाते के लिए अतिरिक्त स्ट्रीम्स तैनात कर सकते हैं। ये स्ट्रीम्स एक-दूसरे से स्वतंत्र होती हैं और इनमें अंतर स्पष्ट करने के लिए इनका stream_label अलग होता है।
- कनेक्शन बनाए रखने में सहायता के लिए, प्रत्येक Decahose स्ट्रीम रिडंडेंट कनेक्शंस का समर्थन करती है। सबसे सामान्य आर्किटेक्चर में एक स्ट्रीम के दो कनेक्शन होते हैं, और client-side पर दो स्वतंत्र consumers होते हैं – आदर्श रूप से अलग-अलग नेटवर्क्स पर। इस डिज़ाइन में client-side नेटवर्क्स, servers और datastore pathways के बीच रिडंडेंसी हो सकती है। ध्यान दें कि प्रत्येक कनेक्शन पर डेटा की पूरी कॉपी दी जाती है, इसलिए client-side को डुप्लिकेट डेटा को संभालने और प्रबंधित करने में सक्षम होना चाहिए।
- हर 10 सेकंड में एक ‘heartbeat’ प्रदान किया जाएगा; हालांकि, Decahose स्ट्रीम में डेटा की मात्रा इतनी अधिक होती है कि पोस्ट्स का थोड़ी-सी अवधि (उदाहरण के लिए, कुछ सेकंड) तक भी न आना कनेक्शन समस्या का संकेत हो सकता है। इसलिए, डिस्कनेक्ट का पता लगाने के लिए ‘data silence’ और heartbeat का न मिलना, दोनों का उपयोग किया जा सकता है।
अतिरिक्त स्ट्रीम्स
अवलोकन
Recovery का उपयोग
डेटा उपलब्धता
बैकफिल
backfillMinutes=N पैरामीटर जोड़ना होगा, जहाँ N उन मिनटों की संख्या है (1-5, केवल पूर्णांक) जिनके लिए कनेक्शन स्थापित होने पर बैकफिल किया जाएगा। उदाहरण के लिए, यदि आपका कनेक्शन 90 सेकंड के लिए टूट जाता है, तो आपको अपने कनेक्शन अनुरोध में backfillMinutes=2 जोड़ना चाहिए। चूँकि यह अनुरोध 2 मिनट का बैकफिल देगा, जिसमें आपके डिस्कनेक्ट होने से पहले के 30 सेकंड भी शामिल हैं, इसलिए आपका consumer ऐप डुप्लिकेट डेटा को संभालने में सक्षम होना चाहिए।
partition 1 के लिए 5 मिनट का बैकफिल माँगने वाला एक उदाहरण Decahose कनेक्शन अनुरोध URL इस प्रकार है:
https://gnip-stream.x.com/stream/sample10/accounts/:account_name/publishers/twitter/:stream_label.json?partition=1&backfillMinutes=5
नोट्स:
-
आपके पास यह विकल्प भी है कि कनेक्ट करते समय हमेशा
backfillMinutes=5का उपयोग करें, और फिर प्राप्त होने वाले किसी भी डुप्लिकेट डेटा को संभालें। - यदि आपका कनेक्शन पाँच मिनट से अधिक समय के लिए टूट जाता है, तो आप Recovery का उपयोग करके डेटा पुनर्प्राप्त कर सकते हैं।
- डिस्कनेक्ट अवधि की लंबाई निर्धारित करना।
- 5 मिनट या उससे कम?
- यदि आपके स्ट्रीम के लिए Backfill सक्षम है, तो उपयुक्त
backfillMinutesपैरामीटर के साथ कनेक्शन अनुरोध तैयार करें।
- यदि आपके स्ट्रीम के लिए Backfill सक्षम है, तो उपयुक्त
- 5 मिनट से अधिक?
- यदि आपके पास Recovery स्ट्रीम है, तो डिस्कनेक्ट अवधि के लिए Recovery अनुरोध करें (आदर्श रूप से अपने मौजूदा realtime rule set के साथ, और आवश्यकता होने पर Rules API का उपयोग करते हुए)।
- 5 मिनट या उससे कम?
- नए कनेक्शन का अनुरोध करें।
- बैकफिल लागू करें बैकफिल आपको स्ट्रीम कनेक्शन से डिस्कनेक्ट होने से पहले के किसी बिंदु से फिर से कनेक्ट करने देता है, और 5 मिनट तक के डिस्कनेक्ट को कवर करता है। इसे कनेक्शन अनुरोध में एक पैरामीटर शामिल करके लागू किया जाता है।
- किसी अन्य स्थान से रिडंडेंट स्ट्रीम कंज्यूम करें यदि रिडंडेंट स्ट्रीम को उसी live environment में स्ट्रीम किया जा सकता है और डेटा को डुप्लिकेट-मुक्त किया जा सकता है, तो आपको recovery की आवश्यकता नहीं होगी, जब तक कि सामान्य स्ट्रीम और रिडंडेंट स्ट्रीम दोनों में एक साथ डाउनटाइम या डिस्कनेक्ट न हो। यदि रिडंडेंट स्ट्रीम को production environment में live स्ट्रीम नहीं किया जा सकता, तो इसे एक अलग “emergency” data store में लिखा जा सकता है। फिर, primary स्ट्रीम कनेक्शन पर डिस्कनेक्ट या डाउनटाइम होने की स्थिति में, आपके सिस्टम के पास उस अवधि का डेटा उपलब्ध रहेगा जिसमें डेटा गायब है, ताकि आपके primary database की कमी पूरी की जा सके
- Recovery लागू करें जहाँ डिस्कनेक्ट या डाउनटाइम primary स्ट्रीम और रिडंडेंट स्ट्रीम दोनों को प्रभावित करते हैं, वहाँ छूटे हुए डेटा को पुनर्प्राप्त करने के लिए Decahose Recovery का उपयोग करें। API archive के 5 दिनों को कवर करने वाली एक rolling window प्रदान करता है, और इसका सर्वोत्तम उपयोग यही है कि एक बार में उस window के एक घंटे से अधिक का अनुरोध न किया जाए और उसे स्ट्रीम किया जाए। यह realtime स्ट्रीम के समानांतर किया जाता है। ध्यान दें कि Recovery द्वारा प्रदान की गई 5-दिन की window से आगे के Decahose डेटा को पुनर्प्राप्त करने के लिए हमारे पास कोई समाधान नहीं है, इसलिए यह महत्वपूर्ण है कि आप रिडंडेंट स्ट्रीम का उपयोग करें, ताकि आपकी ओर से गंभीर डाउनटाइम की स्थिति में आपके पास डेटा की पूर्ण प्रति मौजूद रहे।
- आने वाले पोस्ट्स की गणना करें आपके सिस्टम को अपने ingestion ऐप की शुरुआत में ही प्राप्त होने वाले पोस्ट्स की कुल संख्या गिननी चाहिए, और फिर उन संख्याओं की तुलना आपके अंतिम data store तक पहुँचने वाले पोस्ट्स की संख्या से करने का कोई तरीका होना चाहिए। किसी भी अंतर की निगरानी की जा सकती है, और आपकी टीम को उन समस्याओं के बारे में सतर्क किया जा सकता है जिनकी वजह से डेटा प्राप्त होने के बाद छूट रहा है।
- संग्रहीत मात्रा में असामान्य गिरावट का विश्लेषण करें आप अपने अंतिम database में संग्रहीत डेटा की मात्रा का विश्लेषण भी करना चाह सकते हैं, ताकि असामान्य गिरावटों की पहचान की जा सके। यह भी समस्याओं का संकेत हो सकता है, हालाँकि ऐसी परिस्थितियाँ भी हो सकती हैं जिनमें मात्रा में गिरावट सामान्य हो (उदाहरण के लिए, यदि X प्लेटफ़ॉर्म उपलब्ध न हो और लोग कुछ समय तक पोस्ट्स न बना सकें)।
API संदर्भ
Decahose स्ट्रीम
विधि
| मेथड | विवरण |
|---|---|
| GET /{stream-type}/:stream | डेटा स्ट्रीम से कनेक्ट करें |
GET :stream
Firehose stream के लिए एक स्थायी कनेक्शन स्थापित करता है, जिसके माध्यम से रीयल-टाइम डेटा वितरित किया जाता है।अनुरोध विनिर्देश
| अनुरोध विधि | HTTP GET |
| कनेक्शन प्रकार | Keep-Alive इसे अनुरोध के header में निर्दिष्ट किया जाना चाहिए। |
| URL | यह आपके dashboard में स्ट्रीम के API Help पेज पर, निम्न संरचना का उपयोग करते हुए, उपलब्ध होगा: Decahose: https://gnip-stream.x.com/stream/sample10/accounts/:account_name/publishers/twitter/:stream_label.json?partition=1 |
| Partition (आवश्यक) | partition=\{#} - अब पूरी स्ट्रीम प्राप्त करने के लिए partitioning आवश्यक है। आपको निर्दिष्ट partition parameter के साथ स्ट्रीम से कनेक्ट करना होगा। नीचे प्रत्येक स्ट्रीम के लिए partitions की संख्या दी गई है:* Decahose: 2 partitions |
| कम्प्रेशन | Gzip. Gzip compression का उपयोग करके स्ट्रीम से कनेक्ट करने के लिए, connection अनुरोध में केवल Accept-Encoding header भेजें। header इस प्रकार होना चाहिए: Accept-Encoding: gzip |
| करेक्टर एन्कोडिंग | UTF-8 |
| रिस्पॉन्स प्रारूप | JSON. आपके अनुरोध के header में रिस्पॉन्स के लिए JSON format निर्दिष्ट होना चाहिए। |
| रेट लिमिट | 60 सेकंड में 10 अनुरोध। |
| बैकफ़िल parameter | यदि आपने बैकफ़िल enabled वाली स्ट्रीम खरीदी है, तो इसे सक्षम करने के लिए आपको GET अनुरोध में “backfillMinutes” parameter जोड़ना होगा। |
| रीड टाइमआउट | अपने client पर read timeout सेट करें, और सुनिश्चित करें कि यह 30 सेकंड से अधिक के मान पर सेट हो। |
| Tweet संपादनों के लिए समर्थन | सभी Tweet objects में Tweet edit metadata शामिल होगा, जो Tweet के edit history का वर्णन करता है। अधिक जानकारी के लिए “Edit Tweets” fundamentals page देखें। |
रिस्पॉन्स
| Status | Text | Description |
|---|---|---|
| 200 | सफलता | कनेक्शन सफलतापूर्वक स्थापित हो गया, और नई गतिविधियाँ उपलब्ध होते ही भेजी जाएँगी। |
| 401 | अनधिकृत | अमान्य क्रेडेंशियल्स के कारण HTTP प्रमाणीकरण विफल हो गया। अपने क्रेडेंशियल्स के साथ console.gnip.com में लॉग इन करें, ताकि यह सुनिश्चित किया जा सके कि आप उन्हें अपने अनुरोध में सही तरीके से उपयोग कर रहे हैं। |
| 406 | स्वीकार्य नहीं | आम तौर पर, यह तब होता है जब आपका क्लाइंट स्ट्रीम से gzip एन्कोडिंग स्वीकार करने के लिए आवश्यक हेडर्स सही तरीके से शामिल नहीं करता, लेकिन यह अन्य परिस्थितियों में भी हो सकता है। इसमें “This connection requires compression. To enable compression, send an ‘Accept-Encoding: gzip’ header in your request and be ready to uncompress the stream as it is read on the client end.” जैसा एक JSON संदेश शामिल होगा। |
| 429 | दर-सीमा पार | आपके ऐप ने कनेक्शन अनुरोधों की सीमा पार कर ली है। |
| 503 | सेवा अनुपलब्ध | Twitter सर्वर में समस्या। exponential backoff पैटर्न का उपयोग करके दोबारा कनेक्ट करें। यदि इस समस्या के बारे में X API Status Page पर कोई सूचना पोस्ट नहीं की गई है, तो 10 मिनट बाद भी कनेक्ट न हो पाने पर support या emergency से संपर्क करें। |