คำเตือน: หน้านี้เป็นข้อมูลเกี่ยวกับ Google Data API ซึ่งเป็น API รุ่นเก่าของ Google โดยเกี่ยวข้องกับ API ที่แสดงอยู่ในไดเรกทอรี Google Data API เท่านั้น ซึ่ง API หลายรายการถูกแทนที่ด้วย API รุ่นใหม่กว่าแล้ว ดูข้อมูลเกี่ยวกับ API ใหม่ที่เฉพาะเจาะจงได้ในเอกสารประกอบของ API ใหม่ ดูข้อมูลเกี่ยวกับการให้สิทธิ์คำขอด้วย API เวอร์ชันใหม่กว่าได้ที่การตรวจสอบสิทธิ์และการให้สิทธิ์บัญชี Google
Ryan Boyd, ทีม Google Data APIsกันยายน 2007
- บทนำ
- การขอรับและติดตั้ง cURL
- การตรวจสอบสิทธิ์กับบริการข้อมูลของ Google
- การดึงข้อมูลฟีดและรายการ
- การอัปเดตรายการ
- การสร้างรายการ
- การลบรายการ
- การอัปโหลดออบเจ็กต์สื่อ
- เครื่องมือบรรทัดคำสั่งอื่นๆ
- สรุป
บทนำ
โดยพื้นฐานแล้ว Google Data API จะใช้ฟีดและรายการ Atom (XML) เป็นรูปแบบข้อมูล และ HTTP เป็นโปรโตคอลสำหรับการส่งข้อมูล ซึ่งเป็นการขยายโปรโตคอลการเผยแพร่ Atom เราเผยแพร่ไลบรารีของไคลเอ็นต์จำนวนมากเพื่อให้การโต้ตอบกับ Google Data API ง่ายขึ้น อย่างไรก็ตาม คุณสามารถใช้เครื่องมือระดับล่างเพื่อทำงานกับบริการของเราได้ทุกเมื่อ และการทำเช่นนี้ก็ค่อนข้างง่ายหากมีคำแนะนำเล็กๆ น้อยๆ
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 Data Service
คำขอข้อมูล 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 เพื่อดูข้อมูลเฉพาะเกี่ยวกับพารามิเตอร์ที่ใช้ในคำขอข้างต้น ในตัวอย่างนี้ บริการที่เราใช้คือ 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
จึงจำเป็นต้องส่งเฉพาะส่วนหัวการให้สิทธิ์และ URL ไปยัง curl
ตัวอย่างด้านล่างจะใช้ 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 API ทำได้โดยการ HTTP PUT
ไปยัง URL การแก้ไขพร้อมสำเนา XML ใหม่ของรายการในเนื้อหาของคำขอ
- เรียกข้อมูลรายการโดยใช้
atom:link/@rel='self'
ค่า URL - อัปเดตรายการในเครื่องเพื่อทำการเปลี่ยนแปลงที่จำเป็น
PUT
รายการกลับไปยังเซิร์ฟเวอร์โดยใช้ค่าatom:link/@rel='edit'
URL
1. การเรียกข้อมูลรายการ
คุณดึงข้อมูลรายการได้โดยใช้ URL ใด 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. อัปเดตรายการในเซิร์ฟเวอร์
เมื่อใช้ edit
URL คุณจะต้อง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. แก้ไขรายการเทมเพลต
เราต้องการสร้างอัลบั้มชื่อ "เคอร์ลิงในแคนาดา" โดยใช้รูปภาพจากการแข่งขันเคอร์ลิงล่าสุด ข้อมูล 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 ช่วยให้อัปโหลดข้อมูลไบนารีและส่วนหัวของ Slug ได้อย่างง่ายดาย อย่างไรก็ตาม ปัจจุบัน Documents List Data API กำหนดให้โพสต์ XML พร้อมกับข้อมูลไบนารีเป็นข้อความ MIME แบบหลายส่วน การสร้างข้อความแบบหลายส่วนอยู่นอกเหนือขอบเขตของบทความนี้
ตัวอย่างด้านล่างแสดงวิธีอัปโหลดรูปภาพชื่อ sweeping_the_rock.png
ไปยัง Picasa Web Album ที่มีชื่อว่า "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 ได้ โปรดทราบว่าบริการข้อมูลของ 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
รายการอัลบั้มใหม่ไปยัง Picasa Web Albums มีดังนี้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 API แสดงผล หรือเพื่อสร้างหรืออัปเดตรายการใหม่ได้อย่างง่ายดาย
บทสรุป
ดังที่ได้เห็นไปแล้ว คุณสามารถใช้ cURL และเครื่องมือบรรทัดคำสั่งอื่นๆ อีกหลายอย่างเพื่อโต้ตอบกับบริการข้อมูลของ Google ได้อย่างง่ายดายโดยใช้ XML และ HTTP แบบดิบ โปรดเข้าร่วมฟอรัมเฉพาะ API หากมีคำถามเกี่ยวกับการใช้เครื่องมือเหล่านี้กับ Google Data API ที่คุณชื่นชอบ