फेसबुक एप्लिकेशन में विभिन्न प्रकार के कार्य हो सकते हैं: उदाहरण के लिए, अक्सर एप्लिकेशन को एपीआई के माध्यम से प्राप्त पर्याप्त जानकारी होगी, जबकि उपयोगकर्ता एप्लिकेशन के साथ काम कर रहा है। लेकिन क्या होगा यदि आपके एप्लिकेशन को सबसे हाल के उपयोगकर्ता डेटा के साथ काम करना चाहिए, भले ही उन्होंने इसे एक महीने से अधिक समय तक नहीं खोला हो?
उपयोगकर्ता के आवेदन के साथ काम करते समय न केवल डेटा प्राप्त करने के दो तरीके हैं:
- उपयोगकर्ता से ऑफ़लाइन_ अतिरिक्त अनुमति प्राप्त करें ("अनन्त" उपयोगकर्ता access_token को सहेजें) और आवश्यक डेटा "शेड्यूल के अनुसार" प्राप्त करें (क्रोन स्क्रिप्ट खींचें)।
- एक स्क्रिप्ट लिखें, जो फेसबुक से सभी डेटा परिवर्तन प्राप्त करेगा, रीयल-टाइम अपडेट के माध्यम से अपडेट के लिए कॉन्फ़िगर और सदस्यता लेगा।
बिल्ली के नीचे, आप वास्तविक समय के अपडेट का उपयोग करने का एक आभासी उदाहरण सीखेंगे कि कुछ स्थितियों में प्रति दिन एपीआई अनुरोधों की संख्या को 100 गुना से कम करने में मदद मिलती है। हम स्वयं फेसबुक से वस्तुओं के परिवर्तन पर डेटा प्राप्त करते हुए, अपडेट की सदस्यता लेने और इसके संचालन की जांच करने के लिए एक स्क्रिप्ट लिखेंगे।
लेख की शुरुआत में बहुत सारे सिद्धांत शामिल हैं, जो फेसबुक से
प्रलेखन पृष्ठ के रूसी अनुवाद के समान है। यदि आपके लिए अंग्रेजी में पढ़ना आसान है, तो आप
रियल-टाइम अपडेट्स ऑपरेशन के सेक्शन
उदाहरण के लिए दूसरी विधि में सब कुछ छोड़ सकते हैं। लेकिन किसी कारण से, पहले पढ़ने के बाद, मैं इस कार्यक्षमता को कॉन्फ़िगर करने में असमर्थ था। मुझे उम्मीद है कि यह लेख आपको इसे तेजी से जानने में मदद करता है।
पहला तरीका
कुछ अनुप्रयोगों की कार्यक्षमता एक अनुसूची पर डेटा प्राप्त करने की आवश्यकता से संबंधित हो सकती है। उदाहरण के लिए, आप एक विशिष्ट निर्देशिका से पेज
लाइक एकत्र करते हैं। ऐसा करने के लिए, आपको घंटे में एक बार अंतराल पर डेटा मिलता है। यह एक अच्छा उपयोग मामला है, अन्यथा, आपको बस यह डेटा नहीं मिलेगा। लेकिन अक्सर इस पद्धति का उपयोग उन वस्तुओं के लिए भी किया जाता है जहां अपडेट "समय पर" नहीं बल्कि फेसबुक से ही वास्तविक समय में प्राप्त किया जा सकता है।
पहली विधि के गंभीर नुकसानों में से, निम्नलिखित को प्रतिष्ठित किया जा सकता है:
- कम बार डेटा की जाँच की जाती है, कम विश्वसनीय है।
- लगातार अद्यतन के साथ उच्च संसाधन लागत।
- उपयोगकर्ता किसी भी समय अपने डेटा तक ऑफ़लाइन_access - की अनुमति देने के लिए अनिच्छुक हैं।
कल्पना करें कि आपने एक एप्लिकेशन बनाया है जिसकी कार्यक्षमता उपयोगकर्ता के दोस्तों से जुड़ी हुई है, और आपके लिए नवीनतम जानकारी होना बहुत महत्वपूर्ण है। मान लीजिए कि आपका एप्लिकेशन 1000 उपयोगकर्ताओं द्वारा इंस्टॉल किया गया है। और 1 घंटे मित्र डेटा के लिए स्वीकार्य कैशिंग समय हो। नतीजतन, हर दिन आप 24,000 अनुरोध भेजेंगे ताकि आपके उपयोगकर्ता मित्रों का डेटाबेस अद्यतित हो! और आपके पास केवल 1000 उपयोगकर्ता हैं, और हम यह मान सकते हैं कि एक दिन में सभी के लिए दोस्तों में सौ से अधिक बदलाव नहीं होंगे (ठीक है, यह व्यक्तिगत अनुभव के आधार पर अनुमान है)।
पहली विधि की कमियों को हल करने के लिए, फेसबुक ने अपने ग्राफ एपीआई के लिए रियल-टाइम अपडेट किया।
दूसरा तरीका
वास्तविक समय के अपडेट के लिए समर्थन आपके एप्लिकेशन को फेसबुक डेटा में परिवर्तन की सदस्यता लेने की अनुमति देता है। आपका एप्लिकेशन फेसबुक से अपडेट प्राप्त करता है और फेसबुक सर्वर को "एक शेड्यूल पर" मतदान करने के बजाय डेटा बचाता है। कैशिंग डेटा और इस एपीआई का उपयोग करने से एप्लिकेशन की विश्वसनीयता में सुधार हो सकता है और इसकी लोडिंग का समय कम हो सकता है। जब भी आपके द्वारा सदस्यता ली गई एक परिवर्तन होता है, तो फेसबुक परिवर्तनों की एक सूची के साथ डेटा अपडेट प्रोसेसिंग स्क्रिप्ट के लिए HTTP POST अनुरोध करता है। सर्वर दिखाई देने के कुछ मिनट बाद आपको परिवर्तन की सूचना भेजेगा।
वस्तुएं
फिलहाल, आप निम्न प्रकार की वस्तुओं की सदस्यता ले सकते हैं:
- उपयोगकर्ता - संबंधित ग्राफ़ API नोड्स के साथ विशिष्ट फ़ील्ड और उपयोगकर्ता संबंधों के बारे में सूचनाएं प्राप्त करता है। *
- अनुमतियाँ - उपयोगकर्ता द्वारा आपके आवेदन के लिए अनुमतियाँ बदलने पर सूचनाएं प्राप्त करें।
- पृष्ठ - जब आपके एप्लिकेशन ने आपके एप्लिकेशन को उनके सामान्य गुणों को जोड़ा (स्थापित) जोड़ा है तो सूचनाएं प्राप्त करें।
* उपयोगकर्ता के सभी गुण और संबंध जो आप सदस्यता ले सकते हैं। उदाहरण के लिए, लिंक आपके लिए उपलब्ध हैं: फ़ीड, मित्र, गतिविधियाँ, रुचियां, संगीत, पुस्तकें, फ़िल्में, टेलीविज़न, लाइक, चेकइन। लेकिन एक ही समय में, आप अभी तक इन लिंक में परिवर्तन की सदस्यता नहीं ले सकते हैं: घर, टैग, पोस्ट, फ़ोटो, एल्बम, वीडियो, समूह, नोट्स, ईवेंट, इनबॉक्स, आउटबॉक्स, अपडेट, खाते
अंशदान
अद्यतनों की सदस्यता स्थापित करने के लिए, आपको चाहिए:
- एक स्क्रिप्ट (URL) सेट करें जो फेसबुक से HTTP GET (सदस्यता को सत्यापित करने के लिए) और POST (डेटा बदलने के बारे में) अनुरोध दोनों प्राप्त करेगा।
- ग्राफ एपीआई के लिए एक पोस्ट अनुरोध करें
https://graph.facebook.com/<app-id>/subscriptions
सदस्यता, और सत्यापन अनुरोध को संसाधित करने के लिए तैयार रहें।
को निवेदन भेजकर
https://graph.facebook.com/ <app-id> / सदस्यताएँ? access_token = ...
आप तीन चीजें कर सकते हैं, जिसके आधार पर HTTP POST, GET, या DELETE आपके द्वारा भेजे गए अनुरोध:
- सदस्यता (POST) जोड़ें और बदलें।
- उन सभी वस्तुओं के साथ-साथ उनके क्षेत्रों की सूची प्राप्त करें जिन्हें आपने (GET) को सदस्यता दी थी
- सदस्यता हटाएं (DELETE)
अनुरोध में access_token एप्लिकेशन शामिल होना चाहिए, जिसे आपकी एप्लिकेशन आईडी (ऐप-आईडी) और एप्लिकेशन सीक्रेट की (ऐप-सीक्रेट) का उपयोग करके प्राप्त किया जा सकता है। बस एक HTTP GET भेजें
https://graph.facebook.com/oauth/access_token?client_id=<app-id>&client_secret=<app-secret>&grant_type=client_credentials
और जवाब आएगा: access_token = ...
सदस्यता जोड़ना और बदलना
तो, आप ऊपर पढ़ते हैं जहां आपको सदस्यता जोड़ने के लिए अनुरोध भेजने की आवश्यकता होती है। इन अनुरोधों को तुरंत पूरा करने के लिए जल्दी मत करो - सामग्री की प्रस्तुति की संरचना आवश्यक चरणों के अनुक्रम के समान नहीं है। यह विशेष रूप से क्रमिक रूप से सामग्री का अध्ययन करने के लिए किया जाता है। लेकिन उदाहरण में, आप उन प्रश्नों को पूरा करने वाले पहले व्यक्ति होंगे, जो उदाहरण से पहले अंतिम भाग में वर्णित हैं।
एक आवेदन में प्रत्येक प्रकार की वस्तुओं के लिए केवल एक ही सदस्यता हो सकती है। यदि आप एक ऐसी वस्तु जोड़ते हैं जिसमें पहले से ही एक सदस्यता है, तो मौजूदा सदस्यता को एक नए के साथ बदल दिया जाएगा। सदस्यता जोड़ने या बदलने के लिए, आपको फ़ील्ड वाले POST अनुरोध भेजना होगा:
- ऑब्जेक्ट - ऑब्जेक्ट प्रकार: उपयोगकर्ता, अनुमतियाँ या पृष्ठ। आप इस प्रकार की सभी वस्तुओं की निगरानी करेंगे, उदाहरण के लिए, आपके एप्लिकेशन के सभी उपयोगकर्ता।
- फ़ील्ड - चयनित ऑब्जेक्ट के गुणों और संबंधों की एक सूची (अल्पविराम द्वारा अलग किए गए तत्व)। उदाहरण के लिए, उपयोगकर्ता के नाम, चित्र, मित्र क्षेत्रों और साथ ही समाचार फ़ीड लिंक में परिवर्तन की निगरानी के लिए, आपको "नाम, चित्र, मित्र, फ़ीड" मान निर्दिष्ट करना होगा
- callback_url - वह URL जिस पर Facebook उन परिवर्तनों को पोस्ट करेगा जिनके लिए एप्लिकेशन सब्सक्राइब किया गया है।
- verify_token "गुप्त कोड" है जिसे आपने अनुरोध की प्रामाणिकता को सत्यापित करने के लिए निर्धारित किया है। यह सदस्यता प्रसंस्करण स्क्रिप्ट को पारित किया जाएगा।
सभी ऑब्जेक्ट्स के साथ-साथ उनके फ़ील्ड्स की सूची प्राप्त करना जिन्हें आपने सब्सक्राइब किया था
सदस्यता URL के लिए GET अनुरोध करके
https://graph.facebook.com/ <app-id> / सदस्यताएँ? access_token = ...
आपको JSON- एन्कोडेड सामग्री के साथ एक प्रतिक्रिया मिलेगी जो आपकी सदस्यता को सूचीबद्ध करती है। मैंने उपयोगकर्ता ऑब्जेक्ट के दोस्तों के कनेक्शन की सदस्यता ली है, साथ ही अनुमतियों में भी ऑफलाइन_access। यहाँ जवाब है:
{
"डेटा": [
{
"ऑब्जेक्ट": "उपयोगकर्ता",
"callback_url": "http://millione.tv/<path to script>",
"फ़ील्ड": [
"मित्र"
]
"सक्रिय": सच
}
{
"ऑब्जेक्ट": "अनुमतियां",
"callback_url": "http://millione.tv/<path to script>",
"फ़ील्ड": [
"Offline_access"
]
"सक्रिय": सच
}
]
}
सदस्यता हटाएं
सभी वस्तुओं के लिए एक संपूर्ण सदस्यता को हटाने के लिए, एक DELETE अनुरोध भेजें। यदि आप किसी विशिष्ट ऑब्जेक्ट से सदस्यता समाप्त करना चाहते हैं, तो ऑब्जेक्ट पैरामीटर (उदाहरण के लिए, ऑब्जेक्ट = उपयोगकर्ता) निर्दिष्ट करें।
आपका कॉलबैक सर्वर
जब आप किसी सदस्यता को जोड़ने या संशोधित करने का प्रयास करते हैं, तो फेसबुक सर्वर आपके कॉलबैक_url पर HTTP GET अनुरोध करते हैं। एक सफल सदस्यता के बाद, फेसबुक सर्वर उसी URL पर HTTP POST का उपयोग करके परिवर्तन सूचनाएं भेजेंगे।
सदस्यता सत्यापन
सदस्यता को अंतिम रूप से जोड़ने या संशोधित करने से पहले, फेसबुक सर्वर आपके कॉलबैक_url पर एक HTTP GET बनायेगा, जिसमें निम्न पैरामीटर होंगे:
- hub.mode - इस पैरामीटर में स्ट्रिंग 'सदस्यता' पारित हो गई है।
- hub.challenge - रैंडम स्ट्रिंग।
- hub.verify_token "गुप्त कोड" है जिसे आपने फेसबुक पर सबमिट किए गए अनुरोध की प्रामाणिकता को सत्यापित करने के लिए निर्धारित किया है।
डेटा अद्यतनों को संसाधित करने के लिए स्क्रिप्ट को पहले hub.verify_token - "गुप्त कोड" के मान की जांच करनी चाहिए जिसे आपने फेसबुक पर प्रसारित किया था, और फिर hub.challenge पैरामीटर को वापस लौटा दिया। यह विशेष रूप से स्क्रिप्ट को सर्वर पर DDoS हमले के संचालन के साधन के रूप में ढालने के लिए किया जाता है।
डेवलपर्स के लिए ध्यान दें: PHP में, एक अवधि स्वचालित रूप से मापदंडों में एक अंडरस्कोर में बदल जाती है। इसलिए, आपको
$_GET["hub_mode"]
,
$_GET["hub_challenge"]
और
$_GET["hub_verify_token"]
उल्लेख करना चाहिए।
सूचनाएं बदलें
जब डेटा बदलता है, और एक वैध सदस्यता होती है, तो फेसबुक सर्वर आपके द्वारा निर्दिष्ट कॉलबैक_उर्ल के लिए HTTP POST अनुरोध करता है। अनुरोध सामग्री का प्रकार आवेदन / जसन होगा; शरीर - JSON- एन्कोडेड स्ट्रिंग जिसमें एक या अधिक परिवर्तनों की जानकारी होती है। एक उदाहरण आवेदन कोड में नीचे देखा जा सकता है।
यह ध्यान दिया जाना चाहिए कि लाइन में वर्तमान मूल्य पर डेटा नहीं होगा। इसलिए, आपको उन्हें प्राप्त करने के लिए एपीआई के लिए एक नियमित अनुरोध करने की आवश्यकता होगी (सुरक्षा नीति के कारण)। आप आवश्यक डेटा तुरंत डाउनलोड कर सकते हैं ताकि उपयोगकर्ता, एप्लिकेशन पर लौटकर, डाउनलोड समय में वृद्धि के साथ जटिलताओं का अनुभव न करे।
फेसबुक परिवर्तनों को एकत्र करता है और उन्हें हर 5 सेकंड में बैचों में भेजता है, या यदि परिवर्तनों की संख्या 1000 से अधिक हो गई है। उस स्थिति में जब परिवर्तन की सूचना आपको नहीं दी गई थी, तो फेसबुक फिर से कोशिश करेगा, और फिर थोड़ी देर बाद, अगले 24 घंटों में अनुरोधों की आवृत्ति को कम कर देगा।
वास्तविक समय अपडेट कार्य उदाहरण
हम सिद्धांत को व्यवहार में लाते हैं। ऐसा करने के लिए, आपको होस्टिंग की आवश्यकता होगी, एक PHP स्क्रिप्ट जो आपके डोमेन पर निर्दिष्ट पते callback_url पर स्थित होगी। आपको फेसबुक ऐप की भी आवश्यकता होगी। आप मौजूदा एक का उपयोग कर सकते हैं, या डेवलपर के
आवेदन पृष्ठ पर एक नया बना सकते हैं।
1. आवेदन

2. डेटा अपडेट को संसाधित करने की स्क्रिप्ट
Callback_url के लिए स्क्रिप्ट सहेजें
<? php
/ * नोट 15 सेकंड के भीतर अनुरोध पूरा करना होगा।
अन्यथा फेसबुक सर्वर इसे टाइमआउट मान लेगा और
फिर से पुश सूचना को फिर से भेजें। * /
परिभाषित ( 'VERIFY_TOKEN' , '<secret_code>' ) ;
$ पद्धति = $ _SERVER [ 'REQUEST_METHOD' ] ;
if ( $ पद्धति == 'GET' && $ _GET [ 'hub_mode' ] == 'सदस्यता'
&& $ _GET [ 'hub_verify_token' ] == VERIFY_TOKEN ) {
गूंज $ _GET [ 'hub_challenge' ] ;
} और
अगर ( $ पद्धति == 'POST' ) {
$ डेटा = file_get_contents ( "php: // input" ) ;
$ fh = fopen ( 'data.txt' , 'a' ) या die ( 'ओपन फाइल' ) ;
if ( - 1 == fwrite ( $ fh , $ data ) ) { die ( 'राइट डेटा' ) ; }
fclose ( $ fh ) या die ( 'क्लोज़ फाइल' ) ;
}
?>
3. एक सदस्यता जोड़ें
उसके बाद, हम फेसबुक डेवलपर्स के लिए नए टूल का उपयोग करेंगे -
ग्राफ एपीआई एक्सप्लोरर ।

सदस्यता जोड़ने और सभी क्षेत्रों को भरने के लिए POST अनुरोध का चयन करें। Access_token (एप्लिकेशन) प्राप्त करने के लिए, ब्राउज़र में एक लिंक खोलें, अपने ऐप के डेटा के साथ ऐप-आईडी और ऐप-सीक्रेट भरें।
https://graph.facebook.com/oauth/access_token?client_id=<app-id>&client_secret=<app-secret>&grant_type=client_credentials
उदाहरण के लिए स्क्रिप्ट का पथ facebook / callback.php हो सकता है। यह महत्वपूर्ण है कि आप एप्लिकेशन सेटिंग्स से ऐप-सीक्रेट लेते हैं, और आप खुद को verify_token में गुप्त कोड बनाते हैं!
इसलिए, यदि नीचे दिए गए ग्रे बॉक्स में सबमिट पर क्लिक करने के बाद कुछ नहीं हुआ है, तो इसका मतलब है कि आपने अभी भी उपयोगकर्ता ऑब्जेक्ट के दोस्तों के कनेक्शन के लिए एक सदस्यता जोड़ी है, और अब, जैसे ही आपके आवेदन का कोई भी उपयोगकर्ता अपने एक दोस्त को जोड़ता है या हटाता है, फेसबुक आपको एक call__l अधिसूचना भेजेगा । मेरे उदाहरण में, मैंने offline_access अनुमतियों ऑब्जेक्ट में एक सदस्यता भी जोड़ी है।
4. उपयोगकर्ता गतिविधि बनाएँ
यदि आपने अपना एप्लिकेशन इंस्टॉल किया है - तो कोई बड़ी बात नहीं है। यदि नहीं, भी। क्रियाओं का क्रम वही है।
सबसे पहले आपको offline_access अनुमति को जोड़ना होगा। यदि एप्लिकेशन इंस्टॉल नहीं किया गया है, तो यह स्वचालित रूप से होगा। मैंने एप्लिकेशन इंस्टॉल नहीं किया है। मैं ब्राउज़र लाइन के माध्यम से प्राधिकरण विंडो को कॉल करने का प्रयास करूंगा। अपने एप्लिकेशन आईडी के साथ ऐप-आईडी बदलकर और http: // <अपने डोमेन> के साथ साइट-यूआरएल को बदलकर लिंक खोलें:
https://www.facebook.com/dialog/oauth?client_id=<app-id>&redirect_uri=<site-url>&scope=offline_access

सफल प्राधिकरण के बाद, फेसबुक आपको http: // <अपने डोमेन> /? कोड = ... पर रीडायरेक्ट करेगा।
स्क्रिप्ट में निहित तर्क के अनुसार - एक आने वाली अधिसूचना को संसाधित करते समय, हम बस ट्रांसमिट किए गए JSON-एन्कोडेड लाइन को टेक्स्ट फ़ाइल data.txt में जोड़ते हैं, जो स्क्रिप्ट के समान निर्देशिका में होगी। जांचें कि क्या यह फ़ाइल बनाई गई थी और इसमें क्या जानकारी है।
मेरी गयी जानकारी इस तरह दिखती है:
{"object":"permissions","entry":[{"uid":"100001828786121","id":"100001828786121","time":1310669052,"changed_fields":["connected"]},{"uid":"100001828786121","id":"100001828786121","time":1310669052,"changed_fields":["offline_access"]}]}
जैसा कि आप देख सकते हैं, मैंने एप्लिकेशन इंस्टॉल किया और ऑफ़लाइन_ अतिरिक्त अनुमति दी। यूआईडी द्वारा आप उस उपयोगकर्ता को निर्धारित कर सकते हैं जिसका डेटा बदल गया है, और समय के साथ - इसके अलावा का समय।
5. कार्यों को हटा दें
आप फेसबुक पर
एप्लिकेशन सेटिंग में जा सकते हैं, अपना आवेदन खोल सकते हैं और ऑफलाइन_अधिकृत अनुमति को हटा सकते हैं। Data.txt फाइल में, आप देखेंगे कि आपको फिर से एक नोटिफिकेशन भेजा गया है। आप अपने किसी मित्र को जोड़ या हटा भी सकते हैं - आप देखेंगे कि ये सूचनाएं जो आपने सदस्यता ली हैं, कॉलबैक_र्ल पर आएंगी और आपकी स्क्रिप्ट द्वारा संसाधित की जाएंगी।
निष्कर्ष
अब आप फेसबुक रियल-टाइम अपडेट्स की अद्भुत विशेषता के बारे में जानते हैं, जो आपको उपयोगकर्ता डेटा और अनुमतियों में परिवर्तन के बारे में जानकारी भेज सकते हैं। दुर्भाग्य से, किसी कारण से, जब उपयोगकर्ता ने एप्लिकेशन को हटा दिया, तो डेटा नहीं बदला। इसलिए, जैसे कि नई विधि ने समय और संसाधनों को नहीं बचाया - फिर भी, जब कुछ कार्यों को लागू करते समय (उदाहरण के लिए, एप्लिकेशन के सभी उपयोगकर्ताओं को मेलिंग भेजना), तब भी यह नियमित रूप से एपीआई के माध्यम से आपके डेटाबेस में सभी उपयोगकर्ताओं के माध्यम से जाने के लिए सार्थक है, जाँच करें कि क्या उन्होंने आपका एप्लिकेशन इंस्टॉल किया है ।