שימוש ב-cURL לאינטראקציה עם שירותי הנתונים של Google

אזהרה: דף זה עוסק בממשקי API הישנים יותר של Google, בממשקי ה-API של נתוני Google, והוא רלוונטי רק לממשקי ה-API שרשומים בספריית ממשקי ה-API של נתוני Google, שרבים מהם הוחלפו בממשקי API חדשים יותר. למידע על API חדש ספציפי, עיינו במסמכי התיעוד של ה-API החדש. למידע על הרשאת בקשות באמצעות ממשק API חדש יותר, יש לעיין בקטע אימות והרשאה של חשבונות Google.

ריאן בויד, צוות Google Data APIs
ספטמבר 2007

מבוא

בלב הנתונים, ממשקי API של נתונים של Google משתמשים בפידים וברשומות Atom (XML) כפורמט נתונים וב-HTTP כפרוטוקול להעברת נתונים - וכך מרחיבים את פרוטוקול הפרסום של Atom. אנחנו מפרסמים מספר ספריות לקוח כדי להקל על האינטראקציה עם ממשקי API של נתוני Google. עם זאת, אתם תמיד מוזמנים להשתמש בכלים ברמה נמוכה יותר כדי לעבוד עם השירותים שלנו, די קל לעשות זאת עם קצת הדרכה.

cURL הוא יישום בשורת הפקודה לביצוע בקשות באמצעות מגוון פרוטוקולים, כולל HTTP. פעמים רבות מפתח cURL בודק את שירותי הנתונים של Google, מכיוון שהוא תומך בפונקציונליות של HTTP שנדרשת לאינטראקציה עם ממשקי API ברמה נמוכה.

cURL מספק תמיכה לביצוע תקשורת HTTP בלבד, כך שידע בפרוטוקול הנתונים של Google, בפרוטוקול הספציפי לשירות ובפורמט נתוני ה-XML הנדרש לצורך עבודה עם האפליקציה. מאמר זה מפרט כמה כלים נוספים שמאפשרים לבצע את המשימות האלה בקלות רבה יותר.

המאמר הזה משתמש בדוגמאות המבוססות על ממשק ה-API של נתוני אלבומי Google. עם זאת, אפשר ליישם את כל הדוגמאות האלה בקלות בממשקי API אחרים של Google Data.

קבלה והתקנה של cURL

cURL זמין בדרך כלל בהתקנת ברירת מחדל של פלטפורמות רבות של UNIX/Linux. כדאי לנסות להקליד curl במעטפת המועדפת עליך כדי לבדוק אם הכלי מותקן ואם הוא נמצא ב-PATH. אם הכלי לא מותקן, בקר בדף ההורדה באתר cURL כדי לקבל את המקור הרשמי או חבילה בינארית שנתמכת על ידי משתמשים. שימו לב שהכלי של שורת הפקודה משתמש בספרייה libcurl, שייתכן שהוצעה כחבילת הורדה נפרדת. לכן, אם אתם לא אוספים מהמקור, הקפידו להוריד חבילה 'בינארית' במקום חבילה 'libcurl'. החבילות שתומכות ב-SSL נדרשות אם רוצים להשתמש ב-cURL כדי לרכוש אסימוני אימות או לגשת לחלק משירותי הנתונים של Google שמחייבים שימוש ב-SSL לבקשות.

אימות לשירות נתונים של Google

בקשות מאומתות של נתונים של Google מתבצעות על ידי הוספת כותרת HTTP לבקשה שמכילה אסימון אימות של ClientLogin (אפליקציות למחשב/נייד) או AuthSub (אפליקציות אינטרנט). למטרות בדיקה באמצעות cURL, השיטה 'התחברות ללקוחות' היא השיטה הקלה ביותר והיא מתועדת בהמשך. אפשר להשתמש בכותרות אימות מסוג 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 מופיע מידע ספציפי על הפרמטרים שמשמשים בבקשה שלמעלה. בדוגמה זו, השירות שבו אנו משתמשים הוא ממשק ה-API של אלבומי Google. שם השירות (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"

הערה: שיטת הבריחה (escape) של תווי שורה חדשה עם תו אלכסוני ('\') למעלה לא פועלת במעטפת הפקודה של Windows, כך שצריך להזין את כל הפקודה בשורה אחת אם משתמשים ב-curl ב-Windows.


מתבצע אחזור של פידים וערכים

ב-Google Data APIs, אחזור עדכונים וערכים מתבצע על ידי ביצוע של HTTP GET בכתובת URL, עם קבוצה אופציונלית של פרמטרים של שאילתה. אנחנו מבצעים בקשת GET, לכן צריך להעביר רק את כותרת האימות ואת כתובת ה-URL אל curl. הדוגמה הבאה תמשיך להשתמש ב-API של נתוני אלבומי Google ומשמש לאחזור רשימת אלבומים שבבעלות המשתמש המאומת. לידיעתך, קיצרנו את אסימון האימות ל-ABCDEFG בדוגמה זו, אך יש להשתמש באסימון המלא (למשל EUBBIacA...32JKOuGh למעלה) במקומו.

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

פעולה זו תחזיר blob לא מעוצב של 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>

יש כמה כלים הגיוניים לעיצוב הפלט הזה, כך שיהיה יותר קריא למשתמשים, כולל סידור. הדרך הקלה ביותר להשתמש ב-Cidy היא לסדר את הפלט מפקודת ה-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>

ניתן לאחזר נתונים יחידים באופן זהה באמצעות ציון כתובת האתר של הרשומה, בניגוד לכתובת אתר של עדכון.

מתבצע עדכון של הרשומות

הערכים ב-Google Data APIs מתעדכנים על ידי ביצוע HTTP PUT לכתובת האתר לעריכה, עם עותק חדש של קובץ ה-XML של הרשומה בגוף הבקשה.

  1. אחזור הרשומה על סמך הערך של כתובת ה-URL atom:link/@rel='self'
  2. לעדכן את הרשומה באופן מקומי כדי לבצע את השינויים הנדרשים
  3. PUT הרשומה חזרה לשרת, באמצעות הערך atom:link/@rel='edit' של כתובת ה-URL

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 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. שינוי רשומת התבנית

אנחנו רוצים ליצור אלבום בשם "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"

העלאת אובייקטים למדיה

תכונה חשובה בממשק ה-API של נתוני אלבומי Google וב-API של רשימת המסמכים היא היכולת להעלות אובייקטים בינאריים. cURL יכול בקלות להעלות נתונים בינאריים וכותרת חילזון. עם זאת, ה-Data API של Documents List דורש כרגע פרסום של ה-XML יחד עם הנתונים הבינאריים כהודעת MIME מרובת חלקים. יצירת ההודעה עם מספר חלקים לא נכללת בהיקף המאמר הזה.

הדוגמה למטה מראה כיצד להעלות תמונה בשם sweeping_the_rock.png לאלבום Google עם הכותרת 'ניקוי הסלע':

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 תומכים ב-SSL. כך פותחים את החיבורים:
    • telnet picasaweb.google.com 80 (ממשק API לנתוני Google Photos)
    • openssl s_client -connect www.google.com:443 (API לנתוני יומן 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 רשומה חדשה של Google Photos:
    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"
    
  • bigquerytproc הוא כלי להחלת שינויים ב-XSL (XSLT) על מסמכי XML. ניתן להשתמש בו כדי לחלץ בקלות את קטעי הנתונים הרצויים מרשומת XML או מעדכון שמוחזרו על ידי ממשקי API של נתונים של Google, או כדי ליצור ערכים חדשים או מעודכנים.

סיכום

כפי שאפשר לראות, ניתן להשתמש ב-cURL ובמספר כלי שורת פקודה נוספים כדי לקיים אינטראקציה בקלות עם שירותי הנתונים של Google, באמצעות XML ו-HTTP גולמי. אם יש לך שאלות לגבי השימוש בכלים האלה בשילוב עם Google Data API המועדף עליך, אנחנו מזמינים אותך להצטרף לפורומים הספציפיים ל-API.