אזהרה: דף זה עוסק בממשקי API הישנים יותר של Google, בממשקי ה-API של נתוני Google, והוא רלוונטי רק לממשקי ה-API שרשומים בספריית ממשקי ה-API של נתוני Google, שרבים מהם הוחלפו בממשקי API חדשים יותר. למידע על API חדש ספציפי, עיינו במסמכי התיעוד של ה-API החדש. למידע על הרשאת בקשות באמצעות ממשק API חדש יותר, יש לעיין בקטע אימות והרשאה של חשבונות Google.
ריאן בויד, צוות Google Data APIsספטמבר 2007
- מבוא
- קבלה והתקנה של cURL
- אימות לשירות נתונים של Google
- אחזור פידים ורשומות
- עדכון הרשומות
- יצירת רשומות
- מחיקת רשומות
- העלאת אובייקטים למדיה
- כלים נוספים בשורת הפקודה
- סיכום
מבוא
בלב הנתונים, ממשקי 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 של הרשומה בגוף הבקשה.
- אחזור הרשומה על סמך הערך של כתובת ה-URL
atom:link/@rel='self'
- לעדכן את הרשומה באופן מקומי כדי לבצע את השינויים הנדרשים
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
מוקצה על ידי השרת ולכן אין צורך לכלול אותו בערכים חדשים. הדרך הקלה ביותר ליצור רשומה חדשה היא לקחת רשומה ישנה ולשנות אותה. בדוגמה הבאה תוכלו לעשות זאת.
- אחזור רשומה בתבנית באמצעות
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 מאפשרים לך לשחרר רכיבי 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)
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
. אפשר להשתמש בכלי 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"
- bigquerytproc הוא כלי להחלת שינויים ב-XSL (XSLT) על מסמכי XML. ניתן להשתמש בו כדי לחלץ בקלות את קטעי הנתונים הרצויים מרשומת XML או מעדכון שמוחזרו על ידי ממשקי API של נתונים של Google, או כדי ליצור ערכים חדשים או מעודכנים.
סיכום
כפי שאפשר לראות, ניתן להשתמש ב-cURL ובמספר כלי שורת פקודה נוספים כדי לקיים אינטראקציה בקלות עם שירותי הנתונים של Google, באמצעות XML ו-HTTP גולמי. אם יש לך שאלות לגבי השימוש בכלים האלה בשילוב עם Google Data API המועדף עליך, אנחנו מזמינים אותך להצטרף לפורומים הספציפיים ל-API.