คําเตือน: หน้านี้เกี่ยวกับ API แบบเก่าของ Google ซึ่งก็คือ Google Data API โดยเกี่ยวข้องกับ API ที่แสดงอยู่ในไดเรกทอรี Google Data API เท่านั้น โดยหลาย API ถูกแทนที่ด้วย API ที่ใหม่กว่า สําหรับข้อมูลเกี่ยวกับ API ใหม่โดยเฉพาะ โปรดดูเอกสารประกอบของ API ใหม่ ดูข้อมูลเกี่ยวกับการให้สิทธิ์คําขอด้วย API ใหม่ได้ที่การตรวจสอบสิทธิ์และการให้สิทธิ์บัญชี Google
Ryan Boyd จากทีม Google Data APIกันยายน 2007
- บทนำ
- การรับและติดตั้ง cURL
- การตรวจสอบสิทธิ์กับบริการข้อมูลของ Google
- การเรียกดูฟีดและรายการ
- การอัปเดตรายการ
- การสร้างรายการ
- การลบรายการ
- การอัปโหลดออบเจ็กต์สื่อ
- เครื่องมือบรรทัดคําสั่งอื่นๆ
- สรุป
บทนำ
โดย Google Data API จะใช้ฟีดและรายการ Atom เป็นรูปแบบข้อมูล และ HTTP เป็นโปรโตคอลสําหรับการส่งข้อมูล โดยขยาย Atom Publishing Protocol เราเผยแพร่ไลบรารีของไคลเอ็นต์จํานวนหนึ่งเพื่อให้การโต้ตอบกับ Google Data API ง่ายขึ้น อย่างไรก็ตาม เรายินดีต้อนรับให้คุณใช้เครื่องมือในระดับที่ต่ํากว่าเพื่อใช้บริการของเราอยู่เสมอ และง่ายต่อการให้คําแนะนําเล็กๆ น้อยๆ
cURL เป็นแอปพลิเคชันบรรทัดคําสั่งสําหรับดําเนินการคําขอโดยใช้โปรโตคอลที่หลากหลาย ซึ่งรวมถึง HTTP นอกจากนี้ นักพัฒนาซอฟต์แวร์มักใช้ cURL เพื่อทดสอบบริการข้อมูลของ Google เนื่องจากโซลูชันนี้รองรับฟังก์ชันการทํางานของ HTTP ที่จําเป็นในการโต้ตอบกับ API ที่ระดับต่ํา
cURL ให้การสนับสนุนเพื่อดําเนินการสื่อสาร HTTP เท่านั้น ดังนั้นความรู้เกี่ยวกับโปรโตคอลข้อมูลของ Google, โปรโตคอลเฉพาะสําหรับบริการ และรูปแบบข้อมูล XML ที่ใช้จึงเป็นข้อกําหนดเบื้องต้นในการทํางานกับแอปพลิเคชัน เครื่องมือบางอย่างกล่าวถึงในบทความนี้เพื่อการทํางานเหล่านี้ได้ง่ายขึ้น
บทความนี้ใช้ตัวอย่างจาก API ข้อมูล Picasa Web Albums อย่างไรก็ตาม ตัวอย่างเหล่านี้สามารถนําไปใช้กับ Google Data API อื่นๆ
การรับและติดตั้ง 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 API จะจัดการชื่อผู้ใช้และรหัสผ่านของผู้ใช้โดยตรง
คําขอการตรวจสอบสิทธิ์สําหรับ 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 ข้อมูลของ Picasa Web Albums ชื่อบริการ (service
) คือ lh2
ดูชื่อบริการสําหรับบริการอื่นๆ ของ Google ได้ในหน้าคําถามที่พบบ่อยเกี่ยวกับ Google Data API
ค่าของโทเค็น 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"
หมายเหตุ: วิธีการใช้อักขระหลีกกับบรรทัดใหม่ที่มีอักขระแบ็กสแลช ('\") ข้างต้นใช้ไม่ได้กับ Shell ของ Windows ดังนั้นคุณต้องป้อนคําสั่งทั้งหมดในบรรทัดเดียวหากคุณใช้ curl
ใน Windows
การเรียกดูฟีดและรายการ
ใน Google Data API การเรียกฟีดและรายการจะดําเนินการโดยใช้ HTTP GET
ใน URL โดยมีชุดพารามิเตอร์การค้นหาที่ไม่บังคับ เนื่องจากเรากําลังดําเนินการคําขอ GET
คุณจึงต้องส่งเฉพาะส่วนหัวการตรวจสอบสิทธิ์และ URL ไปยัง curl
ตัวอย่างด้านล่างจะใช้ API ข้อมูล Picasa Web Albums ต่อไป และใช้เพื่อเรียกรายการอัลบั้มของผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์ โปรดทราบว่าเราได้ย่อโทเค็นการตรวจสอบสิทธิ์เป็น ABCDEFG
ในตัวอย่างนี้แล้ว แต่ควรใช้โทเค็นแบบเต็ม (เช่น EUBBIacA
...32JKOuGh
จากด้านบน) แทน
curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/default"
วิธีนี้จะแสดง BLOB ในรูปแบบที่ไม่ได้จัดรูปแบบ:
<?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>
มีเครื่องมือบางอย่างที่เหมาะสําหรับการจัดรูปแบบเอาต์พุตนี้เพื่อให้อ่านได้ง่ายขึ้น รวมถึงเป็นระเบียบ วิธีที่ง่ายที่สุดในการจัดระเบียบคือการวางเอาต์พุตจากคําสั่ง 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>
คุณเรียกข้อมูลแต่ละรายการได้ด้วยวิธีเดียวกันโดยระบุ URL ของรายการแทน URL ฟีด
กําลังอัปเดตรายการ
ระบบจะอัปเดตรายการข้อมูลใน Google Data API โดยทํา HTTP PUT
ให้กับ URL การแก้ไขด้วยสําเนาใหม่ของ XML ของรายการในส่วนเนื้อหาของคําขอ
- เรียกดูรายการโดยใช้ค่า URL
atom:link/@rel='self'
- อัปเดตรายการในเครื่องเพื่อทําการเปลี่ยนแปลงที่จําเป็น
PUT
รายการกลับไปที่เซิร์ฟเวอร์ โดยใช้ค่า URLatom:link/@rel='edit'
1. กําลังเรียกดูรายการ
ทั้งนี้ ระบบจะเรียกรายการได้โดยใช้ URL 1 ใน 2 รายการที่เป็นตัวหนาในบล็อกฟีดด้านบน 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
การแก้ไข 1 รายการโดยใช้มือ tidy
มักจะช่วยให้ทํางานกับ XML ได้ง่ายขึ้น
หมายเหตุ: อย่าลืมรวมคําจํากัดความเนมสเปซ XML ทั้งหมดที่ใช้เป็นแอตทริบิวต์ไปยัง atom:entry
เมื่อคุณโพสต์รายการใหม่ การไม่ใส่คํานี้อาจทําให้เกิดข้อยกเว้นการแยกวิเคราะห์ นอกจากนี้ tidy
จะแทนที่ช่องว่างระหว่างการกําหนดเนมสเปซด้วยอักขระขึ้นบรรทัดใหม่ แม้ว่าจะเป็น XML ที่ถูกต้อง แต่บริการข้อมูลของ Google ไม่ยอมรับในขณะนี้ หากคุณใช้ tidy
โปรดเพิ่มช่องว่างระหว่างแอตทริบิวต์เหล่านี้ในองค์ประกอบ entry
3. กําลังอัปเดตรายการในเซิร์ฟเวอร์
เมื่อใช้ URL edit
คุณต้องPUT
สําเนาของรายการบริการโดยใช้ cURL ต้องเพิ่มส่วนหัวเพื่อระบุประเภทเนื้อหาที่ส่งไปยังเซิร์ฟเวอร์ ข้อมูลโค้ดต่อไปนี้จะถือว่าไฟล์ซึ่งมีรายการที่อัปเดตแล้วได้รับการบันทึกไว้ใน updated_enter.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 API โดยใช้ 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. เรียกข้อมูลรายการเทมเพลต
การดึงข้อมูล 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 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 DELETE
แทน HTTP PUT
และไม่จําเป็นต้องส่งข้อมูลใดๆ เช่นเดียวกับ URL อัปเดต ระบบจะใช้ 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 ข้อมูล Picasa Web Albums และ API ข้อมูลรายการเอกสารคือความสามารถในการอัปโหลดออบเจ็กต์ไบนารีได้ ซึ่ง cURL จะสามารถอัปโหลดข้อมูลไบนารีและส่วนหัวทารุณได้อย่างง่ายดาย อย่างไรก็ตาม ปัจจุบัน API ข้อมูลรายการเอกสารจําเป็นต้องมีการโพสต์ XML พร้อมกับข้อมูลไบนารีเป็นข้อความหลายส่วนของ MIME การสร้างข้อความแบบหลายส่วนนั้นอยู่นอกเหนือขอบเขตของบทความนี้
ตัวอย่างด้านล่างแสดงวิธีอัปโหลดรูปภาพชื่อ sweeping_the_rock.png
ไปยัง Picasa Web Album ที่มีชื่อว่า "การกวาดหิน"
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 ใช้สําหรับสร้างการเชื่อมต่อแบบ Socket ดิบ (ข้อความธรรมดาและ SSL ตามลําดับ) ไปยังเว็บเซิร์ฟเวอร์และใช้โต้ตอบกับบริการข้อมูลของ Google ได้ โปรดทราบว่าบริการข้อมูล Google บางอย่างอาจไม่รองรับ SSL วิธีเปิดการเชื่อมต่อมีดังนี้
telnet picasaweb.google.com 80
(API ข้อมูล Picasa Web Albums)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
รายการใหม่ใน Picasa Web Albumswget --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"
- IdPtproc เป็นเครื่องมือเพื่อใช้การเปลี่ยนรูปแบบ XSL (XSLT) กับเอกสาร XML ซึ่งสามารถใช้เพื่อดึงข้อมูลที่ต้องการได้อย่างง่ายดายจากรายการ XML หรือฟีดที่ Google Data API แสดงผล หรือเพื่อสร้างรายการใหม่หรือที่อัปเดต
บทสรุป
ดังที่คุณได้ทราบมาว่า คุณสามารถใช้ cURL และเครื่องมือบรรทัดคําสั่งอื่นๆ อีกมากมายเพื่อโต้ตอบกับบริการข้อมูลของ Google ได้ง่ายๆ โดยใช้ XML และ HTTP ดิบ โปรดเข้าร่วมฟอรัมเฉพาะสําหรับ API ของเรา หากคุณมีคําถามเกี่ยวกับการใช้เครื่องมือเหล่านี้กับ Google Data API โปรดของคุณ