Google ডেটা পরিষেবাগুলির সাথে ইন্টারঅ্যাক্ট করতে cURL ব্যবহার করা

সতর্কতা : এই পৃষ্ঠাটি Google-এর পুরানো API, Google Data APIs সম্পর্কে; এটি শুধুমাত্র Google Data APIs ডিরেক্টরিতে তালিকাভুক্ত APIগুলির সাথে প্রাসঙ্গিক, যার মধ্যে অনেকগুলি নতুন API দিয়ে প্রতিস্থাপিত হয়েছে৷ একটি নির্দিষ্ট নতুন API সম্পর্কে তথ্যের জন্য, নতুন API এর ডকুমেন্টেশন দেখুন। একটি নতুন API-এর সাহায্যে অনুরোধ অনুমোদনের বিষয়ে তথ্যের জন্য, Google অ্যাকাউন্ট প্রমাণীকরণ এবং অনুমোদন দেখুন।

রায়ান বয়েড, Google Data APIs টিম
সেপ্টেম্বর 2007

ভূমিকা

হৃদয়ে, Google ডেটা API গুলি ডেটা ফর্ম্যাট হিসাবে অ্যাটম ফিড এবং এন্ট্রিগুলি (এক্সএমএল) ব্যবহার করে এবং ডেটা ট্রান্সমিশনের জন্য একটি প্রোটোকল হিসাবে HTTP - অ্যাটম পাবলিশিং প্রোটোকলকে প্রসারিত করে৷ Google Data API-এর সাথে ইন্টারঅ্যাকটিং সহজ করতে আমরা বেশ কয়েকটি ক্লায়েন্ট লাইব্রেরি প্রকাশ করি। যাইহোক, আমাদের পরিষেবাগুলির সাথে কাজ করার জন্য নিম্ন-স্তরের সরঞ্জামগুলি ব্যবহার করার জন্য আপনাকে সর্বদা স্বাগত জানাই, এবং সামান্য নির্দেশিকা সহ এটি করা বেশ সহজ৷

cURL হল HTTP সহ বিভিন্ন প্রোটোকল ব্যবহার করে অনুরোধগুলি সম্পাদন করার জন্য একটি কমান্ড-লাইন অ্যাপ্লিকেশন। সিআরএল প্রায়ই ডেভেলপারদের দ্বারা Google ডেটা পরিষেবাগুলি পরীক্ষা করার জন্য ব্যবহার করা হয়, কারণ এটি নিম্ন স্তরে APIগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য প্রয়োজনীয় HTTP কার্যকারিতা সমর্থন করে।

cURL শুধুমাত্র HTTP যোগাযোগ সম্পাদনের জন্য সমর্থন প্রদান করে, তাই Google ডেটা প্রোটোকলের জ্ঞান, পরিষেবা-নির্দিষ্ট প্রোটোকল এবং ব্যবহৃত XML ডেটা বিন্যাস অ্যাপ্লিকেশনটির সাথে কাজ করার পূর্বশর্ত। এই কাজগুলিকে সহজ করার জন্য এই নিবন্ধে আরও কিছু সরঞ্জাম উল্লেখ করা হয়েছে।

এই নিবন্ধটি Picasa ওয়েব অ্যালবাম ডেটা API-এর উপর ভিত্তি করে উদাহরণ ব্যবহার করে৷ যাইহোক, এই সমস্ত উদাহরণগুলি সহজেই অন্যান্য Google ডেটা API- তে প্রয়োগ করা যেতে পারে।

CURL প্রাপ্ত এবং ইনস্টল করা

cURL সাধারণত অনেক UNIX/Linux প্ল্যাটফর্মের ডিফল্ট ইনস্টলে উপলব্ধ। টুলটি ইনস্টল করা আছে কিনা এবং আপনার PATH এ আছে কিনা দেখতে আপনার প্রিয় শেলটিতে curl টাইপ করার চেষ্টা করুন। যদি আপনার কাছে টুলটি ইনস্টল না থাকে, তাহলে অফিসিয়াল সোর্স বা ব্যবহারকারীর অবদানকৃত বাইনারি প্যাকেজ পেতে cURL ওয়েবসাইটে ডাউনলোড পৃষ্ঠাটি দেখুন। মনে রাখবেন যে কমান্ড-লাইন টুলটি libcurl লাইব্রেরি ব্যবহার করে, যা একটি পৃথক ডাউনলোড প্যাকেজ হিসাবে অফার করা যেতে পারে, তাই, আপনি যদি উত্স থেকে কম্পাইল না করেন, তাহলে 'libcurl' প্যাকেজের পরিবর্তে একটি 'বাইনারী' প্যাকেজ ডাউনলোড করতে ভুলবেন না। . আপনি যদি প্রমাণীকরণ টোকেনগুলি অর্জন করতে বা কিছু Google ডেটা পরিষেবা অ্যাক্সেস করতে চান যার জন্য অনুরোধের জন্য SSL ব্যবহার করতে হয় তাহলে SSL-সক্ষম প্যাকেজগুলির প্রয়োজন হয়৷

একটি Google ডেটা পরিষেবাতে প্রমাণীকরণ করা হচ্ছে

একটি ক্লায়েন্টলগইন (ডেস্কটপ/মোবাইল অ্যাপস) অথবা AuthSub (ওয়েব অ্যাপস) প্রমাণীকরণ টোকেন ধারণ করে এমন অনুরোধে একটি HTTP হেডার যোগ করে প্রমাণীকৃত Google ডেটা অনুরোধ করা হয়। CURL ব্যবহার করে পরীক্ষার উদ্দেশ্যে, ClientLogin হল সহজ পদ্ধতি এবং নীচে নথিভুক্ত করা হয়েছে। AuthSub প্রমাণীকরণ শিরোনামগুলি cURL এর সাথে ব্যবহার করা যেতে পারে, তবে টোকেনগুলি পাওয়ার আরও উন্নত প্রক্রিয়া এই নিবন্ধের সুযোগের বাইরে।

ClientLogin ব্যবহার করে

ক্লায়েন্টলগইন ইনস্টল করা (ডেস্কটপ/মোবাইল) অ্যাপ্লিকেশনের জন্য তৈরি। প্রমাণীকরণের এই পদ্ধতির সাহায্যে, Google ডেটা API ব্যবহার করে অ্যাপ্লিকেশনটি সরাসরি ব্যবহারকারীর ব্যবহারকারীর নাম এবং পাসওয়ার্ড পরিচালনা করে।

ClientLogin- এর জন্য একটি প্রমাণীকরণ অনুরোধ ফর্ম পোস্ট ভেরিয়েবল হিসাবে একটি ব্যবহারকারীর নাম, পাসওয়ার্ড এবং পরিষেবার নাম নেয়। এই ভেরিয়েবলগুলি যথাক্রমে Email , Passwd , এবং service আর্গুমেন্ট হিসাবে পাস করা হয়৷ এই অনুরোধটি বেশ কয়েকটি টোকেন সহ একটি প্রতিক্রিয়া দেয়, যার মধ্যে একটি Google ডেটা পরিষেবাতে অনুরোধ করতে ব্যবহার করা যেতে পারে। মনে রাখবেন যে curl দিয়ে পাস করা ডেটা আর্গুমেন্টগুলি অবশ্যই URL-এনকোডেড হতে হবে যদি সেগুলিতে অ-ASCII অক্ষর থাকে, যা প্রায়শই Email এবং Passwd আর্গুমেন্টগুলিতে উপস্থিত হয়৷ আপনি --data-urlencode পতাকা ব্যবহার করে এই আর্গুমেন্টগুলিকে URL-এনকোড করতে curl জিজ্ঞাসা করতে পারেন।

উদাহরণ অনুরোধ:

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 ওয়েব অ্যালবাম ডেটা API৷ পরিষেবার নাম ( service ) হল lh2 । অন্যান্য Google ডেটা পরিষেবাগুলির পরিষেবার নামগুলি Google ডেটা APIs FAQ পৃষ্ঠায় পাওয়া যাবে৷

উপরের প্রতিক্রিয়ায় Auth টোকেনের মানটি Google ডেটা পরিষেবাগুলিতে প্রমাণীকরণের জন্য প্রয়োজনীয় একমাত্র মান। এই টোকেনের মানটি একটি HTTP শিরোনামে গঠিত হয় যা একটি Google ডেটা পরিষেবার প্রতিটি অনুরোধের জন্য ব্যবহৃত হয়।

curl --silent --header "Authorization: GoogleLogin auth=EUBBIacAAADK\
-kNxvRVmcQghpt3cqSMfEooLNMflLNIQqwgP9OrZS83gs-KSdTNeXhxs\
ET7FYePWmaD8Vsy1V4LSUGMUP48Je2TO8OcjBj6HgAtPhiZeX-gKDfag\
ZDK44j4n-Tkb44nhOnp2_QPSnBj3Z2vYwOEDjjG3Q53aQVC2132JKOuGh" \
"http://picasaweb.google.com/data/feed/api/user/default"

দ্রষ্টব্য : উপরের ব্যাকস্ল্যাশ অক্ষর ('\') সহ নিউলাইন অক্ষরগুলিকে এস্কেপ করার পদ্ধতিটি উইন্ডোজ কমান্ড শেলে কাজ করে না, তাই আপনি যদি উইন্ডোজে curl চালান তবে আপনাকে অবশ্যই একটি লাইনে পুরো কমান্ডটি প্রবেশ করতে হবে।


ফিড এবং এন্ট্রি পুনরুদ্ধার করা হচ্ছে

Google Data API-এ, ক্যোয়ারী প্যারামিটারের ঐচ্ছিক সেট সহ একটি URL-এ HTTP GET সম্পাদন করে ফিড এবং এন্ট্রি পুনরুদ্ধার করা হয়। যেহেতু আমরা একটি GET অনুরোধ করছি, শুধুমাত্র প্রমাণীকরণ শিরোনাম এবং URL curl এ পাস করতে হবে। নীচের উদাহরণটি Picasa ওয়েব অ্যালবাম ডেটা API ব্যবহার করা চালিয়ে যাবে এবং প্রমাণীকৃত ব্যবহারকারীর মালিকানাধীন অ্যালবামগুলির একটি তালিকা পুনরুদ্ধার করতে ব্যবহৃত হয়৷ মনে রাখবেন যে আমরা এই উদাহরণে প্রমাণীকরণ টোকেনকে ABCDEFG তে সংক্ষিপ্ত করেছি, কিন্তু সম্পূর্ণ টোকেন (যেমন EUBBIacA ... উপরে থেকে 32JKOuGh ) এর জায়গায় ব্যবহার করা উচিত।

curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/default"

এটি XML এর একটি বিন্যাসহীন ব্লব ফিরিয়ে দেবে:

<?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>

ফিড ইউআরএলের বিপরীতে এন্ট্রির URL প্রদান করে পৃথক এন্ট্রিগুলি একইভাবে পুনরুদ্ধার করা যেতে পারে।

এন্ট্রি আপডেট করা হচ্ছে

Google Data API-তে এন্ট্রিগুলিকে অনুরোধের অংশে এন্ট্রির XML-এর একটি নতুন অনুলিপি সহ সম্পাদনা URL-এ একটি HTTP PUT করে আপডেট করা হয়৷

  1. atom:link/@rel='self' URL মান ব্যবহার করে এন্ট্রি পুনরুদ্ধার করুন
  2. প্রয়োজনীয় পরিবর্তন করতে স্থানীয়ভাবে এন্ট্রি আপডেট করুন
  3. atom:link/@rel='edit' URL মান ব্যবহার করে এন্ট্রিটিকে সার্ভারে ফিরিয়ে PUT

1. এন্ট্রি পুনরুদ্ধার করা হচ্ছে

উপরের ফিড ব্লকে বোল্ড করা দুটি ইউআরএলের একটি ব্যবহার করে এন্ট্রিটি পুনরুদ্ধার করা যেতে পারে। rel='self' সহ link উপাদানের জন্য যে URLটি প্রয়োজন তা হল href মান।

curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593"

2. স্থানীয়ভাবে এন্ট্রি আপডেট করা হচ্ছে

আপনি এন্ট্রিটি পুনরুদ্ধার করার পরে, এন্ট্রিতে যেকোনো প্রয়োজনীয় পরিবর্তন করতে স্থানীয় পাঠ্য সম্পাদক বা অ্যাপ্লিকেশন ব্যবহার করে এন্ট্রিটি আপডেট করতে হবে। একটি এন্ট্রি পুনরুদ্ধার করার জন্য উপরের কমান্ডে, আমরা ফলাফলগুলিকে tidy জন্য পাইপ করিনি যেমন আমরা পূর্ববর্তী উদাহরণগুলিতে করেছি। ফলাফল হল XML যা একই ডেটা উপস্থাপন করে, কিন্তু tidy জন্য পাইপ করা সংস্করণের চেয়ে ভিন্ন বিন্যাস রয়েছে। একটি এন্ট্রি হাত সম্পাদনার উদ্দেশ্যে, tidy ব্যবহার করা প্রায়শই XML এর সাথে কাজ করা সহজ করে তোলে।

দ্রষ্টব্য : অনুগ্রহ করে মনে রাখবেন সমস্ত XML নেমস্পেস সংজ্ঞা অন্তর্ভুক্ত করতে যা আপনি যখন আপনার নতুন এন্ট্রি পোস্ট করেন তখন atom:entry এর বৈশিষ্ট্য হিসেবে ব্যবহৃত হয়। এগুলো বাদ দিলে পার্সিং ব্যতিক্রম হবে। এছাড়াও, tidy নেমস্পেস সংজ্ঞাগুলির মধ্যবর্তী স্থানগুলিকে নতুন লাইনের অক্ষর দিয়ে প্রতিস্থাপন করবে। যদিও এটি বৈধ XML, Google ডেটা পরিষেবাগুলি এই সময়ে এটি গ্রহণ করে না৷ আপনি যদি tidy ব্যবহার করেন তবে অনুগ্রহ করে entry উপাদানে এই বৈশিষ্ট্যগুলির মধ্যে অতিরিক্ত স্পেস যোগ করতে ভুলবেন না।

3. সার্ভারে এন্ট্রি আপডেট করা হচ্ছে

edit URL ব্যবহার করে, আপনাকে cURL ব্যবহার করে পরিষেবাতে প্রবেশের একটি অনুলিপি PUT হবে। সার্ভারে পাঠানো বিষয়বস্তুর ধরন নির্দেশ করার জন্য একটি শিরোনাম যোগ করতে হবে। নিচের স্নিপেটটি ধরে নেয় যে আপডেট করা এন্ট্রি সহ ফাইলটি update_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 API-তে এন্ট্রিগুলি একটি নতুন এন্ট্রি সহ পোস্ট URL-এ একটি HTTP POST করে তৈরি করা হয়৷ atom:id সার্ভার দ্বারা বরাদ্দ করা হয়, এবং এইভাবে নতুন এন্ট্রিতে অন্তর্ভুক্ত করার প্রয়োজন নেই। একটি নতুন এন্ট্রি তৈরি করার সবচেয়ে সহজ উপায় হল একটি পুরানো এন্ট্রি নেওয়া এবং এটি সংশোধন করা। নিম্নলিখিত উদাহরণ ঠিক যে কাজ করবে.

  1. atom:link/@rel='self'
  2. অপ্রয়োজনীয় তথ্য সরাতে এবং প্রয়োজনীয় পরিবর্তন করতে স্থানীয়ভাবে টেমপ্লেট এন্ট্রি পরিবর্তন করুন
  3. ফিডের জন্য post URL ব্যবহার করে সার্ভারে এন্ট্রিটি 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>

দ্রষ্টব্য : অনুগ্রহ করে মনে রাখবেন সমস্ত XML নেমস্পেস সংজ্ঞা অন্তর্ভুক্ত করতে যা আপনি যখন আপনার নতুন এন্ট্রি পোস্ট করেন তখন atom:entry এর বৈশিষ্ট্য হিসেবে ব্যবহৃত হয়। এগুলো বাদ দিলে পার্সিং ব্যতিক্রম হবে। এছাড়াও, tidy নেমস্পেস সংজ্ঞাগুলির মধ্যে স্পেসগুলি প্রতিস্থাপন করবে এবং তাদের নতুন লাইনের অক্ষর দিয়ে প্রতিস্থাপন করবে। যদিও এটি বৈধ XML, Google ডেটা পরিষেবাগুলি এই সময়ে এটি গ্রহণ করে না৷ আপনি যদি tidy ব্যবহার করেন তবে অনুগ্রহ করে entry উপাদানে এই বৈশিষ্ট্যগুলির মধ্যে অতিরিক্ত স্পেস যোগ করতে ভুলবেন না।

3. সার্ভারে নতুন এন্ট্রি পোস্ট করা

সার্ভারে একটি নতুন এন্ট্রি পোস্ট করার জন্য curl কমান্ডটি একটি বিদ্যমান এন্ট্রি আপডেট করার অনুরূপ, তবে URL ভিন্ন:

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

পোস্টটি সফল হলে, ফলস্বরূপ XML আউটপুট হল সদ্য নির্মিত এন্ট্রির একটি অনুলিপি। এই এন্ট্রিতে এমন জিনিস অন্তর্ভুক্ত থাকবে যা এন্ট্রি তৈরি করার সময় সার্ভার তৈরি করেছিল, যার মধ্যে রয়েছে atom:id , atom:published , atom:updated , এবং atom:link উপাদানের মান। প্রাপ্ত link মানগুলি এন্ট্রি সম্পাদনা বা মুছে ফেলার জন্য ব্যবহার করা যেতে পারে, যদি অন্তর্বর্তী সময়ে কোনও অতিরিক্ত পরিবর্তন করা না হয়।

এন্ট্রি মুছে ফেলা হচ্ছে

এন্ট্রি মুছে ফেলা এন্ট্রি আপডেট করার মতোই, একটি HTTP PUT এর পরিবর্তে একটি HTTP DELETE পদ্ধতি ব্যবহার করা হয় এবং কোনো ডেটা পাঠানোর প্রয়োজন হয় না। এছাড়াও আপডেট অনুরোধের মত, edit URL HTTP অনুরোধের লক্ষ্য হিসাবে ব্যবহৃত হয়।

curl --silent --request DELETE --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456"

মিডিয়া অবজেক্ট আপলোড করা হচ্ছে

পিকাসা ওয়েব অ্যালবাম ডেটা API এবং ডকুমেন্ট লিস্ট ডেটা API-এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল বাইনারি অবজেক্ট আপলোড করার ক্ষমতা৷ সিআরএল সহজেই বাইনারি ডেটা এবং একটি স্লাগ হেডার আপলোড করতে পারে। যাইহোক, ডকুমেন্টস লিস্ট ডেটা API-এর জন্য বর্তমানে বাইনারি ডেটা সহ XML পোস্ট করার প্রয়োজন একটি MIME মাল্টিপার্ট বার্তা হিসাবে৷ মাল্টিপার্ট বার্তা গঠন এই নিবন্ধের সুযোগের বাইরে।

নীচের উদাহরণটি দেখায় কিভাবে sweeping_the_rock.png নামক একটি ছবি আপলোড করতে হয় একটি Picasa ওয়েব অ্যালবামে "Sweeping 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

অন্যান্য কমান্ড-লাইন সরঞ্জাম

কিছু ডেভেলপার অন্যান্য কমান্ড-লাইন টুল ব্যবহার করে শেখা বা ডিবাগিং পছন্দ করে।

জনপ্রিয় সরঞ্জাম অন্তর্ভুক্ত:

  • টেলনেট, ওপেনএসএল ওয়েব সার্ভারে কাঁচা সকেট সংযোগ (যথাক্রমে প্লেইন টেক্সট এবং এসএসএল-ভিত্তিক) তৈরির জন্য ব্যবহৃত হয় এবং Google ডেটা পরিষেবাগুলির সাথে যোগাযোগ করতে ব্যবহার করা যেতে পারে। মনে রাখবেন যে সমস্ত Google ডেটা পরিষেবা SSL সমর্থন করতে পারে না৷ আপনি কীভাবে সংযোগগুলি খুলবেন তা এখানে:
    • telnet picasaweb.google.com 80 (Picasa ওয়েব অ্যালবাম ডেটা API)
    • openssl s_client -connect www.google.com:443 (Google ক্যালেন্ডার ডেটা API এবং www.google.com-এ অন্যান্য পরিষেবা)
    সংযোগ তৈরি হওয়ার পরে, একটি কাঁচা HTTP অনুরোধ পাঠাতে হবে। এই অনুরোধে HTTP ক্রিয়া, আপেক্ষিক পথ, সংস্করণ, সমস্ত শিরোনাম এবং অনুরোধের মূল অংশ অন্তর্ভুক্ত রয়েছে। এখানে একটি উদাহরণ:
    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>
    
    কাঁচা HTTP ডেটা পাঠানোর সময়, সচেতন থাকুন যে POST এবং PUT অপারেশনগুলির জন্য একটি Content-Length শিরোনামের জন্য মান গণনা করা প্রয়োজন। আপনি এই মান গণনা করতে UNIX টুল wc ব্যবহার করতে পারেন। HTTP বডির সমস্ত বিষয়বস্তু একটি টেক্সট ফাইলে রাখুন যেমন template_entry.xml (উপরে ব্যবহৃত উদাহরণ) এবং wc -c template_entry.xml চালান। আপনি যদি ভুলবশত Content-Length শিরোনামের জন্য একটি ভুল মান ব্যবহার করেন তবে ডিবাগ করা প্রায়ই কঠিন।
  • wget সাধারণত ওয়েব সার্ভার থেকে স্থানীয় ফাইলে ডাটা ডাউনলোড করতে ব্যবহৃত হয়। wget , wget এর অনেকগুলি বিকল্প রয়েছে যা এটিকে Google ডেটা পরিষেবাগুলির সাথে 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 হল XML নথিতে XSL রূপান্তর ( XSLT ) প্রয়োগ করার একটি টুল। এটি সহজে একটি XML এন্ট্রি বা Google Data API দ্বারা প্রত্যাবর্তিত ফিড থেকে ডেটার পছন্দসই বিট বের করতে বা নতুন বা আপডেট করা এন্ট্রি তৈরি করতে ব্যবহার করা যেতে পারে।

উপসংহার

আপনি যেমন দেখেছেন, CURL এবং অন্যান্য বেশ কয়েকটি কমান্ড-লাইন টুলগুলি কাঁচা XML এবং HTTP ব্যবহার করে Google ডেটা পরিষেবাগুলির সাথে সহজেই ইন্টারঅ্যাক্ট করতে ব্যবহার করা যেতে পারে। আপনার প্রিয় Google Data API এর সাথে এই টুলগুলি ব্যবহার করার বিষয়ে আপনার কোনো প্রশ্ন থাকলে অনুগ্রহ করে API নির্দিষ্ট ফোরামে আমাদের সাথে যোগ দিন।