استخدام cURL للتفاعل مع خدمات بيانات Google

تحذير: تتعلق هذه الصفحة بواجهات برمجة التطبيقات القديمة من Google، وهي واجهات برمجة التطبيقات لبيانات Google؛ وهي مرتبطة فقط بواجهات برمجة التطبيقات المدرجة في دليل Google Data APIs، والتي تم استبدال العديد منها بواجهات برمجة تطبيقات أحدث. للحصول على معلومات حول واجهة برمجة تطبيقات جديدة، اطلع على وثائق واجهة برمجة التطبيقات الجديدة. للحصول على معلومات حول تفويض الطلبات باستخدام واجهة برمجة تطبيقات أحدث، اطلع على مصادقة حسابات Google وتفويضها.

ريان بويد، فريق Google Data APIs
أيلول (سبتمبر) 2007

المقدمة

وبشكل أساسي، تستخدم واجهات برمجة التطبيقات لبيانات Google خلاصات Atom وإدخالاتها (XML) كتنسيق للبيانات وHTTP كبروتوكول لنقل البيانات - حيث يتم تمديد بروتوكول النشر Atom. ننشر عددًا من مكتبات العملاء لتسهيل التفاعل مع Google Data APIs. ومع ذلك، يمكنك دائمًا استخدام أدوات على المستوى الأدنى للعمل مع خدماتنا، ومن السهل جدًا إجراء ذلك بالقليل من التوجيه.

cURL هو تطبيق سطر أوامر لتنفيذ الطلبات باستخدام مجموعة متنوعة من البروتوكولات بما فيها HTTP. يستخدم cURL غالبًا مطوري البرامج لاختبار خدمات بيانات Google، حيث إنه يدعم وظائف HTTP المطلوبة للتفاعل مع واجهات برمجة التطبيقات على مستوى منخفض.

لا يقدم cURL سوى دعمًا لإجراء اتصال HTTP، لذا فإن معرفة بروتوكول بيانات Google، والبروتوكول الخاص بالخدمة، وتنسيق بيانات XML المستخدم هو متطلبات مسبقة للعمل مع التطبيق. تم ذكر بعض الأدوات الأخرى في هذه المقالة لتسهيل هذه المهام.

تستخدم هذه المقالة أمثلة تستند إلى واجهة برمجة التطبيقات لبيانات ألبومات الويب بيكاسا. ومع ذلك، يمكن تطبيق جميع هذه الأمثلة بسهولة على واجهات برمجة التطبيقات لبيانات Google الأخرى.

الحصول على cURL وتثبيته

يتوفر cURL بشكل شائع عند التثبيت الافتراضي للعديد من أنظمة UNIX/Linux الأساسية. جرِّب كتابة curl في واجهة المستخدم المفضَّلة لديك لمعرفة ما إذا كانت الأداة قد تم تثبيتها وأنها موجودة في PATH. إذا لم تكن الأداة مثبتة، فانتقل إلى صفحة التنزيل على موقع cURL على الويب للحصول على المصدر الرسمي أو حزمة ثنائية يساهم بها المستخدم. لاحظ أن أداة سطر الأوامر تستخدم مكتبة libcurl، والتي قد يتم تقديمها كحزمة تنزيل منفصلة، لذا إذا لم تكن تنوي التجميع من المصدر، فتأكد من تنزيل حزمة 'ثنائية' بدلاً من حزمة 'libcurl'. تكون الحزم التي تمكِّن طبقة المقابس الآمنة مطلوبة إذا كنت تريد استخدام cURL للحصول على رموز مصادقة أو للدخول إلى بعض خدمات بيانات Google التي تتطلب استخدام طبقة المقابس الآمنة للطلبات.

المصادقة على خدمة بيانات Google

يتم تنفيذ طلبات بيانات Google التي تمت مصادقتها عن طريق إضافة رأس HTTP إلى الطلب الذي يحتوي على رمز مصادقة ClientLogin (تطبيقات سطح المكتب/الجوّال) أو رمز المصادقة AuthSub (تطبيقات الويب). ولأغراض الاختبار باستخدام cURL، يُعد ClientLogin الطريقة الأسهل وموثقة أدناه. يمكن استخدام رؤوس مصادقة AuthSub مع cURL، إلا أن العملية الأكثر تقدمًا للحصول على الرموز المميزة خارج النطاق لهذه المقالة.

استخدام ClientLogin

ClientLogin مخصص للتطبيقات المثبتة (سطح المكتب/الجوّال). باستخدام طريقة المصادقة هذه، يتعامل التطبيق الذي يستخدم Google Data APIs مباشرةً مع اسم المستخدم وكلمة المرور للمستخدم.

يأخذ طلب المصادقة لـ ClientLogin اسم المستخدم وكلمة المرور واسم الخدمة كمتغيّرات مشاركة للنموذج. يتم تمرير هذه المتغيرات كوسيطات Email وPasswd وservice على التوالي. ينتج عن هذا الطلب استجابة تتضمن العديد من الرموز المميزة، ويمكن استخدام أحدها لتقديم طلبات إلى خدمة بيانات Google. لاحظ أن وسيطات البيانات التي تم تمريرها باستخدام curl يجب أن تكون مشفّرة بعنوان URL إذا كانت تحتوي على أحرف غير 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 للحصول على معلومات محددة عن المعلمات المستخدمة في الطلب أعلاه. في هذا المثال، الخدمة التي نستخدمها هي واجهة برمجة تطبيقات بيانات ألبومات الويب بيكاسا. اسم الخدمة (service) هو lh2. ويمكن العثور على أسماء الخدمات لخدمات بيانات Google الأخرى في صفحة الأسئلة الشائعة حول Google Data APIs.

قيمة رمز 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"

ملاحظة: لا تعمل طريقة الهروب من الأحرف الجديدة في السطر الذي يحتوي على أحرف مائلة للخلف ('\') في واجهة أوامر Windows، لذا يجب إدخال الأمر بأكمله في سطر واحد إذا كنت تشغّل curl على Windows.


استرداد الخلاصات والإدخالات

في Google Data APIs، يتم استرداد الخلاصات والإدخالات من خلال تنفيذ HTTP GET على عنوان URL، مع مجموعة اختيارية من معلمات طلب البحث. بما أننا ننفّذ طلب GET، يجب فقط إرسال عنوان المصادقة وعنوان URL إلى curl. سيستمر المثال التالي في استخدام واجهة برمجة التطبيقات لبيانات ألبومات الويب بيكاسا، كما يتم استخدامه لاسترداد قائمة بالألبومات المملوكة للمستخدم الذي تمت مصادقته. لاحظ أننا اختصارنا الرمز المميز للمصادقة إلى 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 إلى الترتيب كما يلي:

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 للخلاصة.

تحديث الإدخالات

يتم تحديث الإدخالات في واجهات برمجة التطبيقات لبيانات Google من خلال إضافة HTTP PUT إلى عنوان URL للتعديل مع نسخة جديدة من XML للإدخال في نص الطلب.

  1. استرداد الإدخال باستخدام قيمة عنوان URL لـ atom:link/@rel='self'
  2. تحديث الإدخال محليًا لإجراء التغييرات المطلوبة
  3. PUT الإدخال مرة أخرى إلى الخادم، باستخدام قيمة عنوان URL atom:link/@rel='edit'

1- استرداد الإدخال

ويمكن استرداد الإدخال باستخدام أحد عنواني URL بالخط العريض في قالب الخلاصة أعلاه. عنوان 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 في الوقت الحالي. إذا كنت تستخدم السمة tidy، يُرجى التأكّد من إضافة مسافات إضافية بين هذه السمات في العنصر entry.

3. تحديث الإدخال على الخادم

باستخدام عنوان URL لـ edit، يجب PUT نسخة من الإدخال إلى الخدمة باستخدام cURL. يجب إضافة رأس للإشارة إلى نوع المحتوى الذي يتم إرساله إلى الخادم. يفترض المقتطف التالي أن الملف بالإدخال الذي تم تحديثه يتم حفظه في 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 من خلال إضافة HTTP POST إلى عنوان URL للمشاركة مع إدخال جديد. يتم تخصيص atom:id من خلال الخادم، وبالتالي ليس من الضروري تضمينه في الإدخالات الجديدة. أسهل طريقة لإنشاء إدخال جديد هي أخذ ملاحظة قديمة وتعديلها. وسيتم إجراء ذلك في المثال التالي.

  1. استرداد إدخال نموذج باستخدام atom:link/@rel='self'
  2. تعديل إدخال النموذج محليًا لإزالة المعلومات غير الضرورية وإجراء التغييرات المطلوبة
  3. POST الإدخال مرة أخرى إلى الخادم، باستخدام عنوان URL 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- تعديل إدخال النموذج

نريد إنشاء ألبوم باسم "Curling in Canada" يحتوي على صور من أحدث تطابق مع لعبة الكرلنغ. تسمح لك بيانات Google بإسقاط عناصر 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 في الوقت الحالي. إذا كنت تستخدم السمة 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"

تحميل عناصر الوسائط

من الميزات المهمة في واجهة برمجة التطبيقات لبيانات ألبومات الويب بيكاسا وواجهة برمجة التطبيقات لبيانات قائمة المستندات هي القدرة على تحميل الكائنات الثنائية. ويمكن لـ cURL بسهولة تحميل البيانات الثنائية ورأس البَزَّاق. ومع ذلك، تتطلب واجهة برمجة التطبيقات لبيانات قائمة المستندات نشر XML جنبًا إلى جنب مع البيانات الثنائية كرسالة متعددة الأجزاء من MIME. إن صياغة الرسالة متعددة الأجزاء خارج المجال لهذه المقالة.

يوضح المثال أدناه كيفية تحميل صورة باسم 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 وopensl لإجراء اتصالات بمقابس غير منسقة (نص عادي ومستند إلى ssl، على التوالي) إلى خوادم الويب ويمكن استخدامها للتفاعل مع خدمات بيانات Google. لاحظ أنه قد لا تتوفر طبقة المقابس الآمنة في بعض خدمات بيانات Google. إليك كيفية فتح الاتصالات:
    • telnet picasaweb.google.com 80 (واجهة برمجة التطبيقات لبيانات ألبومات الويب بيكاسا)
    • openssl s_client -connect www.google.com:443 (واجهة برمجة التطبيقات لبيانات تقويم Google والخدمات الأخرى على 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 على العديد من الخيارات التي تمكّن من تنفيذ جميع أنواع الطلبات المختلفة اللازمة للتفاعل مع خدمات بيانات Google. إليك مثال على كيفية استخدام 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 هي أداة لتطبيق تحويلات XSL (XSLT) على مستندات XML. ويمكن استخدامه لاستخراج وحدات البيانات المطلوبة بسهولة من إدخال XML أو خلاصة يتم عرضها بواسطة Google Data APIs أو لإنشاء إدخالات جديدة أو معدّلة.

الخاتمة

كما رأيت، يمكن استخدام cURL والعديد من أدوات سطر الأوامر الأخرى للتفاعل بسهولة مع خدمات بيانات Google باستخدام XML وHTTP الأولي. يُرجى الانضمام إلينا في منتديات محددة لواجهة برمجة التطبيقات إذا كانت لديك أي أسئلة حول استخدام هذه الأدوات مع واجهة برمجة تطبيقات بيانات Google المفضلة.