เอกสารนี้อธิบายวิธีใช้ไลบรารีของไคลเอ็นต์ .NET เพื่อส่งคำค้นหา Google Data API ("GData") และตีความการตอบกลับที่ส่งคืน
Google มีชุดไลบรารีของไคลเอ็นต์สำหรับการโต้ตอบกับบริการที่เปิดใช้ GData ในภาษาโปรแกรมต่างๆ เมื่อใช้ไลบรารีเหล่านี้ คุณจะสร้างคำขอ GData ส่งไปยังบริการ และรับการตอบกลับได้
เอกสารนี้มีชุดตัวอย่างการใช้งานทั่วไปของไลบรารีของไคลเอ็นต์เวอร์ชัน C# ตามด้วยข้อมูลอื่นๆ เกี่ยวกับการเขียนไคลเอ็นต์ GData ที่ส่วนท้ายของเอกสารนี้มีลิงก์ไปยังเอกสารอ้างอิงสำหรับไลบรารีไคลเอ็นต์ C# ในรูปแบบ NDoc
หากต้องการใช้ไลบรารีไคลเอ็นต์นี้ คุณต้องมีรันไทม์ .NET 1.1 และคุณ ควรใช้แพตช์ล่าสุดทั้งหมดด้วย
ดาวน์โหลดไลบรารีของไคลเอ็นต์ .NET
ตัวอย่างในคู่มือนี้อ้างอิงถึง Google Calendar API แต่คู่มือนี้ไม่ใช่คู่มือที่ถูกต้องหรือเป็นข้อมูลล่าสุดสำหรับการใช้ Calendar API ดูข้อมูลเกี่ยวกับการใช้ไลบรารีของไคลเอ็นต์ .NET กับ Data API ของบริการที่เฉพาะเจาะจงได้ในเอกสารประกอบของบริการนั้นๆ เช่น หากคุณทำงานกับปฏิทิน โปรดอ่านคู่มือสำหรับนักพัฒนาซอฟต์แวร์ Data API ของปฏิทิน
เนื้อหา
ผู้ชม
เอกสารนี้มีไว้สำหรับโปรแกรมเมอร์ C# ที่ต้องการเขียนแอปพลิเคชันไคลเอ็นต์ที่โต้ตอบกับบริการ GData ได้
เอกสารนี้ถือว่าคุณเข้าใจแนวคิดทั่วไปเบื้องหลังโปรโตคอล Google Data APIs และจะถือว่าคุณรู้วิธีการเขียนโปรแกรมใน C#
ภาพรวมโมเดลข้อมูล
ไลบรารีของไคลเอ็นต์ C# มีชุดคลาสที่สอดคล้องกับองค์ประกอบและประเภทข้อมูลที่ Google Data API ใช้ เช่น มีคลาสฟีดที่สอดคล้องกับองค์ประกอบ <atom:feed>
ซึ่งมีเมธอดสำหรับการสร้างรายการ การรับและการตั้งค่าขององค์ประกอบย่อยต่างๆ และอื่นๆ นอกจากนี้ยังมีคลาส Entry ซึ่งสอดคล้องกับองค์ประกอบ <atom:entry>
องค์ประกอบบางอย่างที่กำหนดไว้ใน Google Data API ไม่มีคลาสของตัวเอง โปรดดูรายละเอียดในเอกสารอ้างอิง
ไลบรารีจะแยกวิเคราะห์เนื้อหา Atom โดยอัตโนมัติและใส่ค่าขององค์ประกอบ Atom ลงในออบเจ็กต์ที่เหมาะสม ตัวอย่างเช่น เมธอด getFeed
จะรับฟีด แยกวิเคราะห์ และแสดงผลออบเจ็กต์ฟีดที่มีค่าผลลัพธ์
หากต้องการส่งฟีดหรือรายการไปยังบริการ คุณต้องสร้างออบเจ็กต์ฟีดหรือรายการ จากนั้นเรียกใช้เมธอดไลบรารี (เช่น เมธอด insert
) เพื่อแปลออบเจ็กต์เป็น XML โดยอัตโนมัติแล้วส่ง
คุณจะแยกวิเคราะห์และ/หรือสร้าง XML เองก็ได้หากต้องการ วิธีที่ง่ายที่สุดในการทำเช่นนั้นคือการใช้ไลบรารีของบุคคลที่สามที่เหมาะสม
เช่นเดียวกับที่ไวยากรณ์ XML ของ Google Data API ขยายได้ โมเดลออบเจ็กต์ที่เกี่ยวข้องก็ขยายได้เช่นกัน ตัวอย่างเช่น ไลบรารีของไคลเอ็นต์มีคลาสที่สอดคล้องกับองค์ประกอบที่กำหนดไว้ในเนมสเปซของ Google Data
บทแนะนำและตัวอย่าง
ตัวอย่างต่อไปนี้แสดงวิธีส่งคำขอ GData ต่างๆ โดยใช้ไลบรารีไคลเอ็นต์ C#
ตัวอย่างเหล่านี้แสดงวิธีโต้ตอบกับบริการหนึ่งๆ อย่าง Google ปฏิทิน เพื่อให้เห็นภาพได้ชัดเจนยิ่งขึ้น เราจะระบุจุดที่ปฏิทินแตกต่างจากบริการอื่นๆ ของ Google เพื่อช่วยให้คุณปรับตัวอย่างเหล่านี้ไปใช้กับบริการอื่นๆ ได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับปฏิทินได้ในเอกสารประกอบของ Google Calendar Data API
การสร้างและเรียกใช้ไคลเอ็นต์
หากต้องการคอมไพล์ตัวอย่างในเอกสารนี้ คุณจะต้องใช้คำสั่ง using ต่อไปนี้
using Google.GData.Client;
การขอฟีด
ตามที่อธิบายไว้ในเอกสารประกอบของ Google Calendar Data API คุณสามารถขอฟีดปฏิทินได้โดยการส่งคำขอ HTTP ต่อไปนี้ไปยังปฏิทิน
GET http://www.google.com/calendar/feeds/userID/private/full
แน่นอนว่าคุณต้องแทนที่ userID
ด้วยอีเมลของผู้ใช้ โปรดดูรายละเอียดในเอกสารปฏิทิน แต่คุณสามารถใช้ URL เริ่มต้นพิเศษเพื่อโต้ตอบกับปฏิทินได้ (ตามที่อธิบายไว้ในเอกสารปฏิทิน) แต่ในเอกสารนี้เราจะใช้ URL ฟีดแบบเต็มส่วนตัวซึ่งมีรหัสผู้ใช้
นอกจากนี้ คุณยังต้องระบุการตรวจสอบสิทธิ์ที่เหมาะสมด้วย โปรดทราบว่าระบบการตรวจสอบสิทธิ์ที่เราใช้ที่นี่ (เรียกว่า "การตรวจสอบสิทธิ์ของ Google สำหรับแอปพลิเคชันที่ติดตั้ง") เหมาะสำหรับการใช้ในแอปพลิเคชันไคลเอ็นต์ที่ติดตั้งเท่านั้น เช่น ไคลเอ็นต์บนเดสก์ท็อป ไม่เหมาะสำหรับการใช้ในเว็บแอปพลิเคชัน ดูข้อมูลเพิ่มเติมเกี่ยวกับการตรวจสอบสิทธิ์ได้ที่เอกสารประกอบการตรวจสอบสิทธิ์บัญชี Google
หากต้องการขอฟีดปฏิทินโดยใช้ไลบรารีไคลเอ็นต์ C# สำหรับผู้ใช้ที่มีอีเมล "jo@gmail.com" และรหัสผ่าน "mypassword" ให้ใช้โค้ดต่อไปนี้
// Create a query and service object: FeedQuery query = new FeedQuery(); Service service = new Service("cl", "exampleCo-exampleApp-1")); // Set your credentials: service.setUserCredentials("jo@gmail.com", "mypassword"); // Create the query object: query.Uri = new Uri("http://www.google.com/calendar/feeds/jo@gmail.com/private/full"); // Tell the service to query: AtomFeed calFeed = service.Query(query);
คลาส Service
แสดงการเชื่อมต่อไคลเอ็นต์ (พร้อมการตรวจสอบสิทธิ์) กับบริการ GData ขั้นตอนทั่วไปในการส่งคําค้นหาไปยังบริการโดยใช้ไลบรารีของไคลเอ็นต์มีดังนี้
- รับหรือสร้าง URL ที่เหมาะสม
- หากคุณส่งข้อมูลไปยังบริการ (เช่น หากคุณแทรกรายการใหม่) ให้แปลงข้อมูลดิบเป็นออบเจ็กต์โดยใช้คลาสไลบรารีของไคลเอ็นต์ (ขั้นตอนนี้ไม่เกี่ยวข้องหากคุณเพียงขอฟีด ดังที่เราทำในตัวอย่างนี้)
- สร้าง
Service
อินสแตนซ์ใหม่ โดยตั้งชื่อบริการ (เช่น"cl"
สำหรับปฏิทิน) และชื่อแอปพลิเคชัน (ในรูปแบบcompanyName-applicationName-versionID
) - ตั้งค่าข้อมูลเข้าสู่ระบบที่เหมาะสม
- เรียกใช้เมธอดเพื่อส่งคำขอและรับผลลัพธ์
เมธอด service.setUserCredentials
จะตั้งค่าพร็อพเพอร์ตี้ service.Credentials
ด้วยออบเจ็กต์ข้อมูลเข้าสู่ระบบเครือข่าย .NET มาตรฐาน
ระบบจะตั้งค่าข้อมูลเข้าสู่ระบบเป็นรหัสและรหัสผ่านของผู้ใช้ที่ไคลเอ็นต์ของคุณส่งคำค้นหาในนามของผู้ใช้ ตัวอย่างในเอกสารนี้ใช้ระบบการตรวจสอบสิทธิ์ "การตรวจสอบสิทธิ์สำหรับแอปพลิเคชันที่ติดตั้ง" ดูข้อมูลเพิ่มเติมเกี่ยวกับระบบการตรวจสอบสิทธิ์อื่นๆ ได้ในเอกสารประกอบการตรวจสอบสิทธิ์บัญชี Google
หากต้องการขอฟีดทั้งหมด ให้เรียกใช้เมธอด service.Query
ซึ่งรับออบเจ็กต์ FeedQuery
และแสดงผลฟีดทั้งหมดที่พบใน URL นั้น เราจะแสดงวิธีส่งคำค้นหาที่เฉพาะเจาะจงมากขึ้นในภายหลังในเอกสารนี้
เช่นเดียวกับเมธอดอื่นๆ ของคลาส Service
Query
จะจัดการการตรวจสอบสิทธิ์และการเปลี่ยนเส้นทางตามความจำเป็น
การแทรกรายการใหม่
หากต้องการแทรกรายการลงในฟีดปฏิทิน คุณอาจใช้โค้ดต่อไปนี้
AtomEntry entry = new AtomEntry(); AtomPerson author = new AtomPerson(AtomPersonType.Author); author.Name = "Jo March"; author.Email = "jo@gmail.com"; entry.Authors.Add(author); entry.Title.Text = "Tennis with Beth"; entry.Content.Content = "Meet for a quick lesson."; Uri postUri = new Uri("http://www.google.com/calendar/feeds/jo@gmail.com/private/full"); // Send the request and receive the response: AtomEntry insertedEntry = service.Insert(postUri, entry);
หลังจากตั้งค่า URL แล้ว เราจะสร้างออบเจ็กต์ AtomEntry
ชื่อรายการคือ AtomTextConstruct
ซึ่งเป็นคลาสที่เก็บข้อความในรูปแบบต่างๆ (ข้อความธรรมดา, HTML หรือ XHTML) เนื้อหาของรายการจะแสดงด้วยAtomContent
ออบเจ็กต์ ซึ่งเป็นคลาสที่สามารถเก็บข้อความธรรมดาหรือเนื้อหารูปแบบอื่นๆ รวมถึง XML และข้อมูลไบนารี
ผู้เขียนแต่ละคนจะแสดงเป็นชื่อ, URI และอีเมล (ในตัวอย่างนี้ เราจะเว้น URI ไว้) คุณเพิ่มผู้เขียนในรายการได้โดยเพิ่มออบเจ็กต์ AtomAuthor
ลงในคอลเล็กชัน Authors
ของรายการ
เราใช้Service
ออบเจ็กต์เดียวกันกับที่สร้างในตัวอย่างก่อนหน้า ในกรณีนี้ เมธอดที่จะเรียกใช้คือ Insert
ซึ่งจะส่งรายการไปยัง URL การแทรกที่ระบุ
บริการจะแสดงรายการที่สร้างขึ้นใหม่ ซึ่งอาจมีองค์ประกอบเพิ่มเติมที่เซิร์ฟเวอร์สร้างขึ้น เช่น URL การแก้ไขสำหรับรายการ
โค้ดข้างต้นเทียบเท่ากับการส่ง POST http://www.google.com/calendar/feeds/jo@gmail.com/private/full
(พร้อมการตรวจสอบสิทธิ์ที่เหมาะสม) และการระบุรายการ
ขอรายการที่เฉพาะเจาะจง
โค้ดต่อไปนี้ช่วยให้คุณขอรายการที่เฉพาะเจาะจงซึ่งคุณแทรกในตัวอย่างก่อนหน้าได้
ในบริบทของชุดตัวอย่างนี้ การดึงข้อมูลรายการนั้นไม่จำเป็นจริงๆ เนื่องจากปฏิทินได้ส่งคืนรายการที่แทรกแล้ว แต่คุณสามารถใช้เทคนิคเดียวกันนี้ได้ทุกเมื่อที่ทราบ URL ของรายการ
FeedQuery singleQuery = new FeedQuery(); singleQuery.Uri = new Uri(newEntry.SelfUri.ToString()); AtomFeed newFeed = service.Query(singleQuery); AtomEntry retrievedEntry = newFeed.Entries[0];
รายการที่แทรกมีพร็อพเพอร์ตี้ SelfUri
ซึ่งแสดงผลออบเจ็กต์ AtomUri
ที่ใช้เมธอด ToString()
เพื่อสร้างออบเจ็กต์ URI ใหม่ได้
จากนั้นเราก็เพียงแค่เรียกใช้เมธอด Query
ของบริการเพื่อรับออบเจ็กต์ AtomFeed ใหม่ โดยมีเพียง 1 รายการในคอลเล็กชัน Entries
โค้ดข้างต้นเทียบเท่ากับการส่ง GET http://www.google.com/calendar/feeds/jo@gmail.com/private/full/entryID
ไปยังปฏิทินโดยมีการตรวจสอบสิทธิ์ที่เหมาะสม
ค้นหารายการ
หากต้องการดึงข้อมูลรายการแรกที่ตรงกันในการค้นหาแบบข้อความเต็ม ให้ใช้โค้ดต่อไปนี้
FeedQuery myQuery = new Query(feedUrl); myQuery.Query = "Tennis"; AtomFeed myResultsFeed = myService.Query(myQuery); if (myResultsFeed.Entries.Count > 0) { AtomEntry firstMatchEntry = myResultsFeed.Entries[0]; String myEntryTitle = firstMatchEntry.Title.Text; }
ตัวอย่างนี้เริ่มต้นด้วยการสร้างออบเจ็กต์ FeedQuery
ซึ่งส่วนใหญ่ประกอบด้วย URL และพารามิเตอร์การค้นหาที่เชื่อมโยง พารามิเตอร์การค้นหา GData มาตรฐานแต่ละรายการมีพร็อพเพอร์ตี้
หลังจากสร้าง FeedQuery
แล้ว เราจะส่งไปยังเมธอด Query
ของบริการ ซึ่งจะแสดงผลฟีดที่มีผลการค้นหา อีกวิธีหนึ่งคือการสร้าง URL ด้วยตนเอง (โดยการเพิ่มพารามิเตอร์การค้นหาต่อท้าย URL ฟีด) แล้วเรียกใช้เมธอด Query
แต่เมธอด FeedQuery
จะมีเลเยอร์การแยกข้อมูลที่เป็นประโยชน์เพื่อให้คุณไม่ต้องสร้าง URL ด้วยตนเอง
Entries
คอลเล็กชันของฟีดจะแสดงรายการของรายการในฟีด ส่วน Entries.Count
จะแสดงจำนวนรายการในฟีด
ในกรณีนี้ หากการค้นหาแสดงผลลัพธ์ เราจะกำหนดผลลัพธ์แรกที่ตรงกันให้กับออบเจ็กต์ AtomEntry
จากนั้นเราจะใช้พร็อพเพอร์ตี้ Title
ของคลาส AtomEntry
เพื่อดึงชื่อของรายการ
โค้ดข้างต้นเทียบเท่ากับการส่ง GET http://www.google.com/calendar/feeds/jo@gmail.com/private/full?q=Tennis
ไปยังปฏิทิน
การค้นหาตามหมวดหมู่
หมายเหตุ: Google ปฏิทินไม่ได้เชื่อมโยงป้ายกำกับกับกิจกรรม ดังนั้นตัวอย่างนี้จึงใช้กับปฏิทินไม่ได้
หากต้องการดึงข้อมูลฟีดที่มีรายการทั้งหมดที่ตรงกับการค้นหาแบบเต็มข้อความก่อนหน้านี้ และอยู่ในหมวดหมู่ใดหมวดหมู่หนึ่งหรือมีป้ายกำกับใดป้ายกำกับหนึ่ง ให้ใช้โค้ดต่อไปนี้
AtomCategory myCategory = new AtomCategory("by_jo"); QueryCategory myCategoryFilter = new QueryCategory(myCategory); myQuery.Categories.Add(myCategoryFilter); AtomFeed myCategoryResultsFeed = myService.Query(myQuery);
แน่นอนว่าคลาส AtomCategory
จะแสดงหมวดหมู่ที่จะใช้ในตัวกรองหมวดหมู่ QueryCategory
คลาสอาจมีหลายหมวดหมู่ แต่ในกรณีนี้เราจะสร้างตัวกรองที่มีเพียงหมวดหมู่เดียว
จากนั้นเราจะเพิ่มตัวกรองนั้นลงในคำค้นหาที่มีอยู่ ซึ่งยังคงมีสตริงคำค้นหาแบบข้อความแบบเต็มจากตัวอย่างก่อนหน้า
เราจะใช้วิธี Query
อีกครั้งเพื่อส่งคำค้นหาไปยังบริการ
หากปฏิทินอนุญาตให้ค้นหาหมวดหมู่ โค้ดด้านบนจะเทียบเท่ากับการส่ง GET http://www.google.com/calendar/feeds/jo@gmail.com/private/full/-/by_jo?q=Tennis
ไปยังปฏิทิน
การอัปเดตรายการ
หากต้องการอัปเดตสินค้าที่มีอยู่ ให้ใช้โค้ดต่อไปนี้ ในตัวอย่างต่อไปนี้ เราจะเปลี่ยนชื่อรายการที่ดึงข้อมูลก่อนหน้านี้จากข้อความเก่า ("เทนนิสกับเบธ") เป็น "การประชุมสำคัญ"
retrievedEntry.Title.Text = "Important meeting"; retrievedEntry.Update();
ก่อนอื่นเราจะตั้งชื่อใหม่ให้กับรายการที่เราดึงข้อมูลมาเมื่อก่อนหน้านี้ จากนั้นเราก็เรียกใช้เมธอด Upate
เพื่อส่งรายการที่อัปเดตไปยังบริการ
บริการจะแสดงรายการที่อัปเดตแล้ว รวมถึง URL ใหม่สำหรับเวอร์ชันใหม่ของรายการนี้ (ดูข้อมูลเพิ่มเติมเกี่ยวกับเวอร์ชันของรายการได้ที่ส่วนการทำงานพร้อมกันแบบมองโลกในแง่ดีของ เอกสารอ้างอิงโปรโตคอล v1)
รหัสด้านบนเทียบเท่ากับการส่ง PUT http://www.google.com/calendar/feeds/jo@gmail.com/private/full/entryID
ไปยังบริการ พร้อมกับรายการใหม่ (ในรูปแบบ Atom) เพื่อแทนที่รายการเดิม
การลบรายการ
หากต้องการลบรายการที่มีอยู่ ให้ใช้โค้ดต่อไปนี้
updateEntry.Delete();
URL ที่ใช้สำหรับการลบจะเหมือนกับ URL การแก้ไข ดังนั้นตัวอย่างนี้จึงคล้ายกับตัวอย่างก่อนหน้ามาก ยกเว้นว่าเราเรียกใช้เมธอด Delete
แทน Update
โค้ดข้างต้นเทียบเท่ากับการส่ง DELETE http://www.google.com/calendar/feeds/jo@gmail.com/private/full/entryID
ไปยังบริการ
การทำงานกับฟีด Google ปฏิทิน
ตัวอย่างข้างต้นแสดงวิธีใช้ Google Data C# API เพื่อทำงานกับฟีด GData ทั่วไป อย่างไรก็ตาม เมื่อคุณทำงานกับฟีด Google ปฏิทินโดยเฉพาะ ฟีดจะมีข้อมูลเฉพาะของปฏิทินจำนวนมากซึ่งเข้าถึงได้ยากโดยใช้ออบเจ็กต์มาตรฐานที่มุ่งเน้น Atom ในไลบรารี API ฐาน เรามีส่วนขยายต่อไปนี้เพื่อช่วยให้คุณโต้ตอบกับฟีดเหล่านั้นได้
using Google.GData.Extensions; using Google.GData.Calendar;
เนมสเปซของส่วนขยายจะจัดการกับส่วนขยายโดยทั่วไป ส่วนเนมสเปซของปฏิทินจะให้สิทธิ์เข้าถึงบริการปฏิทิน ฟีด และออบเจ็กต์การค้นหาที่ปรับแต่งแล้ว คุณดูตัวอย่างที่ซับซ้อนมากขึ้นเกี่ยวกับวิธีใช้ส่วนขยายเหล่านั้นได้ในไดเรกทอรีย่อย /Samples ของการติดตั้ง C# API ระบบจะเพิ่มออบเจ็กต์ต่อไปนี้
- EventQuery
- คลาสย่อยของ FeedQuery ซึ่งช่วยให้คุณตั้งค่าพารามิเตอร์ที่กำหนดเอง 2 รายการสำหรับบริการปฏิทิน (start-min และ start-max) ได้
- CalendarService
- คลาสย่อยของบริการที่สามารถแสดงผลฟีดกิจกรรม
- EventFeed
- คลาสย่อยของ AtomFeed ที่แสดง EventEntry
- EventEntry
- คลาสย่อยของ AtomEntry ซึ่งมีพร็อพเพอร์ตี้เพิ่มเติมที่เกี่ยวข้องกับข้อมูลปฏิทิน
ดูรายละเอียดเพิ่มเติมเกี่ยวกับคลาสพิเศษเหล่านั้นได้ในเอกสารประกอบเกี่ยวกับ API และโปรแกรมตัวอย่าง
ข้อมูลอ้างอิง
ดูข้อมูลอ้างอิงเกี่ยวกับไลบรารีไคลเอ็นต์ C# ได้ที่เอกสารอ้างอิง