चेतावनी: यह पेज, Google के पुराने एपीआई, Google Data API के बारे में है. यह सिर्फ़ उन एपीआई के लिए काम का है जो Google Data API डायरेक्ट्री में शामिल हैं. इनमें से कई एपीआई को नए एपीआई से बदल दिया गया है. किसी खास नए एपीआई के बारे में जानकारी पाने के लिए, उस नए एपीआई का दस्तावेज़ देखें. नए एपीआई की मदद से अनुरोधों को अनुमति देने के बारे में जानकारी पाने के लिए, Google खातों के लिए पुष्टि करने और अनुमति देने की सुविधा लेख पढ़ें.
रयान बॉयड, Google Data APIs Teamसितंबर 2007
- शुरुआती जानकारी
- cURL को पाना और इंस्टॉल करना
- Google की डेटा सेवा के लिए पुष्टि करना
- फ़ीड और एंट्री वापस पाना
- एंट्री अपडेट की जा रही हैं
- प्रविष्टियां बनाना
- एंट्री मिटाना
- मीडिया ऑब्जेक्ट अपलोड करना
- अन्य कमांड-लाइन टूल
- निष्कर्ष
परिचय
Google Data API, डेटा फ़ॉर्मैट के तौर पर Atom फ़ीड और एंट्री (एक्सएमएल) का इस्तेमाल करते हैं. साथ ही, डेटा ट्रांसमिशन के लिए एचटीटीपी का इस्तेमाल करते हैं. यह ऐटम पब्लिशिंग प्रोटोकॉल का एक्सटेंशन है. हम कई क्लाइंट लाइब्रेरी पब्लिश करते हैं, ताकि Google Data API के साथ इंटरैक्ट करना आसान हो. हालांकि, हमारी सेवाओं के साथ काम करने के लिए, आपके पास हमेशा निचले लेवल के टूल इस्तेमाल करने का विकल्प होता है. कुछ निर्देशों की मदद से, ऐसा आसानी से किया जा सकता है.
cURL, कमांड-लाइन ऐप्लिकेशन है. इसका इस्तेमाल, एचटीटीपी जैसे कई प्रोटोकॉल का इस्तेमाल करके अनुरोध करने के लिए किया जाता है. डेवलपर अक्सर Google की डेटा सेवाओं को टेस्ट करने के लिए cURL का इस्तेमाल करते हैं. ऐसा इसलिए, क्योंकि यह एचटीटीपी फ़ंक्शन के साथ काम करता है. इस फ़ंक्शन की मदद से, एपीआई के साथ कम लेवल पर इंटरैक्ट किया जा सकता है.
cURL सिर्फ़ एचटीटीपी कम्यूनिकेशन के लिए सहायता उपलब्ध कराता है. इसलिए, ऐप्लिकेशन का इस्तेमाल करने के लिए, Google डेटा प्रोटोकॉल, सेवा के हिसाब से प्रोटोकॉल, और इस्तेमाल किए गए एक्सएमएल डेटा फ़ॉर्मैट के बारे में जानकारी होना ज़रूरी है. इन कामों को आसान बनाने के लिए, इस लेख में कुछ अन्य टूल के बारे में बताया गया है.
इस लेख में, Picasa Web Albums Data API पर आधारित उदाहरणों का इस्तेमाल किया गया है. हालांकि, इन सभी उदाहरणों को अन्य Google Data APIs पर आसानी से लागू किया जा सकता है.
cURL को पाना और इंस्टॉल करना
cURL, UNIX/Linux के कई प्लैटफ़ॉर्म पर डिफ़ॉल्ट रूप से इंस्टॉल होता है. अपने पसंदीदा शेल में curl
टाइप करके देखें कि टूल इंस्टॉल है या नहीं. साथ ही, यह भी देखें कि यह आपके PATH
में है या नहीं. अगर आपने यह टूल इंस्टॉल नहीं किया है, तो cURL की वेबसाइट पर डाउनलोड पेज पर जाएं. यहां आपको आधिकारिक सोर्स या उपयोगकर्ता का योगदान दिया गया बाइनरी पैकेज मिलेगा. ध्यान दें कि कमांड-लाइन टूल, libcurl
लाइब्रेरी का इस्तेमाल करता है. इसे अलग से डाउनलोड किया जा सकता है. इसलिए, अगर आपको सोर्स से कंपाइल नहीं करना है, तो 'libcurl' पैकेज के बजाय 'बाइनरी' पैकेज डाउनलोड करें. अगर आपको पुष्टि करने वाले टोकन पाने के लिए cURL का इस्तेमाल करना है या Google की कुछ ऐसी डेटा सेवाओं को ऐक्सेस करना है जिनके लिए अनुरोधों में एसएसएल का इस्तेमाल करना ज़रूरी है, तो एसएसएल की सुविधा वाले पैकेज ज़रूरी हैं.
Google की डेटा सेवा के लिए पुष्टि करना
पुष्टि किए गए Google डेटा के अनुरोधों को पूरा करने के लिए, अनुरोध में एक एचटीटीपी हेडर जोड़ा जाता है. इसमें ClientLogin (डेस्कटॉप/मोबाइल ऐप्लिकेशन) या AuthSub (वेब ऐप्लिकेशन) पुष्टि करने वाला टोकन होता है. cURL का इस्तेमाल करके टेस्टिंग के लिए, ClientLogin एक आसान तरीका है. इसके बारे में यहां बताया गया है. cURL के साथ AuthSub पुष्टि करने वाले हेडर का इस्तेमाल किया जा सकता है. हालांकि, टोकन पाने की ज़्यादा बेहतर प्रोसेस के बारे में इस लेख में नहीं बताया गया है.
ClientLogin का इस्तेमाल करना
ClientLogin का इस्तेमाल, इंस्टॉल किए गए (डेस्कटॉप/मोबाइल) ऐप्लिकेशन के लिए किया जाता है. पुष्टि करने के इस तरीके में, Google Data API का इस्तेमाल करने वाला ऐप्लिकेशन, उपयोगकर्ता के नाम और पासवर्ड को सीधे तौर पर मैनेज करता है.
ClientLogin के लिए पुष्टि करने के अनुरोध में, उपयोगकर्ता नाम, पासवर्ड, और सेवा का नाम, फ़ॉर्म पोस्ट वैरिएबल के तौर पर लिया जाता है. इन वैरिएबल को Email
, Passwd
, और service
आर्ग्युमेंट के तौर पर पास किया जाता है. इस अनुरोध के जवाब में कई टोकन मिलते हैं. इनमें से किसी एक टोकन का इस्तेमाल, Google Data सेवा से अनुरोध करने के लिए किया जा सकता है. ध्यान दें कि अगर curl
के साथ पास किए गए डेटा आर्ग्युमेंट में बिना ASCII वाले वर्ण शामिल हैं, तो उन्हें यूआरएल-कोड में बदलना ज़रूरी है. ये वर्ण अक्सर Email
और Passwd
आर्ग्युमेंट में दिखते हैं. curl
फ़्लैग का इस्तेमाल करके, इन आर्ग्युमेंट को यूआरएल-कोड में बदलने के लिए curl
से कहा जा सकता है.--data-urlencode
अनुरोध का उदाहरण:
curl https://www.google.com/accounts/ClientLogin \ --data-urlencode Email=brad.gushue@example.com --data-urlencode Passwd=new+foundland \ -d accountType=GOOGLE \ -d source=Google-cURL-Example \ -d service=lh2
जवाब का उदाहरण:
SID=DQAAAHYBADCv2pSv7nflacDNwz3zEDUGtrSvNVDcpkSfddi77b3U5sEaHmP8YLWhmA36F9rk85mL8J5dqo4apn0T1vKz0fPGI9Xtnuet6cuE2ZzYvrNIwbSC_HjTqF4zudNQnnlDuD2wqZT-g1qXI8KhGAQZV4NexHZoQPlabTsGuRZeIBxj1A LSID=EUBBBIaBADCl-kNxvRVmcQghpt3cqSMfEooKR9flLOUZqwgP9OrZS83gse-KSdTNeXhxsET7FYenDhceP9lIPOmesH-t9qh-AWUHjjMdZEbUNeF9mWyzln6Z-FajaiG-cVFkqW0ZJ8ZbnCP30xXj6xFK6QxaAcqy_9Pej8jhEnxS9E61ftQGPg Auth=EUBBIacAAADK-kNxvRVmcQghpt3cqSMfEooLNMflLNIQqwgP9OrZS83gs-KSdTNeXhxsET7FYePWmaD8Vsy1V4LSUGMUP48Je2TO8OcjBj6HgAtPhiZeX-gKDfagZDK44j4n-Tkb44nhOnp2_QPSnBj3Z2vYwOEDjjG3Q53aQVC2132JKOuGh
ऊपर दिए गए अनुरोध में इस्तेमाल किए गए पैरामीटर के बारे में खास जानकारी पाने के लिए, कृपया ClientLogin का दस्तावेज़ देखें. इस उदाहरण में, हम Picasa Web Albums data API का इस्तेमाल कर रहे हैं. सेवा का नाम (service
) lh2
है. Google की अन्य डेटा सेवाओं के नाम, Google Data API के बारे में अक्सर पूछे जाने वाले सवालों वाले पेज पर देखे जा सकते हैं.
ऊपर दिए गए जवाब में मौजूद Auth
टोकन की वैल्यू ही, Google की डेटा सेवाओं के लिए पुष्टि करने के लिए ज़रूरी होती है. इस टोकन की वैल्यू को एचटीटीपी हेडर में शामिल किया जाता है. इसके बाद, इसका इस्तेमाल Google की डेटा सेवा के हर अनुरोध के लिए किया जाता है.
curl --silent --header "Authorization: GoogleLogin auth=EUBBIacAAADK\ -kNxvRVmcQghpt3cqSMfEooLNMflLNIQqwgP9OrZS83gs-KSdTNeXhxs\ ET7FYePWmaD8Vsy1V4LSUGMUP48Je2TO8OcjBj6HgAtPhiZeX-gKDfag\ ZDK44j4n-Tkb44nhOnp2_QPSnBj3Z2vYwOEDjjG3Q53aQVC2132JKOuGh" \ "http://picasaweb.google.com/data/feed/api/user/default"
ध्यान दें: ऊपर दिए गए तरीके से, Windows कमांड शेल में नई लाइन के वर्णों को बैकस्लैश वर्णों ('\') के साथ एस्केप नहीं किया जा सकता. इसलिए, अगर Windows पर curl
चलाया जा रहा है, तो आपको पूरी कमांड एक ही लाइन में डालनी होगी.
फ़ीड और एंट्री वापस पाना
Google Data APIs में, फ़ीड और एंट्री वापस पाने के लिए, यूआरएल पर एचटीटीपी GET
किया जाता है. इसमें क्वेरी पैरामीटर का एक वैकल्पिक सेट होता है. हम GET
अनुरोध कर रहे हैं. इसलिए, curl
को सिर्फ़ पुष्टि करने वाला हेडर और यूआरएल पास करना ज़रूरी है. नीचे दिए गए उदाहरण में, Picasa Web Albums data API का इस्तेमाल जारी रहेगा. इसका इस्तेमाल, पुष्टि किए गए उपयोगकर्ता के मालिकाना हक वाले एल्बम की सूची पाने के लिए किया जाता है. ध्यान दें कि इस उदाहरण में हमने पुष्टि करने वाले टोकन को छोटा करके ABCDEFG
कर दिया है. हालांकि, इसकी जगह पूरे टोकन (जैसे, ऊपर दिया गया EUBBIacA
...32JKOuGh
) का इस्तेमाल किया जाना चाहिए.
curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/default"
इससे, बिना फ़ॉर्मैट किया गया एक्सएमएल का बड़ा ऑब्जेक्ट दिखेगा:
<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:geo='http://www.w3.org/2003/01/geo/wgs84_pos#' xmlns:gml='http://www.opengis.net/gml' xmlns:georss='http://www.georss.org/georss' xmlns:photo='http://www.pheed.com/pheed/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:batch='http://schemas.google.com/gdata/batch' xmlns:gphoto='http://schemas.google.com/photos/2007'><id>http://picasaweb.google.com/data/feed/base/user/brad.gushue</id><updated>2007-09-13T21:30:21.454Z</updated>...</entry></feed>
इस आउटपुट को फ़ॉर्मैट करने के लिए, कुछ अच्छे टूल उपलब्ध हैं. इनकी मदद से, आउटपुट को आसानी से समझा जा सकता है. इनमें tidy भी शामिल है. tidy का इस्तेमाल करने का सबसे आसान तरीका यह है कि curl कमांड के आउटपुट को tidy में पाइप किया जाए. जैसे:
curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/default" | tidy -xml -indent -quiet
इससे फ़ीड को पढ़ना आसान हो जाता है. जैसे:
<?xml version='1.0' encoding='utf-8'?> <feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:geo='http://www.w3.org/2003/01/geo/wgs84_pos#' xmlns:gml='http://www.opengis.net/gml' xmlns:georss='http://www.georss.org/georss' xmlns:photo='http://www.pheed.com/pheed/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:batch='http://schemas.google.com/gdata/batch' xmlns:gphoto='http://schemas.google.com/photos/2007'> <id>http://picasaweb.google.com/data/feed/api/user/brad.gushue</id> <updated>2007-09-13T21:47:07.337Z</updated> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#user' /> <title type='text'>brad.gushue</title> <subtitle type='text'></subtitle> <icon> http://lh6.google.com/brad.gushue/AAAAj9zigp4/AAAAAAAAAAA/RiMAlXV4MFI/s64-c/brad.gushue</icon> <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://picasaweb.google.com/data/feed/api/user/brad.gushue' /> <link rel='alternate' type='text/html' href='http://picasaweb.google.com/brad.gushue' /> <link rel='self' type='application/atom+xml' href='http://picasaweb.google.com/data/feed/api/user/brad.gushue?start-index=1&max-results=1000' /> <author> <name>Brad</name> <uri>http://picasaweb.google.com/brad.gushue</uri> </author> <generator version='1.00' uri='http://picasaweb.google.com/'> Picasaweb</generator> <openSearch:totalResults>8</openSearch:totalResults> <openSearch:startIndex>1</openSearch:startIndex> <openSearch:itemsPerPage>1000</openSearch:itemsPerPage> <gphoto:user>brad.gushue</gphoto:user> <gphoto:nickname>Brad</gphoto:nickname> <gphoto:thumbnail> http://lh6.google.com/brad.gushue/AAAAj9zigp4/AAAAAAAAAAA/RiMAlXV4MFI/s64-c/brad.gushue</gphoto:thumbnail> <entry> <id> http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593</id> <published>2007-05-23T04:55:52.000Z</published> <updated>2007-05-23T04:55:52.000Z</updated> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album' /> <title type='text'>Trip To Italy</title> <summary type='text'>This was the recent trip I took to Italy.</summary> <rights type='text'>public</rights> <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://picasaweb.google.com/data/feed/api/user/brad.gushue/albumid/9810315389720904593' /> <link rel='alternate' type='text/html' href='http://picasaweb.google.com/brad.gushue/TripToItalyV2' /> <link rel='self' type='application/atom+xml' href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593' /> <link rel='edit' type='application/atom+xml' href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456' /> <author> <name>Brad</name> <uri>http://picasaweb.google.com/brad.gushue</uri> </author> <gphoto:id>9810315389720904593</gphoto:id> <media:group> ... </media:group> </entry> <entry> ... </entry> </feed>
अलग-अलग एंट्री को उसी तरीके से वापस पाया जा सकता है. इसके लिए, फ़ीड यूआरएल के बजाय एंट्री का यूआरएल दें.
प्रविष्टियां अपडेट की जा रही हैं
Google Data API में मौजूद एंट्री को अपडेट करने के लिए, अनुरोध के मुख्य हिस्से में एंट्री के एक्सएमएल की नई कॉपी के साथ, बदलाव वाले यूआरएल पर HTTP PUT
किया जाता है.
atom:link/@rel='self'
यूआरएल वैल्यू का इस्तेमाल करके एंट्री वापस पाएं- ज़रूरी बदलाव करने के लिए, स्थानीय तौर पर एंट्री अपडेट करें
PUT
यूआरएल वैल्यू का इस्तेमाल करके, एंट्री को वापस सर्वर पर भेजता हैatom:link/@rel='edit'
1. एंट्री वापस लाई जा रही है
ऊपर दिए गए फ़ीड ब्लॉक में बोल्ड किए गए दो यूआरएल में से किसी एक का इस्तेमाल करके, एंट्री को वापस लाया जा सकता है. इसके लिए, rel='self'
एट्रिब्यूट वाले link
एलिमेंट की href
वैल्यू का यूआरएल ज़रूरी है.
curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593"
2. स्थानीय तौर पर एंट्री अपडेट करना
एंट्री वापस पाने के बाद, उसमें ज़रूरी बदलाव करने के लिए, उसे स्थानीय टेक्स्ट एडिटर या ऐप्लिकेशन का इस्तेमाल करके अपडेट करना होगा. किसी एंट्री को वापस लाने के लिए ऊपर दिए गए कमांड में, हमने नतीजों को tidy
पर पाइप नहीं किया है. ऐसा हमने पिछले उदाहरणों में किया था. नतीजा एक एक्सएमएल फ़ाइल होती है, जिसमें एक जैसा डेटा होता है. हालांकि, इसका फ़ॉर्मैट उस वर्शन से अलग होता है जिसे tidy
में पाइप किया गया है. किसी एंट्री में मैन्युअल तरीके से बदलाव करने के लिए, tidy
का इस्तेमाल करने से अक्सर XML के साथ काम करना आसान हो जाता है.
ध्यान दें: नई एंट्री पोस्ट करते समय, कृपया उन सभी एक्सएमएल नेमस्पेस की परिभाषाओं को शामिल करना न भूलें जिनका इस्तेमाल atom:entry
के एट्रिब्यूट के तौर पर किया जाता है. इन्हें शामिल न करने पर, पार्सिंग से जुड़ी समस्याएं हो सकती हैं. इसके अलावा, tidy
नेमस्पेस की परिभाषाओं के बीच मौजूद स्पेस को नई लाइन वाले वर्णों से बदल देगा. यह मान्य एक्सएमएल है, लेकिन फ़िलहाल Google की डेटा सेवाएं इसे स्वीकार नहीं करती हैं. अगर tidy
का इस्तेमाल किया जा रहा है, तो कृपया entry
एलिमेंट पर इन एट्रिब्यूट के बीच अतिरिक्त स्पेस जोड़ना न भूलें.
3. सर्वर पर एंट्री अपडेट की जा रही है
edit
यूआरएल का इस्तेमाल करके, आपको cURL का इस्तेमाल करके सेवा में एंट्री की कॉपी PUT
करनी होगी. सर्वर को भेजे जा रहे कॉन्टेंट का टाइप बताने के लिए, एक हेडर जोड़ना ज़रूरी है. यहां दिए गए स्निपेट में यह माना गया है कि अपडेट की गई एंट्री वाली फ़ाइल, updated_entry.xml में सेव की गई है.
curl --silent --data-binary "@updated_entry.xml" --request PUT --header "Content-Type: application/atom+xml" --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456"
एंट्री बनाना
Google Data APIs में एंट्री बनाने के लिए, नई एंट्री के साथ पोस्ट यूआरएल पर HTTP POST
किया जाता है. atom:id
को सर्वर असाइन करता है. इसलिए, नई एंट्री में इसे शामिल करना ज़रूरी नहीं है. नई एंट्री बनाने का सबसे आसान तरीका यह है कि किसी पुरानी एंट्री में बदलाव किया जाए. यहां दिए गए उदाहरण में, ऐसा करने का तरीका बताया गया है.
atom:link/@rel='self'
का इस्तेमाल करके, टेंप्लेट की एंट्री वापस पाना- गैर-ज़रूरी जानकारी हटाने और ज़रूरी बदलाव करने के लिए, टेंप्लेट की एंट्री में बदलाव करें
POST
एंट्री को वापस सर्वर पर भेजें. इसके लिए, फ़ीड केpost
यूआरएल का इस्तेमाल करें. यह जानकारी, फ़ीड मेंrel='http://schemas.google.com/g/2005#post'
के साथlink
एलिमेंट के लिएhref
वैल्यू के तौर पर मौजूद होती है. इसके अलावा, यह जानकारी http://code.google.com पर सेवा से जुड़े दस्तावेज़ में भी मौजूद होती है.
1. किसी टेंप्लेट एंट्री को वापस पाना
किसी एक एंट्री को वापस पाने के लिए, link
एलिमेंट की href
वैल्यू का इस्तेमाल किया जा सकता है. इसके लिए, rel='self'
का इस्तेमाल उसी तरह किया जाता है जिस तरह ऊपर दिए गए उदाहरण में, एंट्री को अपडेट करने से पहले वापस पाने के लिए किया गया था.
curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593" | tidy -xml -indent -quiet > template_entry.xml
tidy
का इस्तेमाल करने के बाद, जवाब कुछ ऐसा दिखेगा:
<entry xmlns='http://www.w3.org/2005/Atom' xmlns:exif='http://schemas.google.com/photos/exif/2007' xmlns:geo='http://www.w3.org/2003/01/geo/wgs84_pos#' xmlns:gml='http://www.opengis.net/gml' xmlns:georss='http://www.georss.org/georss' xmlns:photo='http://www.pheed.com/pheed/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:batch='http://schemas.google.com/gdata/batch' xmlns:gphoto='http://schemas.google.com/photos/2007'> <id> http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389741123981</id> <published>2007-05-23T04:55:52.000Z</published> <updated>2007-05-23T04:55:52.000Z</updated> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album' /> <title type='text'>Trip To Italy</title> <summary type='text'>This was the recent trip I took to Italy.</summary> <rights type='text'>public</rights> <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://picasaweb.google.com/data/feed/api/user/brad.gushue/albumid/9810315389741123981' /> <link rel='alternate' type='text/html' href='http://picasaweb.google.com/brad.gushue/TripToItaly' /> <link rel='self' type='application/atom+xml' href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389741123981' /> <link rel='edit' type='application/atom+xml' href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389741123981/1179896152905401' /> <author> <name>Brad</name> <uri>http://picasaweb.google.com/brad.gushue</uri> </author> <gphoto:id>9810315389741123981</gphoto:id> <gphoto:name>TripToItaly</gphoto:name> <gphoto:location></gphoto:location> <gphoto:access>public</gphoto:access> <gphoto:timestamp>1179896152000</gphoto:timestamp> <gphoto:numphotos>0</gphoto:numphotos> <gphoto:numphotosremaining>500</gphoto:numphotosremaining> <gphoto:bytesUsed>0</gphoto:bytesUsed> <gphoto:user>brad.gushue</gphoto:user> <gphoto:nickname>Brad</gphoto:nickname> <gphoto:commentingEnabled>true</gphoto:commentingEnabled> <gphoto:commentCount>0</gphoto:commentCount> <media:group> <media:title type='plain'>Trip To Italy</media:title> <media:description type='plain'>This was the recent trip I took to Italy.</media:description> <media:keywords></media:keywords> <media:content url='http://lh5.google.com/brad.gushue/ADFUFKqeA5E/AAAAAAAAABc/V6Sga_Z03WU/TripToItaly.jpg' type='image/jpeg' medium='image' /> <media:thumbnail url='http://lh5.google.com/brad.gushue/ADFUFKqeA5E/AAAAAAAAABc/V6Sga_Z03WU/s160-c/TripToItaly.jpg' height='160' width='160' /> <media:credit>Brad</media:credit> </media:group> </entry>
2. टेंप्लेट एंट्री में बदलाव करना
हमें "कनाडा में कर्लिंग" नाम का एक एल्बम बनाना है. इसमें हमें कर्लिंग के हाल ही के मैच की फ़ोटो जोड़नी हैं. Google डेटा, आपको उन ऐटम एलिमेंट को हटाने की अनुमति देता है जिनके लिए सर्वर वैल्यू देता है. इसलिए, इस सामान्य टेंप्लेट एंट्री को बनाने के लिए, हम फ़ीड में मौजूद atom:id
, atom:published
, atom:updated
, atom:author
, और अलग-अलग atom:link
एलिमेंट हटा देंगे. इससे हमें टेम्प्लेट की एंट्री मिल जाएगी. इसके बाद, हमें नई एंट्री में बदलाव करके, नया एल्बम बनाना होगा:
<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gphoto='http://schemas.google.com/photos/2007'> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album' /> <title type='text'>Curling in Canada</title> <summary type='text'>Pictures of all my curling matches in Canada.</summary> <gphoto:location>Canada</gphoto:location> <gphoto:access>public</gphoto:access> <gphoto:commentingEnabled>true</gphoto:commentingEnabled> </entry>
ध्यान दें: नई एंट्री पोस्ट करते समय, कृपया उन सभी एक्सएमएल नेमस्पेस की परिभाषाओं को शामिल करना न भूलें जिनका इस्तेमाल atom:entry
के एट्रिब्यूट के तौर पर किया जाता है. इन्हें शामिल न करने पर, पार्सिंग से जुड़ी समस्याएं हो सकती हैं. इसके अलावा, tidy
नेमस्पेस की परिभाषाओं के बीच की खाली जगहों को हटाकर, नई लाइन वाले वर्णों को जोड़ देगा. यह मान्य एक्सएमएल है, लेकिन फ़िलहाल Google की डेटा सेवाएं इसे स्वीकार नहीं करती हैं. अगर tidy
का इस्तेमाल किया जा रहा है, तो कृपया entry
एलिमेंट पर इन एट्रिब्यूट के बीच अतिरिक्त स्पेस जोड़ना न भूलें.
3. नई एंट्री को सर्वर पर पोस्ट करना
सर्वर पर नई एंट्री पोस्ट करने के लिए इस्तेमाल की जाने वाली curl
कमांड, मौजूदा एंट्री को अपडेट करने के लिए इस्तेमाल की जाने वाली कमांड से मिलती-जुलती है. हालांकि, इसमें यूआरएल अलग होता है:
curl --silent --request POST --data-binary "@template_entry.xml" --header "Content-Type: application/atom+xml" --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/brad.gushue" | tidy -xml -indent -quiet
अगर पोस्ट करने की प्रोसेस पूरी हो जाती है, तो नतीजे के तौर पर मिलने वाला एक्सएमएल आउटपुट, नई एंट्री की कॉपी होता है. इस एंट्री में वे चीज़ें शामिल होंगी जिन्हें सर्वर ने एंट्री बनाते समय जनरेट किया था. इनमें atom:id
, atom:published
, atom:updated
, और atom:link
एलिमेंट की वैल्यू शामिल हैं. link
वैल्यू का इस्तेमाल करके, एंट्री में बदलाव किया जा सकता है या उसे मिटाया जा सकता है. हालांकि, ऐसा तब ही किया जा सकता है, जब इस दौरान कोई और बदलाव न किया गया हो.
एंट्री मिटाना
डेटा मिटाना, डेटा अपडेट करने जैसा ही होता है. हालांकि, इसमें HTTP PUT
के बजाय HTTP DELETE
तरीके का इस्तेमाल किया जाता है और कोई डेटा भेजने की ज़रूरत नहीं होती. अपडेट के अनुरोध की तरह ही, edit
यूआरएल का इस्तेमाल एचटीटीपी अनुरोध के टारगेट के तौर पर किया जाता है.
curl --silent --request DELETE --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456"
मीडिया ऑब्जेक्ट अपलोड करना
Picasa Web Albums Data API और Documents List Data API की एक अहम सुविधा, बाइनरी ऑब्जेक्ट अपलोड करने की सुविधा है. cURL की मदद से, बाइनरी डेटा और स्लग हेडर को आसानी से अपलोड किया जा सकता है. हालांकि, फ़िलहाल Documents List data API के लिए, एक्सएमएल को बाइनरी डेटा के साथ MIME मल्टीपार्ट मैसेज के तौर पर पोस्ट करना ज़रूरी है. इस लेख में, कई हिस्सों वाला मैसेज बनाने के बारे में नहीं बताया गया है.
यहां दिए गए उदाहरण में, "Sweeping the rock" टाइटल वाले Picasa वेब एल्बम में sweeping_the_rock.png
नाम की फ़ोटो अपलोड करने का तरीका बताया गया है:
curl --silent --request POST --data-binary "@sweeping_the_rock.png" --header "Slug: Sweeping the rock" --header "Content-Type: image/png" --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/brad.gushue/albumid/5113621341847124417" | tidy -xml -indent -quiet
अन्य कमांड-लाइन टूल
कुछ डेवलपर, अन्य कमांड-लाइन टूल का इस्तेमाल करके सीखना या डीबग करना पसंद करते हैं.
लोकप्रिय टूल में ये शामिल हैं:
- telnet, openssl का इस्तेमाल, वेब सर्वर से रॉ सॉकेट कनेक्शन (क्रमशः सादा टेक्स्ट और एसएसएल पर आधारित) बनाने के लिए किया जाता है. इनका इस्तेमाल, Google की डेटा सेवाओं के साथ इंटरैक्ट करने के लिए किया जा सकता है. ध्यान दें कि ऐसा हो सकता है कि Google की सभी डेटा सेवाओं में एसएसएल काम न करे. कनेक्शन खोलने का तरीका यहां बताया गया है:
telnet picasaweb.google.com 80
(Picasa Web Albums Data API)openssl s_client -connect www.google.com:443
(Google Calendar Data API और www.google.com पर मौजूद अन्य सेवाएं)
रॉ एचटीटीपी डेटा भेजते समय, ध्यान रखें किPOST /data/feed/api/user/brad.gushue HTTP/1.1 Host: picasaweb.google.com Authorization: GoogleLogin auth=ABCDEFG Content-Length: 493 <entry xmlns='http://www.w3.org/2005/Atom' xmlns:gphoto='http://schemas.google.com/photos/2007'> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album' /> <title type='text'>Curling in Canada</title> <summary type='text'>Pictures of all my curling matches in Canada.</summary> <gphoto:location>Canada</gphoto:location> <gphoto:access>public</gphoto:access> <gphoto:commentingEnabled>true</gphoto:commentingEnabled> </entry>
POST
औरPUT
कार्रवाइयों के लिए,Content-Length
हेडर की वैल्यू कैलकुलेट करनी होगी. इस वैल्यू का पता लगाने के लिए, UNIX टूलwc
का इस्तेमाल किया जा सकता है. एचटीटीपी बॉडी के सभी कॉन्टेंट कोtemplate_entry.xml
जैसी टेक्स्ट फ़ाइल में रखें (ऊपर दिया गया उदाहरण) औरwc -c template_entry.xml
चलाएं. अगर आपने गलती सेContent-Length
हेडर के लिए गलत वैल्यू का इस्तेमाल किया है, तो उसे डीबग करना मुश्किल हो सकता है. - आम तौर पर, wget का इस्तेमाल, वेब सर्वर से डेटा को किसी लोकल फ़ाइल में डाउनलोड करने के लिए किया जाता है. हालांकि,
wget
में कई विकल्प उपलब्ध हैं. इनकी मदद से, Google की डेटा सेवाओं के साथ इंटरैक्ट करने के लिए ज़रूरी सभी तरह के अनुरोध किए जा सकते हैं. Picasa वेब एल्बम में नई एल्बम एंट्रीPOST
करने के लिए,wget
का इस्तेमाल करने का तरीका यहां बताया गया है:wget --post-file template_entry.xml --header "Authorization: GoogleLogin auth=ABCDEFG" --header "Content-Type: application/atom+xml" "http://picasaweb.google.com/data/feed/api/user/brad.gushue"
- xsltproc एक ऐसा टूल है जिसका इस्तेमाल, एक्सएमएल दस्तावेज़ों पर XSL ट्रांसफ़ॉर्मेशन (XSLT) लागू करने के लिए किया जाता है. इसका इस्तेमाल, Google Data API से मिले एक्सएमएल फ़ीड या एंट्री से, ज़रूरत के डेटा को आसानी से निकालने के लिए किया जा सकता है. इसके अलावा, नई या अपडेट की गई एंट्री जनरेट करने के लिए भी इसका इस्तेमाल किया जा सकता है.
नतीजा
जैसा कि आपने देखा, cURL और कई अन्य कमांड-लाइन टूल का इस्तेमाल करके, रॉ एक्सएमएल और एचटीटीपी का इस्तेमाल करके Google की डेटा सेवाओं के साथ आसानी से इंटरैक्ट किया जा सकता है. अगर आपको Google Data API के साथ इन टूल का इस्तेमाल करने के बारे में कोई सवाल पूछना है, तो कृपया एपीआई से जुड़े फ़ोरम में शामिल हों.