استفاده از cURL برای تعامل با خدمات Google Data

اخطار : این صفحه درباره APIهای قدیمی Google، Google Data APIها است. فقط مربوط به APIهایی است که در فهرست راهنمای Google Data APIs فهرست شده اند، که بسیاری از آنها با APIهای جدیدتر جایگزین شده اند. برای اطلاعات در مورد یک API جدید خاص، به مستندات API جدید مراجعه کنید. برای اطلاعات در مورد تأیید درخواست‌ها با یک API جدیدتر، به تأیید اعتبار و مجوز حساب‌های Google مراجعه کنید.

رایان بوید، تیم Google Data APIs
سپتامبر 2007

معرفی

در اصل، Google Data API از فیدها و ورودی‌های Atom (XML) به عنوان قالب داده و HTTP به عنوان پروتکلی برای انتقال داده استفاده می‌کند - پروتکل انتشار Atom را گسترش می‌دهد. ما تعدادی از کتابخانه های سرویس گیرنده را منتشر می کنیم تا تعامل با Google Data API آسان تر شود. با این حال، همیشه می‌توانید از ابزارهای سطح پایین‌تر برای کار با خدمات ما استفاده کنید، و انجام این کار با کمی راهنمایی بسیار آسان است.

cURL یک برنامه خط فرمان برای انجام درخواست ها با استفاده از پروتکل های مختلف از جمله HTTP است. cURL اغلب توسط توسعه دهندگان برای آزمایش سرویس های Google Data استفاده می شود، زیرا از عملکرد HTTP مورد نیاز برای تعامل با API ها در سطح پایین پشتیبانی می کند.

cURL فقط برای انجام ارتباط HTTP پشتیبانی می‌کند، بنابراین دانش پروتکل Google Data ، پروتکل مخصوص سرویس و قالب داده XML مورد استفاده، پیش نیاز کار با برنامه است. برخی ابزارهای دیگر در این مقاله برای آسان کردن این کارها ذکر شده است.

این مقاله از مثال‌هایی بر اساس API داده‌های Picasa Web Albums استفاده می‌کند. با این حال، همه این مثال‌ها را می‌توان به راحتی در سایر APIهای Google Data اعمال کرد.

دریافت و نصب cURL

cURL معمولاً در نصب پیش‌فرض بسیاری از پلتفرم‌های یونیکس/لینوکس در دسترس است. سعی کنید curl در پوسته مورد علاقه خود تایپ کنید تا ببینید آیا ابزار نصب شده و در PATH شما قرار دارد یا خیر. اگر ابزار را نصب نکرده‌اید، از صفحه دانلود در وب‌سایت cURL دیدن کنید تا منبع رسمی یا بسته باینری ارائه‌شده توسط کاربر را دریافت کنید. توجه داشته باشید که ابزار خط فرمان از کتابخانه libcurl استفاده می کند، که ممکن است به عنوان یک بسته دانلود جداگانه ارائه شود، بنابراین، اگر از منبع کامپایل نمی کنید، به جای بسته libcurl، حتما یک بسته دودویی دانلود کنید. . اگر می‌خواهید از cURL برای دریافت نشانه‌های احراز هویت یا دسترسی به برخی از سرویس‌های Google Data که نیاز به استفاده از SSL برای درخواست‌ها دارند، استفاده کنید، بسته‌های دارای SSL مورد نیاز هستند.

احراز هویت در سرویس داده گوگل

درخواست‌های احراز هویت Google Data با افزودن یک هدر HTTP به درخواست انجام می‌شود که شامل یک نشانه تأیید اعتبار ClientLogin (برنامه‌های دسکتاپ/موبایل) یا AuthSub (برنامه‌های وب) است. برای اهداف آزمایش با استفاده از cURL، ClientLogin روش ساده‌تری است و در زیر مستند شده است. سرصفحه‌های احراز هویت AuthSub را می‌توان با cURL استفاده کرد، اما فرآیند پیشرفته‌تر دریافت نشانه‌ها خارج از محدوده این مقاله است.

با استفاده از ClientLogin

ClientLogin برای برنامه های نصب شده (رومیزی/موبایل) در نظر گرفته شده است. با این روش احراز هویت، برنامه با استفاده از Google Data API مستقیماً نام کاربری و رمز عبور کاربر را کنترل می کند.

یک درخواست احراز هویت برای ClientLogin یک نام کاربری، رمز عبور و نام سرویس را به عنوان متغیرهای پست فرم می گیرد. این متغیرها به ترتیب به عنوان آرگومان های Email ، Passwd و service ارسال می شوند. این درخواست با چندین نشانه پاسخ می دهد که یکی از آنها می تواند برای درخواست به سرویس Google Data استفاده شود. توجه داشته باشید که آرگومان‌های داده‌ای که با curl ارسال می‌شوند، اگر حاوی نویسه‌های غیرASCII هستند، که اغلب در آرگومان‌های Email و Passwd ظاهر می‌شوند، باید با URL کدگذاری شوند. می‌توانید از 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 Data را می‌توانید در صفحه پرسش‌های متداول Google Data APIs پیدا کنید.

مقدار نشانه Auth در پاسخ بالا تنها مقدار مورد نیاز برای احراز هویت در سرویس‌های Google Data است. مقدار این توکن در یک هدر HTTP شکل می‌گیرد که سپس برای هر درخواست به سرویس Google Data استفاده می‌شود.

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، بازیابی فیدها و ورودی‌ها با انجام HTTP GET روی URL، با مجموعه‌ای اختیاری از پارامترهای پرس و جو انجام می‌شود. از آنجا که ما در حال انجام یک درخواست GET هستیم، فقط باید سرصفحه احراز هویت و URL به curl ارسال شود. مثال زیر با استفاده از Picasa Web Albums data API ادامه می‌یابد و برای بازیابی فهرستی از آلبوم‌های متعلق به کاربر تأیید شده استفاده می‌شود. توجه داشته باشید که در این مثال توکن auth را به 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>

ابزارهای مناسبی برای قالب بندی این خروجی وجود دارد تا آن را برای انسان خواناتر کند، از جمله مرتب . ساده ترین راه برای استفاده از Tidy این است که خروجی را از دستور curl به ترتیب زیر لوله کنید:

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 برای ورودی، بر خلاف URL feed، بازیابی کرد.

به روز رسانی ورودی ها

ورودی‌های Google Data API با انجام یک HTTP PUT به URL ویرایش با یک کپی جدید از XML ورودی در متن درخواست به‌روزرسانی می‌شوند.

  1. ورودی را با استفاده از مقدار URL atom:link/@rel='self' بازیابی کنید
  2. برای ایجاد تغییرات مورد نیاز، ورودی را به صورت محلی به روز کنید
  3. با استفاده از مقدار URL atom:link/@rel='edit' ورودی را به سرور PUT

1. بازیابی مدخل

ورودی را می توان با استفاده از یکی از دو نشانی اینترنتی پررنگ در بلوک فید بالا بازیابی کرد. URL مورد نیاز مقدار href برای عنصر link با rel='self' است.

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 Data در حال حاضر آن را نمی‌پذیرند. اگر tidy استفاده می کنید، لطفاً حتماً فاصله های اضافی بین این ویژگی ها در عنصر entry اضافه کنید.

3. به روز رسانی ورودی در سرور

با استفاده از URL 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 API با انجام HTTP POST به URL پست با یک ورودی جدید ایجاد می‌شوند. atom:id توسط سرور اختصاص داده می شود و بنابراین لازم نیست در ورودی های جدید گنجانده شود. ساده ترین راه برای ایجاد یک ورودی جدید، گرفتن یک ورودی قدیمی و اصلاح آن است. مثال زیر دقیقاً این کار را انجام می دهد.

  1. یک ورودی الگو را با استفاده از atom:link/@rel='self' بازیابی کنید
  2. برای حذف اطلاعات غیر ضروری و ایجاد تغییرات مورد نیاز، ورودی قالب را به صورت محلی تغییر دهید
  3. با استفاده از URL post برای فید، ورودی را به سرور POST . این یا در فید بازیابی شده به عنوان مقدار href برای عنصر link با یک rel='http://schemas.google.com/g/2005#post' یا در اسناد سرویس در http:// یافت می‌شود. code.google.com .

1. یک ورودی الگو را بازیابی کنید

یک ورودی واحد را می توان با استفاده از مقدار href یک عنصر link با یک 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 Data به شما امکان می دهد عناصر Atom را که سرور مقادیری را برای آنها ارائه می دهد حذف کنید، بنابراین برای ایجاد این ورودی الگوی ساده 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 Data در حال حاضر آن را نمی‌پذیرند. اگر 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 DELETE به جای HTTP PUT استفاده می‌شود و نیازی به ارسال داده نیست. همچنین مانند درخواست به روز رسانی، URL edit به عنوان هدف درخواست HTTP استفاده می شود.

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 در حال حاضر نیاز به ارسال 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

سایر ابزارهای خط فرمان

برخی از توسعه دهندگان یادگیری یا اشکال زدایی را با استفاده از ابزارهای خط فرمان دیگر ترجیح می دهند.

ابزارهای محبوب عبارتند از:

  • telnet، openssl برای ایجاد اتصالات سوکت خام (به ترتیب متن ساده و مبتنی بر ssl) به سرورهای وب استفاده می شود و می تواند برای تعامل با سرویس های داده گوگل استفاده شود. توجه داشته باشید که ممکن است همه سرویس‌های Google Data از SSL پشتیبانی نکنند. در اینجا نحوه باز کردن اتصالات آمده است:
    • telnet picasaweb.google.com 80 (API داده های آلبوم های وب Picasa)
    • openssl s_client -connect www.google.com:443 (Google Calendar data 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 نیاز دارند. برای محاسبه این مقدار می توانید از ابزار یونیکس wc استفاده کنید. تمام محتوای بدنه HTTP را در یک فایل متنی مانند template_entry.xml (نمونه استفاده شده در بالا) قرار دهید و wc -c template_entry.xml اجرا کنید. اگر به طور تصادفی از مقدار نادرستی برای هدر Content-Length استفاده کنید، اغلب اشکال زدایی دشوار است.
  • wget معمولا برای دانلود داده ها از یک وب سرور به یک فایل محلی استفاده می شود. با این حال، wget گزینه‌های زیادی دارد که آن را قادر می‌سازد انواع مختلف درخواست‌های مورد نیاز برای تعامل با سرویس‌های Google Data را انجام دهد. در اینجا مثالی از نحوه استفاده از wget برای POST یک ورودی آلبوم جدید به Picasa Web Albums آورده شده است:
    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 ) به اسناد XML است. می توان از آن برای استخراج آسان بیت های داده دلخواه از ورودی XML یا فید بازگردانده شده توسط Google Data API یا ایجاد ورودی های جدید یا به روز شده استفاده کرد.

نتیجه

همانطور که مشاهده کردید، از cURL و چندین ابزار خط فرمان دیگر می توان برای تعامل آسان با سرویس های داده گوگل با استفاده از XML خام و HTTP استفاده کرد. لطفاً اگر سؤالی در مورد استفاده از این ابزارها با Google Data API مورد علاقه خود دارید، در انجمن های ویژه API به ما بپیوندید.