สำคัญ: เอกสารนี้เขียนก่อนปี 2012 ตัวเลือกการตรวจสอบสิทธิ์ ดังที่อธิบายไว้ในเอกสารนี้ (OAuth 1.0, AuthSub และ ClientLogin) ได้รับการ เลิกใช้งานแล้วอย่างเป็นทางการ ตั้งแต่วันที่ 20 เมษายน 2012 และไม่สามารถใช้ได้อีกต่อไป เราขอแนะนำให้คุณย้ายข้อมูลไปยัง OAuth 2.0 โดยเร็วที่สุด
Google Sites Data API ช่วยให้แอปพลิเคชันไคลเอ็นต์เข้าถึง เผยแพร่ และแก้ไขเนื้อหาภายในเว็บไซต์จาก Google Sites ได้ นอกจากนี้ แอปพลิเคชันไคลเอ็นต์ของคุณยังสามารถขอรายการกิจกรรมล่าสุด เรียกประวัติการแก้ไข และดาวน์โหลดไฟล์แนบได้ด้วย
นอกเหนือจากการให้ข้อมูลพื้นฐานเกี่ยวกับความสามารถของ Sites Data API แล้ว คู่มือนี้ยังให้ตัวอย่างสำหรับการโต้ตอบกับ API โดยใช้ไลบรารีของไคลเอ็นต์ Java สำหรับความช่วยเหลือในการตั้งค่าไลบรารีของไคลเอ็นต์ โปรดดู การเริ่มต้นใช้งานไลบรารีของไคลเอ็นต์ Google Data Java หากคุณสนใจ เพื่อทำความเข้าใจเพิ่มเติมเกี่ยวกับโปรโตคอลพื้นฐานที่ไลบรารีไคลเอ็นต์ Java ใช้เพื่อโต้ตอบกับ Sites API คลาสสิก โปรดดูที่ คู่มือโปรโตคอล
ผู้ชม
เอกสารนี้มีไว้สำหรับนักพัฒนาซอฟต์แวร์ที่ต้องการเขียนแอปพลิเคชันไคลเอ็นต์ที่โต้ตอบกับ Google Sites โดยใช้ไลบรารีไคลเอ็นต์ของ Google Data Java
เริ่มต้นใช้งาน
โดย Google Sites จะใช้บัญชี Google หรือบัญชี G Suite ในการตรวจสอบสิทธิ์ หากมีบัญชีอยู่แล้ว คุณก็พร้อมใช้งาน หรือมิเช่นนั้น คุณก็สร้างบัญชีใหม่ได้
การติดตั้งไลบรารี
สำหรับความช่วยเหลือในการตั้งค่าและติดตั้งไลบรารีของไคลเอ็นต์ โปรดดูการเริ่มต้นใช้งานไลบรารีของไคลเอ็นต์ Google Data Java หากคุณใช้ Eclipse อยู่ บทความนี้ยังอธิบายถึง วิธีตั้งค่าโปรเจ็กต์โดยใช้ปลั๊กอิน Google Data APIs Eclipse สิ่งที่คุณต้องมีเพื่อเริ่มต้นใช้งานมีดังนี้
- ติดตั้ง Java 1.5 ขึ้นไป
- ดาวน์โหลดไลบรารีของไคลเอ็นต์ (
gdata-src.java.zip
เวอร์ชันล่าสุด) - ดาวน์โหลดรายการการขึ้นต่อกัน
- ดาวน์โหลดแอปพลิเคชันตัวอย่าง (
gdata-samples.java.zip
เวอร์ชันล่าสุด)
หลังจากติดตั้ง .jars แล้ว คุณจะต้องเพิ่มสิ่งต่อไปนี้ในโปรเจ็กต์
java/lib/gdata-sites-2.0.jar
- เวอร์ชัน 2.0 ในที่นี้มีไว้สำหรับเวอร์ชัน 1.4 ของ Sites API แบบคลาสสิกjava/lib/gdata-core-1.0.jar
java/lib/gdata-client-1.0.jar
java/lib/gdata-spreadsheet-3.0.jar
(หากดำเนินการกับหน้ารายการ / รายการ)
นอกจากนี้ อย่าลืมใส่ Jars ของทรัพยากร Dependency (gdata-media-1.0.jar
, mail.jar
และ google-collect....jar
)
การเรียกใช้แอปพลิเคชันตัวอย่าง
แอปพลิเคชันตัวอย่างที่ใช้งานได้เต็มรูปแบบอยู่ในไดเรกทอรีย่อย /java/sample/sites
ของการดาวน์โหลด gdata-samples.java.zip
นอกจากนี้ คุณยังดูแหล่งที่มาได้ที่ /trunk/java/sample/sites/
ในที่เก็บ SVN ที่เข้าถึงได้จากแท็บแหล่งที่มา SitesDemo.java
ช่วยให้ผู้ใช้ดำเนินการหลายอย่าง ซึ่งสาธิตวิธีใช้ Sites API แบบคลาสสิก
โปรดทราบว่าคุณจะต้องใส่ java/sample/util/lib/sample-util.jar
เพื่อเรียกใช้ตัวอย่าง
กำลังเริ่มโปรเจ็กต์ของคุณเอง
เคล็ดลับ: ดูบทความการใช้ Eclipse กับ Google Data API สำหรับการตั้งค่าที่รวดเร็วด้วยปลั๊กอิน Eclipse
คุณจะต้องนำเข้าหลายครั้ง ทั้งนี้ขึ้นอยู่กับความต้องการของแอปพลิเคชัน เราขอแนะนำให้เริ่มต้นด้วยการนำเข้าต่อไปนี้
import com.google.gdata.client.*; import com.google.gdata.client.sites.*; import com.google.gdata.data.*; import com.google.gdata.data.acl.*; import com.google.gdata.data.media.*; import com.google.gdata.data.sites.*; import com.google.gdata.data.spreadsheet.*; // If working with listpages / listitems import com.google.gdata.util.*;
ต่อไปคุณจะต้องตั้งค่าออบเจ็กต์ SitesService
ด้วย ซึ่งจะแสดงการเชื่อมต่อไคลเอ็นต์กับ Sites API แบบคลาสสิก ดังนี้
SitesService client = new SitesService("yourCo-yourAppName-v1");
อาร์กิวเมนต์ applicationName
ควรเป็นไปตามรูปแบบ company-applicationname-version
พารามิเตอร์นี้ใช้เพื่อการบันทึก
หมายเหตุ: ส่วนที่เหลือของคู่มือนี้จะถือว่าคุณสร้าง SitesService
ในตัวแปร client
การตรวจสอบสิทธิ์กับ Sites API แบบคลาสสิก
ไลบรารีของไคลเอ็นต์ Java สามารถใช้กับฟีดสาธารณะหรือฟีดส่วนตัว Sites Data API ให้สิทธิ์การเข้าถึงแบบส่วนตัวและสาธารณะ ทั้งนี้ขึ้นอยู่กับสิทธิ์ของ Sites และการดำเนินการที่คุณพยายามทำ ตัวอย่างเช่น คุณอาจสามารถอ่านฟีดเนื้อหาของ ไซต์สาธารณะ แต่ไม่ทำการอัปเดต - บางสิ่งที่ต้องมีไคลเอ็นต์ที่ตรวจสอบสิทธิ์แล้ว ซึ่งสามารถดำเนินการได้ผ่านทาง การตรวจสอบสิทธิ์ชื่อผู้ใช้/รหัสผ่าน ClientLogin, AuthSub หรือ OAuth
โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับ AuthSub, OAuth และ ClientLogin ในภาพรวมการตรวจสอบสิทธิ์ Google Data API
เคล็ดลับ: API รองรับ SSL (HTTPS) หากคุณใช้ AuthSub/OAuth โปรดระบุ
ขอบเขตของ https://sites.google.com/feeds/
เพื่อขอฟีดผ่าน SSL และโปรดทราบว่าสำหรับ
โดเมน G Suite โปรดดู "ต้องระบุ SSL" การตั้งค่าในแผงควบคุมการดูแลระบบจะเป็นไปตาม API คุณสามารถบังคับทั้งหมด
คำขอ API จะดำเนินการผ่าน HTTPS โดยการเรียกใช้ client.useSsl();
AuthSub สำหรับเว็บแอปพลิเคชัน
แอปพลิเคชันไคลเอ็นต์ควรใช้ การตรวจสอบสิทธิ์ AuthSub สำหรับเว็บแอปพลิเคชัน ตรวจสอบสิทธิ์ผู้ใช้ในบัญชี Google โอเปอเรเตอร์ไม่จำเป็นต้องเข้าถึงชื่อผู้ใช้และรหัสผ่านสำหรับผู้ใช้ Google Sites มีเพียง ต้องระบุโทเค็น AuthSub
ดูวิธีการรวม AuthSub ไว้ในเว็บแอปพลิเคชัน
ขอโทเค็นแบบใช้ครั้งเดียว
เมื่อผู้ใช้เข้าชมแอปพลิเคชันเป็นครั้งแรก ผู้ใช้จะต้องตรวจสอบสิทธิ์ โดยปกติแล้ว นักพัฒนาซอฟต์แวร์จะพิมพ์ข้อความและลิงก์ที่นำผู้ใช้ไป ไปยังหน้าการอนุมัติ AuthSub เพื่อตรวจสอบสิทธิ์ผู้ใช้และขอสิทธิ์เข้าถึงเอกสาร ไลบรารีของไคลเอ็นต์ Google Data Java มีฟังก์ชันสำหรับ สร้าง URL นี้ โค้ดด้านล่างตั้งค่าลิงก์ไปยังหน้า AuthSubRequest
import com.google.gdata.client.*; String nextUrl = "http://www.example.com/welcome.jsp"; String scope = "https://sites.google.com/feeds/"; boolean secure = true; boolean session = true; String authSubUrl = AuthSubUtil.getRequestUrl(nextUrl, scope, secure, session);
หากต้องการตรวจสอบสิทธิ์ผู้ใช้ในโดเมนที่ฝากบริการ G Suite ของคุณ ให้ทำดังนี้
import com.google.gdata.client.*; String hostedDomain = "example.com"; String nextUrl = "http://www.example.com/welcome.jsp"; String scope = "https://sites.google.com/feeds/"; // SSL is also supported boolean secure = true; boolean session = true; String authSubUrl = AuthSubUtil.getRequestUrl(hostedDomain, nextUrl, scope, secure, session);
เมธอด getRequestUrl()
ใช้พารามิเตอร์หลายรายการ (ตามพารามิเตอร์การค้นหาที่เครื่องจัดการ AuthSubRequest ใช้) ดังนี้
- URL ถัดไป ซึ่งเป็น URL ที่ Google จะเปลี่ยนเส้นทางไป
หลังจากที่ผู้ใช้เข้าสู่ระบบบัญชีของตนและให้สิทธิ์เข้าถึง
http://www.example.com/welcome.jsp
ในตัวอย่างด้านบน - ขอบเขต —
https://sites.google.com/feeds/
ในตัวอย่างด้านบน - บูลีนเพื่อระบุว่าจะใช้โทเค็นในโหมดลงทะเบียนหรือไม่
false
ในตัวอย่างด้านบน - บูลีนที่ 2 เพื่อระบุว่าหลังจากนั้นจะมีการแลกเปลี่ยนโทเค็นเป็นโทเค็นเซสชันหรือไม่
true
ในตัวอย่างด้านบน
การอัปเกรดเป็นโทเค็นเซสชัน
โปรดดูการใช้ AuthSub กับไลบรารีของไคลเอ็นต์ Google Data API
การดึงข้อมูลเกี่ยวกับโทเค็นเซสชัน
โปรดดูการใช้ AuthSub กับไลบรารีของไคลเอ็นต์ Google Data API
การเพิกถอนโทเค็นเซสชัน
OAuth สำหรับเว็บหรือแอปพลิเคชันที่ติดตั้ง/อุปกรณ์เคลื่อนที่
OAuth สามารถใช้เป็นทางเลือกแทน AuthSub ได้และมีไว้สำหรับเว็บแอปพลิเคชัน OAuth จะคล้ายกับการใช้โหมดที่ปลอดภัยและลงทะเบียนของ AuthSub ว่าคำขอข้อมูลทั้งหมดต้องลงชื่อแบบดิจิทัลและต้องลงทะเบียนโดเมนของคุณ
ดูวิธีการรวม OAuth ไว้ในแอปพลิเคชันที่ติดตั้ง
กำลังดึงข้อมูลโทเค็นคำขอ
โปรดดูการใช้ OAuth กับไลบรารีไคลเอ็นต์ Google Data API
การให้สิทธิ์โทเค็นคำขอ
โปรดดูการใช้ OAuth กับไลบรารีไคลเอ็นต์ Google Data API
การอัปเกรดเป็นโทเค็นเพื่อการเข้าถึง
ClientLogin สำหรับแอปพลิเคชันที่ติดตั้ง/บนอุปกรณ์เคลื่อนที่
ควรใช้ ClientLogin โดยแอปพลิเคชันที่ติดตั้งหรือแอปพลิเคชันบนอุปกรณ์เคลื่อนที่ซึ่งต้อง ตรวจสอบสิทธิ์ผู้ใช้ในบัญชี Google เมื่อเรียกใช้ครั้งแรก แอปพลิเคชันจะแจ้งให้ผู้ใช้ป้อนชื่อผู้ใช้/รหัสผ่าน ในคำขอที่ตามมา มีการอ้างอิงโทเค็นการตรวจสอบสิทธิ์
ดูวิธีการรวม ClientLogin ไว้ในแอปพลิเคชันที่ติดตั้ง
หากต้องการใช้ ClientLogin ให้เรียกใช้
setUserCredentials()
เมธอดของออบเจ็กต์ SitesService
ซึ่งรับค่ามาจาก
GoogleService
ระบุที่อยู่อีเมลและรหัสผ่านของผู้ใช้
ลูกค้าของคุณส่งคำขอในนามของใคร เช่น
SitesService client = new SitesService("yourCo-yourAppName-v1"); client.setUserCredentials("example@gmail.com", "pa$$word");
เคล็ดลับ: เมื่อแอปพลิเคชันตรวจสอบสิทธิ์ผู้ใช้เป็นครั้งแรกเรียบร้อยแล้ว ให้จัดเก็บโทเค็นการตรวจสอบสิทธิ์ไว้ใน ฐานข้อมูลเพื่อเรียกคืนไว้ใช้ในภายหลัง โดยไม่จำเป็นต้องแจ้งรหัสผ่านให้ผู้ใช้ทราบทุกครั้งที่เรียกใช้แอปพลิเคชันของคุณ โปรดดูข้อมูลเพิ่มเติมที่การเรียกโทเค็นการตรวจสอบสิทธิ์
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ ClientLogin ในแอปพลิเคชัน Java โปรดดูการใช้ ClientLogin กับไลบรารีไคลเอ็นต์ Google Data API
ฟีดของเว็บไซต์
คุณสามารถใช้ฟีดของเว็บไซต์เพื่อแสดงรายการ Google Sites ที่ผู้ใช้เป็นเจ้าของหรือมีสิทธิ์ดู นอกจากนี้ยังใช้เพื่อแก้ไขชื่อเว็บไซต์ที่มีอยู่ได้ด้วย สำหรับโดเมน G Suite ยังใช้เพื่อสร้างและ/หรือคัดลอก ทั่วทั้งเว็บไซต์
แสดงรายการเว็บไซต์
หากต้องการค้นหาฟีดเว็บไซต์ ให้ส่ง HTTP GET
ไปยัง URL ของฟีดเว็บไซต์ดังนี้
https://sites.google.com/feeds/site/site/
ในไคลเอ็นต์ Java คุณสามารถใช้คลาส SiteFeed
และ SiteEntry
เพื่อทำงานได้
ด้วยฟีดเว็บไซต์
public String getSiteFeedUrl() { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) return "https://sites.google.com/feeds/site/" + domain + "/"; } public void getSiteFeed() throws IOException, ServiceException { SiteFeed siteFeed = client.getFeed(new URL(getSiteFeedUrl()), SiteFeed.class); for (SiteEntry entry : siteFeed.getEntries()){ System.out.println("title: " + entry.getTitle().getPlainText()); System.out.println("site name: " + entry.getSiteName().getValue()); System.out.println("theme: " + entry.getTheme().getValue()); System.out.println(""); } }
ตัวอย่างด้านบนจะพิมพ์ชื่อเว็บไซต์ ชื่อเว็บไซต์ และธีมของเว็บไซต์ Getter อื่นๆ ว่างสำหรับ เพื่อเข้าถึงที่พักเพิ่มเติมในฟีด
การสร้างเว็บไซต์ใหม่
หมายเหตุ: ฟีเจอร์นี้ใช้ได้กับโดเมน G Suite เท่านั้น
คุณสามารถจัดสรรเว็บไซต์ใหม่ได้โดยการสร้าง SiteEntry
ใหม่ และเรียกเมธอด
insert()
ในฟีดเว็บไซต์
ตัวอย่างนี้สร้างเว็บไซต์ใหม่โดยมีธีมเป็น "แถบสเลท" (การตั้งค่าที่ไม่บังคับ) และให้ ชื่อเว็บไซต์ (ต้องระบุ) และคำอธิบาย (ไม่บังคับ):
public String getSiteFeedUrl() { String domain = "example.com"; return "https://sites.google.com/feeds/site/" + domain + "/"; } public SiteEntry createSite(String title, String summary, String theme, String tag) throws MalformedURLException, IOException, ServiceException { SiteEntry entry = new SiteEntry(); entry.setTitle(new PlainTextConstruct(title)); entry.setSummary(new PlainTextConstruct(summary)); Theme tt = new Theme(); tt.setValue(theme); entry.setTheme(tt); entry.getCategories().add(new Category(TagCategory.Scheme.TAG, tag, null)); return client.insert(new URL(getSiteFeedUrl()), entry); } SiteEntry newSiteEntry = createSite("My Site Title", "summary for site", "slate", "tag");
คำขอข้างต้นจะสร้างเว็บไซต์ใหม่ภายใต้โดเมน G Suite example.com
ดังนั้น URL ของเว็บไซต์จะเป็น https://sites.google.com/a/example.com/my-site-title
หากสร้างเว็บไซต์สำเร็จ เซิร์ฟเวอร์จะตอบกลับด้วย SiteEntry
ซึ่งมีองค์ประกอบที่เซิร์ฟเวอร์เพิ่มเข้ามา ได้แก่ ลิงก์ไปยังเว็บไซต์ ลิงก์ไปยังฟีด ACL ของเว็บไซต์
ชื่อเว็บไซต์ ชื่อเรื่อง ข้อมูลสรุป และอื่นๆ
การคัดลอกเว็บไซต์
หมายเหตุ: ฟีเจอร์นี้ใช้ได้กับโดเมน G Suite เท่านั้น
การคัดลอกเว็บไซต์ก็คล้ายกับการสร้างเว็บไซต์ใหม่ ความแตกต่างคือคุณจะต้องตั้งค่า
ใน SiteEntry
ใหม่ที่มีลิงก์ของตัวเองของเว็บไซต์ที่จะทําซ้ำ
ต่อไปนี้คือตัวอย่างการทำซ้ำเว็บไซต์ที่สร้างขึ้นในส่วนการสร้างเว็บไซต์ใหม่
public SiteEntry copySite(String title, String summary, String sourceHref) throws MalformedURLException, IOException, ServiceException { SiteEntry entry = new SiteEntry(); entry.setTitle(new PlainTextConstruct(title)); entry.setSummary(new PlainTextConstruct(summary)); entry.addLink(SitesLink.Rel.SOURCE, Link.Type.ATOM, sourceHref); return client.insert(new URL(getSiteFeedUrl()), entry); } String sourceHref = newSiteEntry.getLink(SitesLink.Rel.SOURCE, Link.Type.ATOM).getHref(); SiteEntry myTwin = copySite("Duplicate Site", "A copy", sourceHref);
ประเด็นสำคัญ
- คัดลอกได้เฉพาะไซต์และเทมเพลตของไซต์ที่ผู้ใช้ที่ได้รับการตรวจสอบสิทธิ์เป็นเจ้าของเท่านั้น
- นอกจากนี้ ยังสามารถคัดลอกเทมเพลตของไซต์ได้อีกด้วย เว็บไซต์เป็นเทมเพลตหากช่อง "เผยแพร่เว็บไซต์นี้เป็นเทมเพลต" ในหน้าการตั้งค่า Google Sites แล้ว
- คุณสามารถคัดลอกเว็บไซต์จากโดเมนอื่น กำลังรอให้คุณเป็นเจ้าของบนเว็บไซต์ต้นทาง
การอัปเดตข้อมูลเมตาของเว็บไซต์
หากต้องการเปลี่ยนชื่อเว็บไซต์ เปลี่ยนธีม แท็กหมวดหมู่ หรือข้อมูลสรุป คุณจะต้องดึงข้อมูล SiteEntry
ที่มีเว็บไซต์ดังกล่าวก่อน
แก้ไขพร็อพเพอร์ตี้อย่างน้อย 1 รายการ แล้วเรียกเมธอด update()
ของ SiteEntry
ตัวอย่างนี้แก้ไขธีมของเว็บไซต์ก่อนหน้าและเปลี่ยนชื่อเว็บไซต์
myTwin.setTitle(new PlainTextConstruct("better-title")); Theme theme = myTwin.getTheme(); theme.setValue('iceberg'); myTwin.setTheme(theme); myTwin.getCategories().add(new Category(TagCategory.Scheme.TAG, "newTag", null)); SiteEntry updatedSiteEntry = myTwin.update(); System.out.println(updatedSiteEntry.getTitle().getPlainText();
การแมปที่อยู่เว็บ
การจับคู่ที่อยู่เว็บจะช่วยให้ผู้ใช้ Sites สามารถจับคู่โดเมนของตนเองกับ Google Sites ได้ เช่น http://www.mydomainsite.com
สามารถใช้แทน http://sites.google.com/a/domain.com/mysite
ได้ คุณสามารถแก้ไข
การแมปที่อยู่เว็บของเว็บไซต์ ดูข้อมูลเพิ่มเติมได้จากบทความในศูนย์ช่วยเหลือ
การดึงข้อมูลการแมปที่อยู่เว็บของเว็บไซต์
หากต้องการแสดงผลการแมปที่อยู่เว็บสำหรับเว็บไซต์ ให้ดึงข้อมูลรายการ/ฟีดของเว็บไซต์ด้วยพารามิเตอร์ with-mappings=true
ดังนี้
วันที่
SiteQuery query = new SiteQuery(new URL("https://sites.google.com/feeds/site/siteName")); query.setWithMappings(true); SiteFeed feed = service.getFeed(query, SiteFeed.class); for (SiteEntry entry : feed.getEntries()) { System.out.println("Mappings for '" + entry.getSiteName().getValue() + "':"); for (Link link : entry.getWebAddressMappingLinks()) { System.out.println(" " + link.getHref()); } }
การแมปที่มีอยู่จะแสดงเป็น link
พร้อม rel='webAddressMapping' เช่น ในตัวอย่างข้างต้น
มี webAddressMapping
3 รายการที่ชี้ไปยังเว็บไซต์
http://sites.google.com/site/myOtherTestSite
การแก้ไขการจับคู่ที่อยู่เว็บ
หมายเหตุ: การดำเนินการ GET/POST/PUT ทั้งหมดควรระบุพารามิเตอร์ with-mappings=true
เมื่อทำงาน
ด้วยการแมปที่อยู่เว็บ หากไม่มีพารามิเตอร์ ระบบจะไม่แสดงผล webAddressMapping
ในรายการเว็บไซต์ (GET) หรือจะพิจารณา
เมื่ออัปเดต/นำการแมป (PUT) ออกจากรายการ
หากต้องการเพิ่ม อัปเดต หรือลบการแมป เพียงระบุ เปลี่ยน หรือนำลิงก์ดังกล่าวออกเมื่อสร้างเว็บไซต์ใหม่ หรือ
การอัปเดตข้อมูลเมตาของเว็บไซต์ พารามิเตอร์ with-mappings=true
ต้องรวมอยู่ใน URI ฟีดเว็บไซต์
หมายเหตุ: หากต้องการอัปเดตการจับคู่ที่อยู่ คุณต้องเป็นผู้ดูแลระบบเว็บไซต์หรือผู้ดูแลระบบโดเมนในกรณีที่เว็บไซต์โฮสต์ของ G Suite
ตัวอย่างเช่น คำขอด้านล่างอัปเดตการแมป http://www.mysitemapping.com
เป็น http://www.my-new-sitemapping.com
และลบ http://www.mysitemapping2.com
โดยออกจากลิงก์จากรายการ:
SiteEntry entry = client.getEntry(new URL("https://sites.google.com/feeds/site/site/siteName?with-mappings=true"), SiteEntry.class); // Modify mappings (remove all mappings, add some of them again, add modified mappings) entry.removeLinks(SitesLink.Rel.WEBADDRESSMAPPING, Link.Type.HTML); entry.addLink(SitesLink.Rel.WEBADDRESSMAPPING, Link.Type.HTML, "http://www.my-new-sitemapping.com"); // Update the entry with the mappings. entry.update();
โปรดทราบว่าการจับคู่ที่อยู่เว็บยังระบุได้ในขณะที่สร้าง/คัดลอกเว็บไซต์
ฟีดกิจกรรม
คุณสามารถดึงข้อมูลกิจกรรมล่าสุด (การเปลี่ยนแปลง) ของเว็บไซต์โดยการดึงข้อมูลฟีดกิจกรรม แต่ละรายการใน ฟีดกิจกรรมมีข้อมูลเกี่ยวกับการเปลี่ยนแปลงที่เกิดขึ้นกับเว็บไซต์
ในการค้นหาฟีดกิจกรรม ให้ส่ง HTTP GET
ไปยัง URL ของฟีดกิจกรรม
https://sites.google.com/feeds/activity/site/siteName
ใช้คลาส ActivityFeed
ในไคลเอ็นต์ Java เพื่อแสดงผลออบเจ็กต์ ActivityEntry
public String buildActivityFeedUrl() { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) String siteName = "mySite"; return "https://sites.google.com/feeds/activity/" + domain + "/" + siteName + "/"; } public void getActivityFeed() throws IOException, ServiceException { ActivityFeed activityFeed = client.getFeed(new URL(buildActivityFeedUrl()), ActivityFeed.class); for (BaseActivityEntry<?> entry : activityFeed.getEntries()){ System.out.println(entry.getSummary().getPlainText()); System.out.println(" revisions link: " + entry.getRevisionLink().getHref()); } }
หมายเหตุ: คุณต้องเป็นผู้ทำงานร่วมกันหรือเจ้าของเว็บไซต์จึงจะเข้าถึงฟีดนี้ได้ ไคลเอ็นต์ของคุณต้องตรวจสอบสิทธิ์โดยใช้โทเค็น AuthSub, OAuth หรือ ClientLogin โปรดดูการตรวจสอบสิทธิ์กับบริการ Sites
ฟีดการแก้ไข
หากต้องการเรียกประวัติการแก้ไขสำหรับรายการเนื้อหา ให้ส่ง HTTP GET
ไปยังลิงก์การแก้ไขของรายการ ดังนี้
https://sites.google.com/feeds/revision/site/siteName/CONTENT_ENTRY_ID
ตัวอย่างนี้จะค้นหาฟีดเนื้อหา แล้วดึงข้อมูลฟีดการแก้ไขสำหรับรายการเนื้อหาแรก
ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl()), ContentFeed.class); URL revisionFeedUrl = new URL(contentFeed.getEntries().get(0).getRevisionLink().getHref()); // use first entry public void getRevisionFeed(String revisionFeedUrl) throws IOException, ServiceException { RevisionFeed revisionFeed = client.getFeed(revisionFeedUrl, RevisionFeed.class); for (BaseContentEntry<?> entry : revisionFeed.getEntries()){ System.out.println(entry.getTitle().getPlainText()); System.out.println(" updated: " + entry.getUpdated().toUiString() + " by " + entry.getAuthors().get(0).getEmail()); System.out.println(" revision #: " + entry.getRevision().getValue()); } }
หมายเหตุ: คุณต้องเป็นผู้ทำงานร่วมกันหรือเจ้าของเว็บไซต์จึงจะเข้าถึงฟีดนี้ได้ ไคลเอ็นต์ของคุณต้องตรวจสอบสิทธิ์โดยใช้โทเค็น AuthSub, OAuth หรือ ClientLogin โปรดดูการตรวจสอบสิทธิ์กับบริการ Sites
ฟีดเนื้อหา
กำลังเรียกฟีดเนื้อหา
ฟีดเนื้อหาจะแสดงรายการเนื้อหาล่าสุดของเว็บไซต์ คุณสามารถเข้าถึงได้โดยส่ง HTTP GET
ไปยัง URL ของฟีดเนื้อหา
https://sites.google.com/feeds/content/site/siteName
พารามิเตอร์ฟีด | คำอธิบาย |
---|---|
site | "site " หรือโดเมนของโดเมนที่โฮสต์ใน G Suite ของคุณ (เช่น example.com ) |
siteName | ชื่อเว็บสเปซของเว็บไซต์ ที่พบใน URL ของเว็บไซต์ (เช่น mySite ) |
ตัวอย่างการดึงฟีดเนื้อหา
public String buildContentFeedUrl() { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) String siteName = "mySite"; return "https://sites.google.com/feeds/content/" + domain + "/" + siteName + "/"; } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl()), ContentFeed.class);
contentFeed
ที่ได้จะเป็นออบเจ็กต์ ContentFeed
ที่มีการตอบสนองจากเซิร์ฟเวอร์ แต่ละรายการ
จาก contentFeed
แสดงถึงหน้าเว็บหรือรายการอื่นภายในไซต์ของผู้ใช้ ContentFeed
จะมีหลายประเภท
ของออบเจ็กต์ ทั้งหมดรับค่าจาก BaseContentEntry
: ListItemEntry
, ListPageEntry
, AttachmentEntry
, WebAttachmentEntry
FileCabinetPageEntry
, AnnouncementsPageEntry
, AnnouncementEntry
, WebPageEntry
, CommentEntry
นี่คือตัวอย่างของการแสดงรายการประเภทต่างๆ ใน ContentFeed
ข้อมูลแต่ละประเภทมีพร็อพเพอร์ตี้แตกต่างกัน แต่มีเพียงบางรายการเท่านั้นที่ไม่ได้พิมพ์ไว้ที่นี่
public String getContentBlob(BaseContentEntry<?> entry) { return ((XhtmlTextConstruct) entry.getTextContent().getContent()).getXhtml().getBlob(); } // Extracts an entry's numeric ID. private String getEntryId(String selfLink) { return selfLink.substring(selfLink.lastIndexOf("/") + 1); } public void printContentEntries(ContentFeed contentFeed) { System.out.println("Listing all WebPageEntry:"); for (WebPageEntry entry : contentFeed.getEntries(WebPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } System.out.println(" author: " + entry.getAuthors().get(0).getEmail()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all ListPageEntry:"); for (ListPageEntry entry : contentFeed.getEntries(ListPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); for (Column col : entry.getData().getColumns()) { System.out.print(" [" + col.getIndex() + "] " + col.getName() + "\t"); } } for (ListItemEntry entry : contentFeed.getEntries(ListItemEntry.class)) { for (Field field : entry.getFields()) { System.out.print(" [" + field.getIndex() + "] " + field.getValue() + "\t"); } System.out.println("\n"); } System.out.println("Listing all FileCabinetPageEntry:"); for (FileCabinetPageEntry entry : contentFeed.getEntries(FileCabinetPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all CommentEntry:"); for (CommentEntry entry : contentFeed.getEntries(CommentEntry.class)) { System.out.println(" in-reply-to: " + entry.getInReplyTo().toString()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AnnouncementsPageEntry:"); for (AnnouncementsPageEntry entry : contentFeed.getEntries(AnnouncementsPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AnnouncementEntry:"); for (AnnouncementEntry entry : contentFeed.getEntries(AnnouncementEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } System.out.println(" draft?: " + entry.isDraft()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AttachmentEntry:"); for (AttachmentEntry entry : contentFeed.getEntries(AttachmentEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } if (entry.getSummary() != null) { System.out.println(" description: " + entry.getSummary().getPlainText()); } System.out.println(" revision: " + entry.getRevision().getValue()); MediaContent content = (MediaContent) entry.getContent(); System.out.println(" src: " + content.getUri()); System.out.println(" content type: " + content.getMimeType().getMediaType()); } System.out.println("Listing all WebAttachmentEntry:"); for (WebAttachmentEntry entry : contentFeed.getEntries(WebAttachmentEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } if (entry.getSummary() != null) { System.out.println(" description: " + entry.getSummary().getPlainText()); } System.out.println(" src: " + ((MediaContent) entry.getContent()).getUri()); } }
หมายเหตุ: ฟีดนี้อาจต้องมีการตรวจสอบสิทธิ์หรือไม่ก็ได้ ขึ้นอยู่กับสิทธิ์การแชร์ของเว็บไซต์ หากไซต์ไม่เป็นสาธารณะ ไคลเอ็นต์ของคุณต้องตรวจสอบสิทธิ์โดยใช้โทเค็น AuthSub, OAuth หรือ ClientLogin โปรดดู การตรวจสอบสิทธิ์กับบริการ Sites
ตัวอย่างการค้นหาฟีดเนื้อหา
คุณสามารถค้นหาฟีดเนื้อหาโดยใช้พารามิเตอร์การค้นหาของ Google Data API มาตรฐานบางรายการ และข้อมูลเฉพาะสำหรับ Sites API แบบคลาสสิก สำหรับข้อมูลโดยละเอียดเพิ่มเติมและรายการพารามิเตอร์ที่รองรับทั้งหมด โปรดดู คู่มืออ้างอิง
หมายเหตุ: ตัวอย่างในส่วนนี้จะใช้เมธอด buildContentFeedUrl()
ในการดึงข้อมูลฟีดเนื้อหา
กำลังดึงข้อมูลประเภทรายการที่เจาะจง
หากต้องการดึงข้อมูลประเภทรายการเฉพาะ ให้ใช้พารามิเตอร์ kind
ตัวอย่างนี้แสดงผลเพียง attachment
รายการ:
ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl())); query.setKind("webpage"); ContentFeed contentFeed = client.getFeed(query, ContentFeed.class); for (AttachmentEntry entry : contentFeed.getEntries(AttachmentEntry.class)) { System.out.println(entry.getTitle().getPlainText()); }
หากต้องการแสดงผลรายการมากกว่า 1 ประเภท ให้คั่น kind
แต่ละรายการด้วย "," ตัวอย่างนี้แสดง filecabinet
และ
listpage
รายการ:
URL url = new URL(buildContentFeedUrl() + "?kind=filecabinet,listpage"); ContentFeed contentFeed = client.getFeed(url, ContentFeed.class); for (FileCabinetPageEntry entry : contentFeed.getEntries(FileCabinetPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); } for (ListPageEntry entry : contentFeed.getEntries(ListPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); }
การเรียกหน้าเว็บตามเส้นทาง
หากคุณทราบเส้นทางที่เกี่ยวข้องของหน้าเว็บภายในเว็บไซต์จาก Google Sites คุณสามารถใช้พารามิเตอร์ path
เพื่อดึงข้อมูลหน้าเว็บนั้นๆ ได้
ตัวอย่างนี้จะแสดงผลหน้าเว็บซึ่งอยู่ที่
http://sites.google.com/site/siteName/path/to/the/page
:
ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl())); query.setPath("/path/to/the/page"); ContentFeed contentFeed = client.getFeed(query, ContentFeed.class); for (BaseContentEntry<?> entry : contentFeed.getEntries()) { System.out.println(" title: " + entry.getTitle().getPlainText()); }
กำลังเรียกดูรายการทั้งหมดในหน้าหลัก
หากคุณทราบรหัสรายการเนื้อหาของหน้าเว็บ (เช่น "1234567890" ในตัวอย่างด้านล่าง) คุณสามารถใช้พารามิเตอร์ parent
เพื่อดึงข้อมูลรายการย่อยทั้งหมด (หากมี):
ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl())); query.setParent("1234567890"); ContentFeed contentFeed = client.getFeed(query, ContentFeed.class);
สำหรับพารามิเตอร์เพิ่มเติม โปรดดูคู่มืออ้างอิง
การสร้างเนื้อหา
หมายเหตุ: ก่อนสร้างเนื้อหาสำหรับเว็บไซต์ โปรดตรวจสอบว่าคุณได้ตั้งค่าเว็บไซต์ในไคลเอ็นต์แล้วclient.site = "siteName";
เนื้อหาใหม่ (หน้าเว็บ หน้ารายการ หน้าจัดการไฟล์ หน้าประกาศ ฯลฯ) สามารถสร้างขึ้นได้ด้วยการส่ง HTTP POST
ไปยังฟีดเนื้อหาด้วยคำสั่งต่อไปนี้
https://sites.google.com/feeds/content/site/siteName
สำหรับรายการประเภทโหนดการสนับสนุน โปรดดูพารามิเตอร์ kind
ในคู่มือข้อมูลอ้างอิง
การสร้างรายการ / หน้าใหม่
ตัวอย่างนี้สร้าง webpage
ใหม่ภายใต้ระดับบนสุดของเว็บไซต์ รวม XHTML บางส่วนสำหรับเนื้อหาของหน้า
และกำหนดชื่อส่วนหัวเป็น "ชื่อหน้าเว็บใหม่":
private void setContentBlob(BaseContentEntry<?> entry, String pageContent) { XmlBlob xml = new XmlBlob(); xml.setBlob(pageContent); entry.setContent(new XhtmlTextConstruct(xml)); } public WebPageEntry createWebPage(String title, String content) throws MalformedURLException, IOException, ServiceException { WebPageEntry entry = new WebPageEntry(); entry.setTitle(new PlainTextConstruct(title)); setContentBlob(entry, content); // Entry's HTML content return client.insert(new URL(buildContentFeedUrl()), entry); } WebPageEntry createdEntry = createWebPage("New Webpage Title", "<b>HTML content</b>"); System.out.println("Created! View at " + createdEntry.getHtmlLink().getHref());
หากคำขอสำเร็จ createdEntry
จะมีสำเนาของรายการที่สร้างไว้ในเซิร์ฟเวอร์
การสร้างรายการ/หน้าเว็บภายใต้เส้นทาง URL ที่กำหนดเอง
โดยค่าเริ่มต้น ตัวอย่างก่อนหน้านี้จะสร้างขึ้นภายใต้ URL
http://sites.google.com/site/siteName/new-webpage-title
และ
มีส่วนหัวหน้าเป็น "ชื่อหน้าเว็บใหม่" กล่าวคือ ระบบจะทำให้ <atom:title>
เป็นค่ามาตรฐาน new-webpage-title
สำหรับ URL
หากต้องการปรับแต่งเส้นทาง URL ของหน้าเว็บ คุณตั้งค่าองค์ประกอบ <sites:pageName>
ได้
ตัวอย่างนี้สร้างหน้า filecabinet
ใหม่ที่มีส่วนหัวเป็น "File Storage" แต่สร้างหน้านั้น
ใต้ URL http://sites.google.com/site/siteName/files
(แทน http://sites.google.com/site/siteName/file-storage
)
โดยระบุเอลิเมนต์ <sites:pageName>
public FileCabinetPageEntry createFileCabinetPage(String title, String content, String customPageName) throws MalformedURLException, IOException, ServiceException { FileCabinetPageEntry entry = new FileCabinetPageEntry(); entry.setTitle(new PlainTextConstruct(title)); setContentBlob(entry, content); // Entry's HTML content entry.setPageName(new PageName(customPageName)); // Upload to a custom page path return client.insert(new URL(buildContentFeedUrl()), entry); } FileCabinetPageEntry createdEntry = createFileCabinetPage("File Storage", "<b>HTML content</b>", "files"); System.out.println("Created! View at " + createdEntry.getHtmlLink().getHref());
เซิร์ฟเวอร์ใช้กฎตามลำดับความสำคัญต่อไปนี้ในการตั้งชื่อเส้นทาง URL ของหน้าเว็บ
<sites:pageName>
หากมี ต้องเป็นไปตามa-z, A-Z, 0-9, -, _
<atom:title>
ต้องไม่เป็น null หากไม่มี pageName การปรับให้เป็นมาตรฐานคือการตัด + ยุบช่องว่างเป็น "-" และ นำอักขระที่ไม่ตรงกับa-z, A-Z, 0-9, -, _
ออก
การสร้างหน้าย่อย
หากต้องการสร้างหน้าเว็บย่อย (รายการย่อย) ในหน้าหลัก คุณต้องตั้งค่าลิงก์หลักในรายการ แอตทริบิวต์ href
ของลิงก์ไปที่
ลิงก์ตัวเองของโหนดหลัก
public AnnouncementEntry postAnnouncement(String title, String content, AnnouncementsPageEntry parentPage) throws MalformedURLException, IOException, ServiceException { AnnouncementEntry entry = new AnnouncementEntry(); entry.setTitle(new PlainTextConstruct(title)); setContentBlob(entry, content); // Entry's HTML content // Set the entry's parent link to create the announcement under that page. entry.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, parentPage.getSelfLink().getHref()); return client.insert(new URL(buildContentFeedUrl()), entry); } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=announcementspage"), ContentFeed.class); AnnouncementEntry createdEntry = postAnnouncement("Party!!", "My place, this weekend", contentFeed.getEntries().get(0)); System.out.println("New post by " + createdEntry.getAuthors().get(0).getName());
ตัวอย่างข้างต้นสร้าง announcement
ใหม่ใต้หน้าประกาศแรกที่พบใน
ฟีดเนื้อหาของผู้ใช้ ชื่อประกาศตั้งค่าเป็น "ปาร์ตี้!!" และเนื้อหาลงใน "สถานที่ของฉัน สุดสัปดาห์นี้"
เทมเพลตของหน้าเว็บ
การสร้างเทมเพลตของหน้าเว็บ
กระบวนการในการสร้างเทมเพลตหน้าเว็บจะเหมือนกับการสร้างรายการ/หน้าเว็บใหม่ และ
การสร้างหน้าย่อย ความแตกต่างคือการเพิ่ม category
โดยมีการตั้งค่าคำศัพท์และป้ายกำกับเป็น "http://schemas.google.com/g/2005#template"
และ "เทมเพลต" ตามลำดับ
ตัวอย่างนี้สร้างเทมเพลต webpage
ใหม่
// The template webpage entry. WebPageEntry entry = new WebPageEntry(); // Set title and content. entry.setTitle(new PlainTextConstruct("Page template title")); XmlBlob xml = new XmlBlob(); xml.setBlob("Content for page template"); entry.setContent(new XhtmlTextConstruct(xml)); // Set the template category Category TEMPLATE_CATEGORY = new Category(TemplateCategory.Scheme.LABELS, TemplateCategory.Term.TEMPLATE, TemplateCategory.Label.TEMPLATE); entry.getCategories().add(TEMPLATE_CATEGORY); // Insert the template webpage entry. WebPageEntry createdEntry = client.insert(new URL("https://sites.google.com/feeds/content/site/siteName"), entry);
การสร้างหน้าเว็บจากเทมเพลต
เช่นเดียวกับการสร้างเทมเพลตของหน้าเว็บ คุณสามารถสร้างอินสแตนซ์ใหม่จากเทมเพลตโดยรวม <link>
เข้ากับ rel='http://schemas.google.com/sites/2008#template' การชี้
ไปยังลิงก์ของตัวเองของเทมเพลตหน้าเว็บ
ตัวอย่างนี้สร้างเทมเพลต filecabinet
ใหม่และจะสร้างอินสแตนซ์ filecabinet
ใหม่จากเทมเพลตนั้น
URL feedUrl = new URL("https://sites.google.com/feeds/content/site/siteName"); // 1. Create file cabinet page template FileCabinetPageEntry inputTemplateEntry = new FileCabinetPageEntry(); inputTemplateEntry.setTitle(new PlainTextConstruct("File cabinet page template title")); XmlBlob xml = new XmlBlob(); xml.setBlob("Content for page template"); inputTemplateEntry.setContent(new XhtmlTextConstruct(xml)); // Set the template category Category TEMPLATE_CATEGORY = new Category(TemplateCategory.Scheme.LABELS, TemplateCategory.Term.TEMPLATE, TemplateCategory.Label.TEMPLATE); inputTemplateEntry.getCategories().add(TEMPLATE_CATEGORY); // 2. Create file cabinet page template instance FileCabinetPageEntry templateEntry = client.insert(feedUrl, inputTemplateEntry); // Specify link to the page template FileCabinetPageEntry templateInstanceEntry = new FileCabinetPageEntry(); templateInstanceEntry.setTitle(new PlainTextConstruct("File cabinet template instance")); templateInstanceEntry.addLink(new Link(SitesLink.Rel.TEMPLATE, Link.Type.ATOM, templateEntry.getSelfLink().getHref())); FileCabinetPageEntry createdFileCabinetFromTemplate = client.insert(feedUrl, templateInstanceEntry);
หมายเหตุ: แม้จะมีเทมเพลตที่กำหนด <category>
ไว้ ซึ่งรวมถึงเทมเพลตใน
ยังคงต้องเข้าร่วม และโปรดทราบว่า ถ้าคุณรวมองค์ประกอบ <content>
เซิร์ฟเวอร์จะปฏิเสธ
กำลังอัปโหลดไฟล์
API รองรับการอัปโหลดไฟล์แนบไปยังหน้าจัดการไฟล์หรือหน้าหลักเช่นเดียวกับใน Google Sites
หากต้องการอัปโหลดไฟล์แนบให้ระดับบนสุด ให้ส่งคำขอ HTTP POST
ไปยัง URL ของฟีดเนื้อหาโดยทำดังนี้
https://sites.google.com/feeds/content/site/siteName
ต้องอัปโหลดไฟล์แนบทุกประเภทไปยังหน้าหลัก ดังนั้น คุณจึงตั้งค่าลิงก์หลักใน AttachmentEntry
หรือออบเจ็กต์ WebAttachmentEntry
รายการที่คุณพยายามอัปโหลด ดูการสร้างหน้าเว็บย่อยสำหรับข้อมูลเพิ่มเติม
กำลังอัปโหลดไฟล์
ตัวอย่างนี้อัปโหลดไฟล์ PDF ไปยัง FileCabinetPageEntry
ไฟล์แรกที่พบในฟีดเนื้อหาของผู้ใช้
เราสร้างไฟล์แนบที่มีชื่อว่า "เริ่มต้นใช้งาน" และคำอธิบาย (ไม่บังคับ) "แพ็กเก็ต HR"
MimetypesFileTypeMap mediaTypes = new MimetypesFileTypeMap(); mediaTypes.addMimeTypes("application/msword doc"); mediaTypes.addMimeTypes("application/vnd.ms-excel xls"); mediaTypes.addMimeTypes("application/pdf pdf"); mediaTypes.addMimeTypes("text/richtext rtx"); // ... See a more complete list of mime types in the SitesHelper.java public AttachmentEntry uploadAttachment(File file, BasePageEntry<?> parentPage, String title, String description) throws IOException, ServiceException { AttachmentEntry newAttachment = new AttachmentEntry(); newAttachment.setMediaSource(new MediaFileSource(file, mediaTypes.getContentType(file))); newAttachment.setTitle(new PlainTextConstruct(title)); newAttachment.setSummary(new PlainTextConstruct(description)); newAttachment.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, parentPage.getSelfLink().getHref()); return client.insert(new URL(buildContentFeedUrl()), newAttachment); } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=filecabinet"), ContentFeed.class); FileCabinetPageEntry parentPage = contentFeed.getEntries(FileCabinetPageEntry.class).get(0); AttachmentEntry attachment = uploadAttachment( new File("/path/to/your/file.pdf"), parentPage, "Getting Started", "HR packet"); System.out.println("Uploaded!");
หากอัปโหลดสำเร็จ attachment
จะมีสำเนาของรายการไฟล์แนบที่สร้างไว้
การอัปโหลดไฟล์แนบไปยังโฟลเดอร์
หากต้องการอัปโหลดไฟล์แนบไปยังโฟลเดอร์ที่มีอยู่ใน FileCabinetPageEntry
ให้ใส่หมวดหมู่ที่มีคำว่า "คำ" เป็นชื่อโฟลเดอร์
ตัวอย่างเช่น เพิ่มบรรทัดนี้ใน uploadAttachment()
:
newAttachment.getCategories().add(new Category("http://schemas.google.com/sites/2008#folder", "FolderName"));
ไฟล์แนบจากเว็บ
ไฟล์แนบบนเว็บเป็นไฟล์แนบชนิดพิเศษ โดยพื้นฐานแล้ว เป็นลิงก์ที่เชื่อมโยงไปยังไฟล์อื่นๆ บนเว็บ ที่คุณสามารถเพิ่มลงในรายการตู้ไฟล์ของคุณได้ ฟีเจอร์นี้คล้ายกับ "เพิ่มไฟล์ด้วย URL" ใน UI ของ Google Sites
หมายเหตุ: สามารถสร้างไฟล์แนบในเว็บได้ภายใต้หน้าจัดการไฟล์เท่านั้น แต่จะอัปโหลดไปยังหน้าเว็บประเภทอื่นๆ ไม่ได้
ตัวอย่างนี้สร้าง WebAttachmentEntry
ใต้ FileCabinetPageEntry
แรกที่พบในฟีดเนื้อหาของผู้ใช้
ตั้งชื่อและคำอธิบาย (ไม่บังคับ) เป็น "GoogleLogo" และ "สีสวย" ตามลำดับ
public WebAttachmentEntry uploadWebAttachment(String contentUrl, FileCabinetPageEntry filecabinet, String title, String description) throws MalformedURLException, IOException, ServiceException { MediaContent content = new MediaContent(); content.setUri(contentUrl); WebAttachmentEntry webAttachment = new WebAttachmentEntry(); webAttachment.setTitle(new PlainTextConstruct(title)); webAttachment.setSummary(new PlainTextConstruct(description)); webAttachment.setContent(content); webAttachment.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, filecabinet.getSelfLink().getHref()); return client.insert(new URL(buildContentFeedUrl()), webAttachment); } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=filecabinet"), ContentFeed.class); FileCabinetPageEntry parentPage = contentFeed.getEntries(FileCabinetPageEntry.class).get(0); WebAttachmentEntry webAttachment = uploadWebAttachment("http://www.google.com/images/logo.gif", parentPage, "Google's Logo", "nice colors"); System.out.println("Web attachment created!");
POST
จะสร้างลิงก์ในหน้าจัดการไฟล์ของผู้ใช้ที่ชี้ไปยังรูปภาพที่ "http://www.google.com/images/logo.gif"
การอัปเดตเนื้อหา
การอัปเดตข้อมูลเมตาของหน้าเว็บและ/หรือเนื้อหา HTML
ข้อมูลเมตา (ชื่อ, pageName ฯลฯ) และเนื้อหาหน้าเว็บของ BaseContentEntry
ประเภทใดก็ตามสามารถแก้ไขได้โดย
โดยใช้เมธอด update()
ของรายการ ที่จะส่งคำขอ HTTP PUT
ไปยัง edit
ของรายการ
ลิงก์
ด้านล่างนี้คือตัวอย่างการอัปเดต ListPageEntry
ด้วยการเปลี่ยนแปลงต่อไปนี้
- แก้ไขชื่อเป็น "รายการที่อัปเดตแล้ว"
- เนื้อหา HTML ของหน้าเว็บได้รับการอัปเดตเป็น "<p>เนื้อหา HTML ที่อัปเดต</p>"
- ส่วนหัวของคอลัมน์แรกของรายการเปลี่ยนเป็น "เจ้าของ"
ContentFeed contentFeed = client.getFeed( new URL(buildContentFeedUrl() + "?kind=listpage"), ContentFeed.class); ListPageEntry listPage = contentFeed.getEntries(ListPageEntry.class).get(0); // Update first list page found // Update title listPage.setTitle(new PlainTextConstruct("Updated Title")); // Update HTML content XmlBlob xml = new XmlBlob(); xml.setBlob("<p>Updated HTML Content</p>"); listPage.setContent(new XhtmlTextConstruct(xml)); // Change first column's heading listPage.getData().getColumns().get(0).setName("Owner"); // listPage.setPageName(new PageName("new-page-path")); // You can also change the page's URL path ListPageEntry updatedEntry = listPage.update(); System.out.println("ListPage updated!");
การอัปเดตเนื้อหาของไฟล์แนบ
สำหรับ AttachmentEntry
คุณยังอัปเดตเนื้อหาได้โดยการตั้งค่า MediaSource
ของรายการ แล้วใช้
เมธอด updateMedia(boolean)
ของรายการ
ตัวอย่างนี้จะอัปเดตเนื้อหาของไฟล์แนบที่มีอยู่
public AttachmentEntry updateFile(AttachmentEntry entry, File newFile) throws IOException, ServiceException { // See Uploading Attachments for the definition of mediaTypes. entry.setMediaSource(new MediaFileSource(newFile, mediaTypes.getContentType(newFile))); return entry.updateMedia(false); }
ตัวอย่างจะส่งคำขอ HTTP PUT
ไปยังลิงก์ edit-media
ของรายการ ผลลัพธ์
AttachmentEntry
จะมีเนื้อหาที่อัปเดต
การอัปเดตข้อมูลเมตา + เนื้อหาของไฟล์แนบ
คุณสามารถอัปเดตข้อมูลเมตาของไฟล์แนบและเนื้อหาของไฟล์แนบในการโทรเดียวกันได้โดยใช้เมธอด updateMedia()
ถ้าคุณสามารถอัปเดตเฉพาะเนื้อหาไฟล์ ข้อมูลเมตา หรือทั้งสองอย่าง
ตัวอย่างนี้เปลี่ยนชื่อไฟล์แนบเป็น "ชื่อใหม่" อัปเดตคำอธิบาย และแทนที่เนื้อหาไฟล์ด้วยไฟล์ .zip ใหม่
เนื่องจากคำขอมีเนื้อหาไฟล์ใหม่ ระบบจึงใช้ updateMedia()
ของ AttachmentEntry
public AttachmentEntry updateAttachment(AttachmentEntry entry, File newFile, String newTitle, String newDescription) throws IOException, ServiceException { // See Uploading Attachments for the definition of mediaTypes. entry.setMediaSource(new MediaFileSource(newFile, mediaTypes.getContentType(newFile))); entry.setTitle(new PlainTextConstruct(newTitle)); entry.setSummary(new PlainTextConstruct(newDescription)); return entry.updateMedia(true); } ContentFeed contentFeed = client.getFeed( new URL(buildContentFeedUrl() + "?kind=attachment&max-results=1"), ContentFeed.class); AttachmentEntry attachment = contentFeed.getEntries(AttachmentEntry.class).get(0); // Update first attachment found AttachmentEntry updatedAttachment = updateAttachment(attachment, new File("/path/to/file.zip"), "New Title", "better stuff");
การลบเนื้อหา
หากต้องการนำหน้าหรือรายการออกจากเว็บไซต์จาก Google Sites ให้เรียกข้อมูลรายการเนื้อหานั้นก่อน แล้วจึงเรียกใช้ delete()
ของรายการนั้นๆ
entry.delete();
นอกจากนี้ คุณยังสามารถใช้เมธอด delete()
ของคลาสบริการได้โดยส่งลิงก์ edit
และค่า ETag ของรายการดังต่อไปนี้
client.delete(entry.getEditLink().getHref(), "*"); // Note: using "*" may overwrite another client's changes.
หากรายการถูกลบเรียบร้อยแล้ว เซิร์ฟเวอร์จะตอบสนองด้วย HTTP 200 OK
กำลังดาวน์โหลดไฟล์แนบ
หากต้องการดาวน์โหลด AttachmentEntry
ให้ส่งคำขอ HTTP GET
ไปยังลิงก์ content src ของรายการ
ตัวอย่างนี้จะดาวน์โหลด AttachmentEntry
รายการแรกที่พบในฟีดเนื้อหาของผู้ใช้
ไปที่ไดเรกทอรี "/path/to/save/file/":
private void downloadFile(String downloadUrl, String fullFilePath) throws IOException, ServiceException { System.out.println("Downloading file from: " + downloadUrl); MediaContent mc = new MediaContent(); mc.setUri(downloadUrl); MediaSource ms = service.getMedia(mc); InputStream inStream = null; FileOutputStream outStream = null; try { inStream = ms.getInputStream(); outStream = new FileOutputStream(fullFilePath); int c; while ((c = inStream.read()) != -1) { outStream.write(c); } } finally { if (inStream != null) { inStream.close(); } if (outStream != null) { outStream.flush(); outStream.close(); } } } public void downloadAttachment(AttachmentEntry entry, String directory) throws IOException, ServiceException { String url = ((OutOfLineContent) entry.getContent()).getUri(); downloadFile(url, directory + entry.getTitle().getPlainText()); // Use entry's title for the save filename } ContentFeed contentFeed = client.getFeed( new URL(buildContentFeedUrl() + "?kind=attachment&max-results=1"), ContentFeed.class); downloadAttachment(contentFeed.getEntries(AttachmentEntry.class).get(0), "/path/to/save/file/"); System.out.println("Downloaded.");
ฟีด ACL
ภาพรวมของสิทธิ์การแชร์ (ACL)
รายการ ACL แต่ละรายการในฟีด ACL แสดงบทบาทการเข้าถึงของเอนทิตีหนึ่งๆ ซึ่งอาจเป็นผู้ใช้ กลุ่มผู้ใช้ โดเมน หรือการเข้าถึงเริ่มต้น (ซึ่งเป็นเว็บไซต์สาธารณะ) ระบบจะแสดงรายการสำหรับบุคคลที่มีสิทธิ์การเข้าถึงอย่างชัดแจ้งเท่านั้น โดยจะแสดง 1 รายการ สำหรับแต่ละอีเมลใน "ผู้ที่มีสิทธิ์เข้าถึง" ในหน้าจอการแชร์ของ UI ของ Google Sites ดังนั้นระบบจะไม่แสดงผู้ดูแลระบบโดเมน แม้ว่าพวกเขาจะมีสิทธิ์เข้าถึงเว็บไซต์โดยปริยายก็ตาม
บทบาท
องค์ประกอบบทบาทแสดงถึงระดับการเข้าถึงที่เอนทิตีหนึ่งๆ มีได้ ค่าที่เป็นไปได้ขององค์ประกอบ gAcl:role
มีอยู่ 4 ค่า ได้แก่
- reader — ผู้มีสิทธิ์อ่าน (เทียบเท่ากับสิทธิ์การเข้าถึงระดับอ่านอย่างเดียว)
- writer — ผู้ทำงานร่วมกัน (เทียบเท่ากับสิทธิ์การอ่าน/เขียน)
- owner — โดยทั่วไปคือผู้ดูแลระบบไซต์ (เทียบเท่ากับสิทธิ์การอ่าน/เขียน)
ขอบเขต
องค์ประกอบขอบเขตแสดงถึงเอนทิตีที่มีระดับการเข้าถึงนี้ องค์ประกอบ gAcl:scope
ที่เป็นไปได้มี 4 ประเภทดังนี้
- user — ค่าที่อยู่อีเมล เช่น "user@gmail.com"
- group — ที่อยู่อีเมลของกลุ่ม Google เช่น "group@domain.com"
- domain — ชื่อโดเมน G Suite เช่น "domain.com"
- default — มีขอบเขตประเภท "ค่าเริ่มต้น" ที่เป็นไปได้เพียง 1 ขอบเขตซึ่งไม่มีค่า
(เช่น
<gAcl:scope type="default">
) ขอบเขตเฉพาะนี้ควบคุมการเข้าถึงที่ผู้ใช้มีโดยค่าเริ่มต้น บนเว็บไซต์สาธารณะ
หมายเหตุ: โดเมนมีค่า gAcl:role
ไม่ได้
ตั้งค่าเป็น "เจ้าของ" คุณก็เป็น
ผู้อ่านหรือผู้เขียนได้เท่านั้น
กำลังเรียกฟีด ACL
คุณใช้คลาส AclFeed
และ AclEntry
เพื่อควบคุมการแชร์ของเว็บไซต์ได้
และจะดึงข้อมูลได้โดยใช้เมธอด getFeed()
ของคลาสบริการ
ตัวอย่างต่อไปนี้จะดึงข้อมูลฟีด ACL สำหรับเว็บไซต์ใดเว็บไซต์หนึ่ง และพิมพ์สิทธิ์ของ
แต่ละ AclEntry
:
public String getAclFeedUrl(String siteName) { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) return "https://sites.google.com/feeds/acl/site/" + domain + "/" + siteName + "/"; } public void getAclFeed(String siteName) throws IOException, ServiceException { AclFeed aclFeed = client.getFeed(new URL(getAclFeedUrl(siteName)), AclFeed.class); for (AclEntry entry : aclFeed.getEntries()) { System.out.println(entry.getScope().getValue() + " (" + entry.getScope().getType() + ") : " + entry.getRole().getValue()); } } getAclFeed('my-site-name');
หากคุณกำลังทำงานกับรายการใน SiteFeed SiteEntry
แต่ละรายการจะมีลิงก์ไปยังฟีด ACL
ตัวอย่างเช่น ข้อมูลโค้ดนี้ดึงฟีด ACL ของ SiteEntry
:
String aclLink = siteEntry.getLink(SitesAclFeedLink.Rel.ACCESS_CONTROL_LIST, Link.Type.ATOM).getHref(); AclFeed aclFeed = client.getFeed(new URL(aclLink), AclFeed.class);
การแชร์เว็บไซต์
หมายเหตุ: ACL การแชร์บางรายการอาจเป็นไปได้เฉพาะเมื่อมีการกำหนดค่าโดเมน เพื่ออนุญาตสิทธิ์ดังกล่าว (เช่น มีการเปิดใช้การแชร์ภายนอกโดเมนสำหรับโดเมน G Suite เป็นต้น)
หากต้องการแชร์เว็บไซต์จาก Google Sites โดยใช้ API ลูกค้าของคุณต้องสร้างเว็บไซต์
AclEntry
และ POST
ไปยังเซิร์ฟเวอร์
นี่คือตัวอย่างที่เพิ่ม "user@example.com" เป็น reader
ในเว็บไซต์:
AclRole role = new AclRole("reader"); AclScope scope = new AclScope(AclScope.Type.USER, "user@example.com"); AclEntry aclEntry = addAclRole(role, scope, entry); public AclEntry addAclRole(AclRole role, AclScope scope, SiteEntry siteEntry) throws IOException, MalformedURLException, ServiceException { AclEntry aclEntry = new AclEntry(); aclEntry.setRole(role); aclEntry.setScope(scope); Link aclLink = siteEntry.getLink(SitesAclFeedLink.Rel.ACCESS_CONTROL_LIST, Link.Type.ATOM); return client.insert(new URL(aclLink.getHref()), aclEntry); }
ดูส่วนภาพรวมฟีด ACL เพื่อหา AclScope
ที่เป็นไปได้
และค่า AclRoles
การแชร์ระดับกลุ่มและโดเมน
เช่นเดียวกับการแชร์ไซต์กับผู้ใช้รายเดียว คุณสามารถแชร์ไซต์ระหว่าง กลุ่ม Google หรือโดเมน G Suite
การแชร์ไปยังอีเมลของกลุ่ม:
AclScope scope = new AclScope(AclScope.Type.GROUP, "group_name@example.com");
แชร์กับทั้งโดเมน:
AclScope scope = new AclScope(AclScope.Type.DOMAIN, "example.com");
การแชร์ในระดับโดเมนรองรับเฉพาะโดเมน G Suite และโดเมนที่โฮสต์เว็บไซต์เท่านั้น ตัวอย่างเช่น http://sites.google.com/a/domain1.com/siteA สามารถแชร์เว็บไซต์ทั้งไซต์กับ domain1.com ได้เท่านั้น ไม่สามารถใช้ domain2.com เว็บไซต์ที่ ไม่ได้โฮสต์อยู่บนโดเมน G Suite (เช่น http://sites.google.com/site/siteB) ไม่สามารถเชิญโดเมนได้
การแก้ไขสิทธิ์การแชร์
สำหรับสิทธิ์การแชร์ที่มีอยู่แล้วในเว็บไซต์ ให้ดึงข้อมูล AclEntry
ที่เป็นปัญหาก่อน และแก้ไขสิทธิ์
ตามต้องการ แล้วเรียกเมธอด update()
ของ AclEntry
เพื่อแก้ไข ACL ในเซิร์ฟเวอร์
ตัวอย่างนี้จะแก้ไขตัวอย่าง aclEntry
ก่อนหน้าของเราจากส่วนการแชร์เว็บไซต์
โดยการอัปเดต "user@example.com" เป็น writer
(ผู้ทำงานร่วมกัน):
aclEntry.setRole(new AclRole("writer")); AclEntry updatedAclEntry = aclEntry.update(); // Could also use the client's update method // client.update(new URL(aclEntry.getEditLink().getHref()), aclEntry);
ดูข้อมูลเพิ่มเติมเกี่ยวกับ ETag ได้จากคู่มืออ้างอิงสำหรับ Google Data API
กำลังลบสิทธิ์การแชร์
หากต้องการนำสิทธิ์การแชร์ออก ให้เรียกข้อมูล AclEntry
ก่อน จากนั้นจึงเรียกใช้เมธอด delete()
ของสิทธิ์นั้น
aclEntry.delete(); // Could also use the client's delete method // client.delete(new URL(aclEntry.getEditLink().getHref()), aclEntry);
ดูข้อมูลเพิ่มเติมเกี่ยวกับ ETag ได้จากคู่มืออ้างอิงสำหรับ Google Data API
หัวข้อพิเศษ
การดึงข้อมูลฟีดหรือรายการอีกครั้ง
ถ้าต้องการเรียกฟีดหรือรายการที่เคยดึงข้อมูลมาก่อน คุณสามารถปรับปรุงประสิทธิภาพได้โดยบอก เซิร์ฟเวอร์จะส่งรายการหรือรายการได้ต่อเมื่อมีการเปลี่ยนแปลงนับตั้งแต่ที่คุณดึงข้อมูลมาครั้งล่าสุดเท่านั้น
ในการดึงข้อมูลแบบมีเงื่อนไขแบบนี้ ทั้งเมธอด getFeed()
และ getEntry()
จะมี
อาร์กิวเมนต์เพิ่มเติมที่ยอมรับค่า ETag หรือออบเจ็กต์ DateTime
สำหรับส่วนหัว If-Modified-Since
คุณเข้าถึงแท็กของรายการได้จาก entry.getEtag()
ตัวอย่างนี้เป็นการดึงข้อมูลแบบมีเงื่อนไขสำหรับรายการหน้าเว็บเนื้อหา
String feedUrl = "https://sites.google.com/feeds/content/site/siteName/123456789"; WebPageEntry entry = client.getEntry(new URL(feedUrl), WebPageEntry.class, "\"GVQHSARDQyp7ImBq\"");
เมื่อเซิร์ฟเวอร์ได้รับคำขอนี้ เซิร์ฟเวอร์จะตรวจสอบว่ารายการที่คุณขอมี ETag เหมือนกับ
ETag ที่คุณระบุ หาก ETag ตรงกัน แสดงว่ารายการไม่มีการเปลี่ยนแปลง และเซิร์ฟเวอร์แสดงผล
ระบบจะส่งข้อยกเว้น HTTP 304 NotModifiedException
หาก ETag ไม่ตรงกัน แสดงว่ารายการนั้นมีการแก้ไขตั้งแต่ตอนที่คุณส่งคำขอครั้งล่าสุด และเซิร์ฟเวอร์ส่งสินค้าคืนมา
ดูข้อมูลเพิ่มเติมเกี่ยวกับ ETag ได้จากคู่มืออ้างอิงสำหรับ Google Data API