استخدام cURL للتفاعل مع خدمات Google Data

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

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

مقدمة

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

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

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

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

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

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

المصادقة على إحدى "خدمات بيانات 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 ترميز هذه الوسيطات باستخدام عنوان URL من خلال استخدام العلامة --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، يتم استرداد الخلاصات والإدخالات من خلال تنفيذ GET HTTP على عنوان 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>

تتوفّر بعض الأدوات المناسبة لتنسيق هذا الناتج وجعله أسهل للقراءة، بما في ذلك tidy. أسهل طريقة لاستخدام tidy هي توجيه الناتج من أمر curl إلى tidy كما يلي:

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

يؤدي ذلك إلى إنشاء خلاصة أسهل بكثير في القراءة، مثل ما يلي:

<?xml version='1.0' encoding='utf-8'?>
<feed xmlns='http://www.w3.org/2005/Atom' 
xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' 
xmlns:geo='http://www.w3.org/2003/01/geo/wgs84_pos#' 
xmlns:gml='http://www.opengis.net/gml' 
xmlns:georss='http://www.georss.org/georss' 
xmlns:photo='http://www.pheed.com/pheed/' 
xmlns:media='http://search.yahoo.com/mrss/' 
xmlns:batch='http://schemas.google.com/gdata/batch' 
xmlns:gphoto='http://schemas.google.com/photos/2007'>
  <id>http://picasaweb.google.com/data/feed/api/user/brad.gushue</id>
  <updated>2007-09-13T21:47:07.337Z</updated>
  <category scheme='http://schemas.google.com/g/2005#kind'
  term='http://schemas.google.com/photos/2007#user' />
  <title type='text'>brad.gushue</title>
  <subtitle type='text'></subtitle>
  <icon>
  http://lh6.google.com/brad.gushue/AAAAj9zigp4/AAAAAAAAAAA/RiMAlXV4MFI/s64-c/brad.gushue</icon>
  <link rel='http://schemas.google.com/g/2005#feed'
  type='application/atom+xml'
  href='http://picasaweb.google.com/data/feed/api/user/brad.gushue' />
  <link rel='alternate' type='text/html'
  href='http://picasaweb.google.com/brad.gushue' />
  <link rel='self' type='application/atom+xml'
  href='http://picasaweb.google.com/data/feed/api/user/brad.gushue?start-index=1&max-results=1000' />
  <author>
    <name>Brad</name>
    <uri>http://picasaweb.google.com/brad.gushue</uri>
  </author>
  <generator version='1.00' uri='http://picasaweb.google.com/'>
  Picasaweb</generator>
  <openSearch:totalResults>8</openSearch:totalResults>
  <openSearch:startIndex>1</openSearch:startIndex>
  <openSearch:itemsPerPage>1000</openSearch:itemsPerPage>
  <gphoto:user>brad.gushue</gphoto:user>
  <gphoto:nickname>Brad</gphoto:nickname>
  <gphoto:thumbnail>
  http://lh6.google.com/brad.gushue/AAAAj9zigp4/AAAAAAAAAAA/RiMAlXV4MFI/s64-c/brad.gushue</gphoto:thumbnail>
  <entry>
    <id>
    http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593</id>
    <published>2007-05-23T04:55:52.000Z</published>
    <updated>2007-05-23T04:55:52.000Z</updated>
    <category scheme='http://schemas.google.com/g/2005#kind'
    term='http://schemas.google.com/photos/2007#album' />
    <title type='text'>Trip To Italy</title>
    <summary type='text'>This was the recent trip I took to
    Italy.</summary>
    <rights type='text'>public</rights>
    <link rel='http://schemas.google.com/g/2005#feed'
    type='application/atom+xml'
    href='http://picasaweb.google.com/data/feed/api/user/brad.gushue/albumid/9810315389720904593' />
    <link rel='alternate' type='text/html'
    href='http://picasaweb.google.com/brad.gushue/TripToItalyV2' />
    <link rel='self' type='application/atom+xml'
    href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593' />
    <link rel='edit' type='application/atom+xml'
    href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456' />
    <author>
      <name>Brad</name>
      <uri>http://picasaweb.google.com/brad.gushue</uri>
    </author>
    <gphoto:id>9810315389720904593</gphoto:id>
    <media:group>
    ...
    </media:group>
  </entry>
  <entry>
  ...
  </entry>

</feed>

يمكن استرداد الإدخالات الفردية بالطريقة نفسها من خلال تقديم عنوان URL للإدخال بدلاً من عنوان URL للخلاصة.

تعديل الإدخالات

يتم تعديل الإدخالات في Google Data APIs من خلال تنفيذ عملية HTTP PUT على عنوان URL الخاص بالتعديل مع نسخة جديدة من XML الخاص بالإدخال في نص الطلب.

  1. استرداد الإدخال باستخدام atom:link/@rel='self' قيمة عنوان URL
  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. يجب إضافة عنوان للإشارة إلى نوع المحتوى الذي يتم إرساله إلى الخادم. يفترض المقتطف التالي أنّه تم حفظ الملف الذي يتضمّن الإدخال المعدَّل في updated_entry.xml.

curl --silent --data-binary "@updated_entry.xml" --request PUT --header "Content-Type: application/atom+xml" --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456"

إنشاء إدخالات

يتم إنشاء الإدخالات في Google Data APIs من خلال تنفيذ HTTP POST إلى عنوان 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. تعديل إدخال النموذج

نريد إنشاء ألبوم باسم "لعبة الكيرلنغ في كندا" يتضمّن صورًا من مباراة الكيرلنغ الأخيرة التي شاركنا فيها. تتيح لك "بيانات 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"

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

من الميزات المهمة في واجهة برمجة التطبيقات Picasa Web Albums data API وواجهة برمجة التطبيقات Documents List data API إمكانية تحميل عناصر ثنائية. ويمكن لـ cURL بسهولة تحميل البيانات الثنائية وعنوان URL مختصر. ومع ذلك، تتطلّب واجهة برمجة التطبيقات Documents List data API حاليًا نشر XML مع البيانات الثنائية كرسالة MIME متعددة الأجزاء. لا تتناول هذه المقالة كيفية إنشاء رسالة متعددة الأجزاء.

يوضّح المثال أدناه كيفية تحميل صورة باسم sweeping_the_rock.png إلى ألبوم ويب في Picasa بعنوان "تنظيف الصخرة":

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". يُرجى العِلم أنّ بعض خدمات "بيانات Google" قد لا تتوافق مع بروتوكول SSL. إليك كيفية فتح الاتصالات:
    • telnet picasaweb.google.com 80 (Picasa Web Albums data API)
    • 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 أو خلاصة XML التي تعرضها Google Data APIs، أو لإنشاء إدخالات جديدة أو معدَّلة.

الخاتمة

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