Google डेटा सेवाओं से इंटरैक्ट करने के लिए cURL का इस्तेमाल करना

चेतावनी: यह पेज, Google के पुराने एपीआई यानी कि Google Data API के बारे में है. यह सिर्फ़ उन एपीआई के बारे में है जो Google Data API डायरेक्ट्री में मौजूद हैं. इनमें से कई एपीआई को नए एपीआई से बदला गया है. किसी नए एपीआई के बारे में जानकारी पाने के लिए, उस नए एपीआई के दस्तावेज़ देखें. नए एपीआई से अनुरोधों को अनुमति देने के बारे में जानकारी पाने के लिए, Google खाते की पुष्टि करना और अनुमति देना देखें.

रेयान बॉयड, Google डेटा API टीम
सितंबर 2007

सुविधा के बारे में जानकारी

मूल रूप से, 'Google डेटा एपीआई' डेटा फ़ॉर्मैट के तौर पर ऐटम फ़ीड और एंट्री (एक्सएमएल) का और डेटा ट्रांसमिशन के लिए प्रोटोकॉल के तौर पर एचटीटीपी का इस्तेमाल करता है - जो ऐटम पब्लिशिंग प्रोटोकॉल को बढ़ाता है. Google Data API से इंटरैक्शन को आसान बनाने के लिए, हम कई क्लाइंट लाइब्रेरी प्रकाशित करते हैं. हालांकि, हमारी सेवाओं के साथ काम करने के लिए आप निचले स्तर के टूल का इस्तेमाल कर सकते हैं. बस कुछ निर्देशों की मदद से ऐसा करना बहुत आसान है.

cURL कई तरह के प्रोटोकॉल का इस्तेमाल करके अनुरोधों को पूरा करने के लिए, कमांड-लाइन ऐप्लिकेशन है. इसमें एचटीटीपी भी शामिल हैं. cURL का इस्तेमाल डेवलपर, अक्सर Google डेटा सेवाओं की जांच करने के लिए करते हैं. ऐसा इसलिए, क्योंकि यह निचले स्तर पर एपीआई के साथ इंटरैक्ट करने के लिए ज़रूरी एचटीटीपी फ़ंक्शन के साथ काम करता है.

cURL सिर्फ़ एचटीटीपी कम्यूनिकेशन के काम करता है. ऐसे में, ऐप्लिकेशन के साथ काम करने के लिए, Google डेटा प्रोटोकॉल, खास तौर पर सेवा के लिए बने प्रोटोकॉल, और एक्सएमएल डेटा फ़ॉर्मैट की जानकारी एक ज़रूरी शर्त है. इन कामों को आसान बनाने के लिए, इस लेख में कुछ और टूल के बारे में बताया गया है.

यह लेख Picasa वेब एल्बम डेटा API पर आधारित उदाहरणों का उपयोग करता है. हालांकि, ये सभी उदाहरण आसानी से Google Data API पर लागू किए जा सकते हैं.

cURL पाना और इंस्टॉल करना

cURL आम तौर पर, बहुत सारे UNIX/Linux प्लैटफ़ॉर्म को इंस्टॉल करने पर उपलब्ध होता है. टूल इंस्टॉल है या नहीं और आपके PATH में है या नहीं, यह देखने के लिए curl को अपने पसंदीदा शेल में टाइप करें. अगर आपके पास टूल इंस्टॉल नहीं है, तो आधिकारिक स्रोत या उपयोगकर्ता के योगदान वाले बाइनरी पैकेज को पाने के लिए, cURL की वेबसाइट के डाउनलोड पेज पर जाएं. ध्यान दें कि कमांड-लाइन टूल, libcurl लाइब्रेरी का इस्तेमाल करता है जो एक अलग डाउनलोड पैकेज के तौर पर ऑफ़र किया जा सकता है. इसलिए, अगर आप सोर्स से कंपाइल नहीं कर रहे हैं, तो 'libcurl' पैकेज के बजाय 'बाइनरी' पैकेज डाउनलोड करें. अगर आप पुष्टि करने वाले टोकन पाने के लिए cURL का इस्तेमाल करना चाहते हैं या Google की कुछ डेटा सेवाओं को ऐक्सेस करना चाहते हैं, जिन्हें दिखाने के लिए एसएसएल की ज़रूरत होती है, तो आपको एसएसएल की सुविधा वाले पैकेज की ज़रूरत होगी.

Google डेटा सेवा प्रमाणित करना

पुष्टि किए गए Google डेटा के अनुरोधों को करने के लिए, एचटीटीपी हेडर को अनुरोध में जोड़ा जाता है. इसमें, ClientLogin (डेस्कटॉप/मोबाइल ऐप्लिकेशन) या AuthSub (वेब ऐप्लिकेशन) पुष्टि करने वाला टोकन शामिल होता है. cURL का इस्तेमाल करके जांच करने के लिए, ClientLogin एक आसान तरीका है और इसके बारे में नीचे बताया गया है. AuthSub पुष्टि हेडर का इस्तेमाल cURL के साथ किया जा सकता है, लेकिन टोकन पाने की ज़्यादा बेहतर प्रक्रिया इस लेख के दायरे से बाहर है.

ClientLogin का उपयोग

ClientLogin, इंस्टॉल किए गए (डेस्कटॉप/मोबाइल) ऐप्लिकेशन के लिए है. प्रमाणीकरण के इस तरीके से, Google डेटा API का उपयोग करने वाला ऐप्लिकेशन, उपयोगकर्ता का उपयोगकर्ता नाम और पासवर्ड सीधे प्रबंधित करता है.

ClientLogin के लिए प्रमाणीकरण अनुरोध में फ़ॉर्म पोस्ट वैरिएबल के रूप में उपयोगकर्ता नाम, पासवर्ड और सेवा का नाम लिया जाता है. ये वैरिएबल, क्रम से Email, Passwd, और service आर्ग्युमेंट के तौर पर पास किए जाते हैं. यह अनुरोध कई टोकन के साथ प्रतिक्रिया देता है, जिनमें से एक का इस्तेमाल Google डेटा सेवा को अनुरोध करने के लिए किया जा सकता है. ध्यान दें कि curl के साथ पास किए गए डेटा आर्ग्युमेंट, यूआरएल-एन्कोड किए गए होने चाहिए. ऐसा तब होता है, जब उनमें ऐसे गैर-ASCII वर्ण हों जो अक्सर Email और Passwd आर्ग्युमेंट में दिखते हैं. 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 डेटा 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 डेटा एपीआई में, क्वेरी पैरामीटर के वैकल्पिक सेट के साथ, यूआरएल पर एक एचटीटीपी GET करके, फ़ीड और एंट्री को फिर से लाया जाता है. हम GET से जुड़ा अनुरोध कर रहे हैं. इसलिए, curl पर सिर्फ़ पुष्टि करने वाला हेडर और यूआरएल भेजना ज़रूरी है. नीचे दिया गया उदाहरण Picasa वेब एल्बम डेटा 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>

इस आउटपुट को फ़ॉर्मैट करने के कुछ बेहतरीन टूल हैं. इनकी मदद से, डेटा सामान्य तरीके से पढ़ा जा सकता है. व्यवस्थित रखने का सबसे आसान तरीका है, कर्ल कमांड से आउटपुट को व्यवस्थित करना. इसके लिए:

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 डेटा एपीआई में एंट्री को अपडेट करने के लिए, HTTP PUT यूआरएल में अनुरोध के मुख्य हिस्से में एंट्री के एक्सएमएल की नई कॉपी डाली जाती है.

  1. atom:link/@rel='self' यूआरएल की वैल्यू का इस्तेमाल करके, एंट्री वापस पाएं
  2. ज़रूरी बदलाव करने के लिए, एंट्री को लोकल तौर पर अपडेट करें
  3. atom:link/@rel='edit' यूआरएल की वैल्यू का इस्तेमाल करके, सर्वर पर वापस भेजा गया PUT

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 का इस्तेमाल करना अक्सर एक्सएमएल के साथ काम करना आसान बना सकता है.

ध्यान दें: कृपया उन सभी एक्सएमएल नेमस्पेस को शामिल करना न भूलें जिन्हें आपकी नई एंट्री पोस्ट करते समय, atom:entry के लिए एट्रिब्यूट के तौर पर इस्तेमाल किया जाता है. इन्हें अनदेखा करने से पार्सिंग अपवाद हो जाएंगे. साथ ही, tidy, नेमस्पेस के बीच के स्पेस को नई लाइन वाले वर्णों से बदल देगा. हालांकि, यह एक मान्य एक्सएमएल है, लेकिन Google डेटा सेवाएं इस समय इसे स्वीकार नहीं करती हैं. अगर आप tidy का इस्तेमाल कर रहे हैं, तो entry एलिमेंट पर इन एट्रिब्यूट के बीच अतिरिक्त स्पेस ज़रूर जोड़ें.

3. सर्वर पर प्रविष्टि अपडेट करना

edit यूआरएल का इस्तेमाल करके, आपको cURL का इस्तेमाल करके सेवा के लिए एंट्री की एक कॉपी PUT करनी होगी. सर्वर को भेजे जा रहे कॉन्टेंट के टाइप को जोड़ने की ज़रूरत है. नीचे दिया गया स्निपेट यह मानता है कि अपडेट की गई एंट्री वाली फ़ाइल, अपडेट की गई एंट्री.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 डेटा एपीआई में एंट्री बनाने के लिए, नई एंट्री वाली पोस्ट के यूआरएल में HTTP POST किया जाता है. atom:id को सर्वर असाइन करता है, इसलिए इसे नई एंट्री में शामिल करना ज़रूरी नहीं है. पुरानी एंट्री बनाना और उसमें बदलाव करना, नई एंट्री बनाने का सबसे आसान तरीका है. नीचे दिया गया उदाहरण बस यही काम करेगा.

  1. atom:link/@rel='self' का इस्तेमाल करके, टेंप्लेट एंट्री को फिर से पाएं
  2. ग़ैर-ज़रूरी जानकारी हटाने और ज़रूरी बदलाव करने के लिए, टेंप्लेट की एंट्री में स्थानीय रूप से बदलाव करें
  3. POST सर्वर के लिए वापस एंट्री, फ़ीड के लिए post यूआरएल का इस्तेमाल करें. इसे या तो फिर से हासिल किए गए फ़ीड में rel='http://schemas.google.com/g/2005#post' वाले link एलिमेंट के लिए href वैल्यू के तौर पर या http://code.google.com पर सेवा के दस्तावेज़ में पाया जाता है.

1. टेम्प्लेट एंट्री फिर से पाएं

ऊपर दिए गए उदाहरण में, rel='self' के साथ link एलिमेंट की href वैल्यू का इस्तेमाल करके, सिंगल एंट्री ही वापस पाई जा सकती है.

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 वेब एल्बम डेटा API और दस्तावेज़ सूची डेटा API की एक महत्वपूर्ण सुविधा बाइनरी ऑब्जेक्ट को अपलोड करने की योग्यता है. cURL बाइनरी डेटा और एक स्लग हेडर को आसानी से अपलोड कर सकता है. हालांकि, दस्तावेज़ों की सूची के डेटा एपीआई को फ़िलहाल एक्सएमएल के साथ बाइनरी डेटा को MIME मल्टीपार्ट मैसेज के तौर पर पोस्ट करने की ज़रूरत है. एक से ज़्यादा हिस्सों वाले मैसेज बनाना इस लेख के दायरे से बाहर है.

नीचे दिए गए उदाहरण में sweeping_the_rock.png नाम की तस्वीर को Picasa वेब एल्बम में अपलोड करने का तरीका बताया गया है, जिसमें "Sweeing the Rock" शीर्षक है:

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 डेटा सेवाएं SSL का समर्थन न करती हों. यहां कनेक्शन खोलने का तरीका बताया गया है:
    • telnet picasaweb.google.com 80 (Picasa वेब एल्बम डेटा एपीआई)
    • openssl s_client -connect www.google.com:443 (www.google.com पर Google Calendar डेटा एपीआई और दूसरी सेवाएं)
    कनेक्शन बनने के बाद, एचटीटीपी एचटीटीपी अनुरोध भेजना ज़रूरी है. इस अनुरोध में एचटीटीपी क्रिया, मिलते-जुलते पाथ, वर्शन, सभी हेडर और अनुरोध का मुख्य हिस्सा शामिल हैं. यहां एक उदाहरण दिया गया है:
    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 वेब एल्बम में किसी नए एल्बम की एंट्री के लिए wget POST को इस्तेमाल करने के तरीके के बारे में यहां एक उदाहरण दिया गया है:
    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, एक्सएसएल ट्रांसफ़ॉर्मेशन (XSLT) को एक्सएमएल दस्तावेज़ों पर लागू करने के लिए एक टूल है. इसका इस्तेमाल, Google डेटा एपीआई से मिले एक्सएमएल एंट्री या फ़ीड से डेटा के मनपसंद बिट को आसानी से निकालने या नई या अपडेट की गई एंट्री जनरेट करने के लिए किया जा सकता है.

नतीजा

जैसा कि आपने देखा है कि RAW और एचटीटीपी का इस्तेमाल करके, cURL और कई दूसरे कमांड-लाइन टूल का इस्तेमाल Google डेटा सेवाओं के साथ आसानी से इंटरैक्ट करने के लिए किया जा सकता है. अगर इन टूल को इस्तेमाल करने के बारे में आपका कोई पसंदीदा सवाल है, तो कृपया एपीआई के खास फ़ोरम में हमसे जुड़ें.