אזהרה: הדף הזה עוסק בממשקי API ישנים יותר של Google, ממשקי Google Data API. הוא רלוונטי רק לממשקי ה-API שרשומים בספריית Google Data API, שרבים מהם הוחלפו בממשקי API חדשים יותר. מידע על API חדש ספציפי מופיע במסמכי התיעוד של ה-API החדש. למידע על הרשאת בקשות באמצעות API חדש יותר, אפשר לעיין במאמר אימות והרשאה של חשבונות Google.
ריאן בויד, צוות Google Data APIsספטמבר 2007
- מבוא
- השגת cURL והתקנה
- אימות מול שירות נתונים של Google
- אחזור פידים ורשומות
- עדכון רשומות
- יצירת רשומות
- מחיקת רשומות
- העלאת אובייקטים של מדיה
- כלי שורת פקודה אחרים
- סיכום
מבוא
בבסיס, Google Data APIs משתמשים בפידים וברשומות של Atom (XML) כפורמט נתונים וב-HTTP כפרוטוקול להעברת נתונים – הרחבה של Atom Publishing Protocol. אנחנו מפרסמים מספר ספריות לקוח כדי להקל על האינטראקציה עם Google Data APIs. עם זאת, תמיד אפשר להשתמש בכלים ברמה נמוכה יותר כדי לעבוד עם השירותים שלנו, ודי קל לעשות את זה בעזרת הדרכה קצרה.
cURL היא אפליקציה לשורת הפקודה שמאפשרת לבצע בקשות באמצעות מגוון פרוטוקולים, כולל HTTP. מפתחים משתמשים ב-cURL לעיתים קרובות כדי לבדוק שירותי נתונים של Google, כי היא תומכת בפונקציונליות של HTTP שנדרשת לאינטראקציה עם ממשקי ה-API ברמה נמוכה.
cURL מספקת תמיכה רק בביצוע תקשורת HTTP, ולכן נדרש ידע בפרוטוקול הנתונים של Google, בפרוטוקול הספציפי לשירות ובפורמט הנתונים של XML כדי לעבוד עם האפליקציה. במאמר הזה מוזכרים עוד כלים שיכולים להקל על המשימות האלה.
במאמר הזה נעשה שימוש בדוגמאות שמבוססות על Picasa Web Albums Data API. עם זאת, אפשר להשתמש בכל הדוגמאות האלה בקלות גם בממשקי Google Data API אחרים.
השגת cURL והתקנה
cURL זמין בדרך כלל בהתקנת ברירת מחדל של פלטפורמות רבות של UNIX/Linux. אפשר להקליד curl
במעטפת המועדפת כדי לבדוק אם הכלי מותקן ואם הוא נמצא ב-PATH
. אם הכלי לא מותקן, אפשר להיכנס אל דף ההורדה באתר cURL כדי לקבל את המקור הרשמי או חבילת קבצים בינאריים שנוצרה על ידי משתמש. שימו לב: כלי שורת הפקודה משתמש בספרייה libcurl
, שאולי מוצעת כחבילת הורדה נפרדת. לכן, אם אתם לא מבצעים קומפילציה מהמקור, הקפידו להוריד חבילה בינארית ולא חבילה מסוג libcurl. חבילות עם SSL נדרשות אם רוצים להשתמש ב-cURL כדי לקבל טוקנים לאימות או כדי לגשת לשירותי נתונים מסוימים של Google שנדרש בהם שימוש ב-SSL לבקשות.
אימות מול שירות נתונים של Google
בקשות מאומתות לנתונים של Google מתבצעות על ידי הוספת כותרת HTTP לבקשה, שמכילה אסימון אימות מסוג ClientLogin (אפליקציות למחשב או לנייד) או AuthSub (אפליקציות אינטרנט). למטרות בדיקה באמצעות cURL, השיטה ClientLogin היא קלה יותר ומתועדת בהמשך. אפשר להשתמש בכותרות אימות של AuthSub עם cURL, אבל התהליך המתקדם יותר של קבלת האסימונים לא מתואר במאמר הזה.
שימוש ב-ClientLogin
השיטה ClientLogin מיועדת לאפליקציות מותקנות (למחשב או לנייד). בשיטת האימות הזו, האפליקציה שמשתמשת ב-Google Data APIs מטפלת ישירות בשם המשתמש ובסיסמה של המשתמש.
בקשת אימות ל-ClientLogin מקבלת שם משתמש, סיסמה ושם שירות כמשתני post בטופס. המשתנים האלה מועברים כארגומנטים Email
, Passwd
ו-service
, בהתאמה. התגובה לבקשה הזו כוללת כמה אסימונים, שאחד מהם יכול לשמש לשליחת בקשות לשירות הנתונים של Google. שימו לב: אם ארגומנטים של נתונים שמועברים באמצעות curl
מכילים תווים שאינם ASCII, הם צריכים להיות בקידוד URL. תווים כאלה מופיעים לעיתים קרובות בארגומנטים 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. בדוגמה הזו, השירות שבו אנחנו משתמשים הוא Picasa Web Albums data API. השם של השירות (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
, צריך להעביר ל-curl
רק את כותרת האימות ואת כתובת ה-URL. בדוגמה שלמטה נמשיך להשתמש ב-Picasa Web Albums Data API כדי לאחזר רשימה של אלבומים שנמצאים בבעלות המשתמש המאומת. שימו לב שבדוגמה הזו קיצרנו את אסימון ההרשאה ל-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>
יש כמה כלים טובים לעיצוב הפלט הזה כדי שיהיה קל יותר לקרוא אותו, כולל 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 של הרשומה בגוף הבקשה.
- אחזור הרשומה באמצעות ערך כתובת ה-URL
atom:link/@rel='self'
- מעדכנים את הרשומה באופן מקומי כדי לבצע את השינויים הנדרשים
PUT
את הרשומה בחזרה לשרת, באמצעות ערך כתובת ה-URLatom: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
מוקצה על ידי השרת, ולכן אין צורך לכלול אותו ברשומות חדשות. הדרך הכי קלה ליצור רשומה חדשה היא לקחת רשומה ישנה ולשנות אותה. הדוגמה הבאה ממחישה זאת.
- אחזור של רשומה בתבנית באמצעות
atom:link/@rel='self'
- משנים את רשומת התבנית באופן מקומי כדי להסיר מידע מיותר ולבצע את השינויים הנדרשים
POST
את הרשומה בחזרה לשרת, באמצעות כתובת ה-URLpost
של הפיד. הערך הזה מופיע בפיד שאוחזר כערך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 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 לא מקבלים אותו בשלב הזה. אם אתם משתמשים ב-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
ולא צריך לשלוח נתונים. בדומה לבקשת העדכון, כתובת ה-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 היא היכולת להעלות אובייקטים בינאריים. אפשר להעלות נתונים בינאריים וכותרת slug בקלות באמצעות cURL. עם זאת, נכון לעכשיו, ה-API של נתוני רשימת המסמכים מחייב פרסום של ה-XML יחד עם הנתונים הבינאריים כהודעה מרובת חלקים בפורמט MIME. יצירת הודעה מרובת חלקים היא מעבר להיקף המאמר הזה.
בדוגמה הבאה מוצג איך להעלות תמונה בשם sweeping_the_rock.png
לאלבום ב-Google Photos עם הכותרת '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. שימו לב שלא כל שירותי הנתונים של Google תומכים ב-SSL. כך פותחים את החיבורים:
-
telnet picasaweb.google.com 80
(Picasa Web Albums data API) -
openssl s_client -connect www.google.com:443
(Google Calendar data API ושירותים אחרים בכתובת www.google.com)
כששולחים נתוני 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>
POST
ו-PUT
ידרשו חישוב של הערך עבור כותרתContent-Length
. אפשר להשתמש בכלי UNIXwc
כדי לחשב את הערך הזה. מציבים את כל התוכן של גוף ה-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"
- xsltproc הוא כלי להחלת טרנספורמציות XSL (XSLT) על מסמכי XML. אפשר להשתמש בו כדי לחלץ בקלות חלקים רצויים של נתונים מפיד או מרשומה בפורמט XML שמוחזרים על ידי Google Data APIs, או כדי ליצור רשומות חדשות או מעודכנות.
סיכום
כפי שראיתם, אפשר להשתמש ב-cURL ובכמה כלים אחרים של שורת הפקודה כדי ליצור אינטראקציה בקלות עם שירותי הנתונים של Google באמצעות XML ו-HTTP גולמיים. אם יש לכם שאלות לגבי השימוש בכלים האלה עם Google Data API המועדף עליכם, אתם מוזמנים להצטרף לפורומים הספציפיים ל-API.