สำคัญ: เอกสารนี้เขียนก่อนปี 2012 ตัวเลือกการตรวจสอบสิทธิ์ที่อธิบายไว้ในเอกสารนี้ (OAuth 1.0, AuthSub และ ClientLogin) ได้รับการเลิกใช้งานอย่างเป็นทางการ เมื่อวันที่ 20 เมษายน 2012 และไม่สามารถใช้ได้อีก เราขอแนะนำให้ย้ายข้อมูลไปยัง OAuth 2.0 โดยเร็วที่สุด
Google Sites Data API ช่วยให้แอปพลิเคชันไคลเอ็นต์เข้าถึง เผยแพร่ และแก้ไขเนื้อหาภายในเว็บไซต์จาก Google Sites ได้ แอปพลิเคชันไคลเอ็นต์ยังขอรายการกิจกรรมล่าสุด ดึงข้อมูลประวัติการแก้ไข และดาวน์โหลดไฟล์แนบได้ด้วย
นอกจากให้ข้อมูลเบื้องต้นเกี่ยวกับความสามารถของ Sites Data API แล้ว คู่มือนี้ยังมีตัวอย่างการโต้ตอบกับ API โดยใช้ไลบรารีของไคลเอ็นต์ Python ด้วย หากต้องการความช่วยเหลือในการตั้งค่าไลบรารีของไคลเอ็นต์ โปรดดูหัวข้อการเริ่มต้นใช้งานไลบรารีของไคลเอ็นต์ Python สำหรับ Google Data หากคุณสนใจที่จะทำความเข้าใจเพิ่มเติมเกี่ยวกับโปรโตคอลพื้นฐานที่ไลบรารีของไคลเอ็นต์ Python ใช้เพื่อโต้ตอบกับ Sites API แบบคลาสสิก โปรดดูคู่มือโปรโตคอล
ผู้ชม
เอกสารนี้มีไว้สำหรับนักพัฒนาซอฟต์แวร์ที่เขียนแอปพลิเคชันไคลเอ็นต์ซึ่งโต้ตอบกับ Google Sites โดยใช้ไลบรารีของไคลเอ็นต์ Python สำหรับ Google Data
เริ่มต้นใช้งาน
หากต้องการใช้ไลบรารีของไคลเอ็นต์ Python คุณจะต้องมี Python 2.2 ขึ้นไปและโมดูลที่แสดงอยู่ในหน้า wiki ของ DependencyModules หลังจากดาวน์โหลดไลบรารีของไคลเอ็นต์แล้ว ให้ดูการเริ่มต้นใช้งานไลบรารี Python ของ Google Data เพื่อรับความช่วยเหลือในการติดตั้งและใช้งานไคลเอ็นต์
การเรียกใช้ตัวอย่าง
ตัวอย่างที่ใช้งานได้อย่างสมบูรณ์อยู่ในไดเรกทอรีย่อย samples/sites
ของที่เก็บ Mercurial ของโปรเจ็กต์ (/samples/sites/sites_example.py)
เรียกใช้ตัวอย่างดังนี้
python sites_example.py # or python sites_example.py --site [sitename] --domain [domain or "site"] --debug [prints debug info if set]
หากไม่ได้ระบุ Flag ที่จำเป็น แอปจะแจ้งให้คุณป้อนค่าเหล่านั้น ตัวอย่างนี้ช่วยให้ผู้ใช้ดําเนินการต่างๆ ซึ่งสาธิตวิธีใช้ Sites API แบบคลาสสิก ดังนั้น คุณจะต้องตรวจสอบสิทธิ์เพื่อดำเนินการบางอย่าง (เช่น การแก้ไขเนื้อหา) โปรแกรมจะแสดงข้อความแจ้งให้คุณตรวจสอบสิทธิ์ผ่าน AuthSub, OAuth หรือ ClientLogin
หากต้องการรวมตัวอย่างในคู่มือนี้ไว้ในโค้ดของคุณเอง คุณจะต้องมีคำสั่ง import
ต่อไปนี้
import atom.data import gdata.sites.client import gdata.sites.data
นอกจากนี้ คุณจะต้องตั้งค่าออบเจ็กต์ SitesClient
ซึ่งแสดงการเชื่อมต่อไคลเอ็นต์กับ Sites API แบบคลาสสิก
ส่งชื่อแอปพลิเคชันของคุณและชื่อเว็บสเปซของเว็บไซต์ (จาก URL ของเว็บไซต์):
client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1', site='yourSiteName')
หากต้องการจัดการกับเว็บไซต์ที่โฮสต์ในโดเมน G Suite ให้ตั้งค่าโดเมนโดยใช้พารามิเตอร์ domain
ดังนี้
client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1', site='yourSiteName', domain='example.com')
ในตัวอย่างข้างต้น จะใช้อาร์กิวเมนต์ source
หรือไม่ก็ได้ แต่เราแนะนำให้ใช้เพื่อวัตถุประสงค์ในการบันทึก โดยควรอยู่ในรูปแบบ company-applicationname-version
หมายเหตุ: คำแนะนำที่เหลือจะถือว่าคุณสร้างออบเจ็กต์ SitesClient
ในตัวแปร client
การตรวจสอบสิทธิ์กับ Sites API แบบคลาสสิก
ไลบรารีไคลเอ็นต์ Python สามารถใช้กับฟีดสาธารณะหรือส่วนตัวก็ได้ API ข้อมูลของ Sites จะให้สิทธิ์เข้าถึงฟีดส่วนตัวและฟีดสาธารณะตามสิทธิ์ของเว็บไซต์และการดำเนินการที่คุณพยายามทำ เช่น คุณอาจอ่านฟีดเนื้อหาของเว็บไซต์สาธารณะได้ แต่ไม่อัปเดตฟีดได้ ซึ่งต้องใช้ไคลเอ็นต์ที่ตรวจสอบสิทธิ์แล้ว ซึ่งทำได้ผ่านการตรวจสอบสิทธิ์ชื่อผู้ใช้/รหัสผ่าน ClientLogin, AuthSub หรือ OAuth
โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับ AuthSub, OAuth และ ClientLogin ที่ภาพรวมการตรวจสอบสิทธิ์ของ Google Data API
AuthSub สำหรับเว็บแอปพลิเคชัน
แอปพลิเคชันไคลเอ็นต์ที่ต้องตรวจสอบสิทธิ์ผู้ใช้ในบัญชี Google หรือ G Suite ควรใช้การตรวจสอบสิทธิ์ AuthSub สำหรับเว็บแอปพลิเคชัน โอเปอเรเตอร์ไม่จำเป็นต้องเข้าถึงชื่อผู้ใช้และรหัสผ่านสำหรับผู้ใช้ Google Sites เพียงต้องใช้โทเค็น AuthSub เท่านั้น
ดูวิธีการรวม AuthSub ไว้ในเว็บแอปพลิเคชัน
ขอโทเค็นแบบใช้ครั้งเดียว
เมื่อผู้ใช้เข้าชมแอปพลิเคชันเป็นครั้งแรก ผู้ใช้จะต้องตรวจสอบสิทธิ์ โดยทั่วไป นักพัฒนาแอปจะพิมพ์ข้อความและลิงก์ที่นําผู้ใช้ไปยังหน้าการอนุมัติ AuthSub เพื่อตรวจสอบสิทธิ์ผู้ใช้และขอสิทธิ์เข้าถึงเอกสาร ไลบรารีของไคลเอ็นต์ Google Data Python มีฟังก์ชัน generate_auth_sub_url()
ในการสร้าง URL นี้ โค้ดด้านล่างจะตั้งค่าลิงก์ไปยังหน้า AuthSubRequest
import gdata.gauth def GetAuthSubUrl(): next = 'http://www.example.com/myapp.py' scopes = ['https://sites.google.com/feeds/'] secure = True session = True return gdata.gauth.generate_auth_sub_url(next, scopes, secure=secure, session=session) print '<a href="%s">Login to your Google account</a>' % GetAuthSubUrl()
หากต้องการตรวจสอบสิทธิ์ผู้ใช้ในโดเมนที่โฮสต์โดย G Suite ให้ส่งชื่อโดเมนไปยัง generate_auth_sub_url()
ดังนี้
def GetAuthSubUrl(): domain = 'example.com' next = 'http://www.example.com/myapp.py' scopes = ['https://sites.google.com/feeds/'] secure = True session = True return gdata.gauth.generate_auth_sub_url(next, scopes, secure=secure, session=session, domain=domain)
เมธอด generate_auth_sub_url()
ใช้พารามิเตอร์หลายรายการ (ซึ่งสอดคล้องกับพารามิเตอร์การค้นหาที่ตัวแฮนเดิล AuthSubRequest ใช้) ดังนี้
- URL ถัดไป - URL ที่ Google จะเปลี่ยนเส้นทางไปหลังจากผู้ใช้เข้าสู่ระบบบัญชีและมอบสิทธิ์เข้าถึงแล้ว
http://www.example.com/myapp.py
ในตัวอย่างด้านบน - ขอบเขต —
https://sites.google.com/feeds/
- secure ซึ่งเป็นบูลีนเพื่อระบุว่าจะใช้โทเค็นในโหมดที่ปลอดภัยและลงทะเบียนแล้วหรือไม่
True
ในตัวอย่างด้านบน - session เป็นบูลีนรายการที่ 2 ที่ใช้ระบุว่าจะมีการแลกเปลี่ยนโทเค็นแบบใช้ครั้งเดียวเป็นโทเค็นเซสชันในภายหลังหรือไม่
True
ในตัวอย่างด้านบน
การอัปเกรดเป็นโทเค็นเซสชัน
โปรดดูการใช้ AuthSub กับไลบรารีของไคลเอ็นต์ Google Data API
การเรียกข้อมูลเกี่ยวกับโทเค็นเซสชัน
โปรดดูการใช้ AuthSub กับไลบรารีของไคลเอ็นต์ Google Data API
การเพิกถอนโทเค็นเซสชัน
โปรดดูการใช้ AuthSub กับไลบรารีของไคลเอ็นต์ Google Data API
เคล็ดลับ: เมื่อแอปพลิเคชันได้รับโทเค็นเซสชันที่มีอายุการใช้งานยาวนานเรียบร้อยแล้ว ให้จัดเก็บโทเค็นนั้นไว้ในฐานข้อมูลเพื่อเรียกใช้ภายหลัง คุณไม่จำเป็นต้องส่งผู้ใช้กลับไปที่ AuthSub ทุกครั้งที่เรียกใช้แอปพลิเคชัน
ใช้ client.auth_token = gdata.gauth.AuthSubToken(TOKEN_STR)
เพื่อตั้งค่าโทเค็นที่มีอยู่บนไคลเอ็นต์
OAuth สำหรับเว็บหรือแอปพลิเคชันที่ติดตั้ง/แอปบนอุปกรณ์เคลื่อนที่
OAuth สามารถใช้แทน AuthSub และมีไว้สำหรับเว็บแอปพลิเคชัน OAuth คล้ายกับการใช้โหมดที่ปลอดภัยและจดทะเบียนแล้วของ AuthSub ตรงที่คำขอข้อมูลทั้งหมดต้องมีการลงนามแบบดิจิทัลและคุณต้องจดทะเบียนโดเมน
ดูวิธีการรวม OAuth ไว้ในแอปพลิเคชันที่ติดตั้ง
กำลังดึงข้อมูลโทเค็นคำขอ
โปรดดูการใช้ OAuth กับไลบรารีของไคลเอ็นต์ Google Data API
การให้สิทธิ์โทเค็นคำขอ
โปรดดูการใช้ OAuth กับไลบรารีของไคลเอ็นต์ Google Data API
การอัปเกรดเป็นโทเค็นการเข้าถึง
โปรดดูการใช้ OAuth กับไลบรารีของไคลเอ็นต์ Google Data API
เคล็ดลับ: เมื่อแอปพลิเคชันได้รับโทเค็นการเข้าถึง OAuth เรียบร้อยแล้ว ให้จัดเก็บโทเค็นนั้นไว้ในฐานข้อมูลเพื่อเรียกใช้ภายหลัง โดยไม่จำเป็นต้องส่งผู้ใช้กลับผ่าน OAuth ในทุกการเรียกใช้แอปพลิเคชัน
ใช้ client.auth_token = gdata.oauth.OAuthToken(TOKEN_STR, TOKEN_SECRET)
เพื่อตั้งค่าโทเค็นที่มีอยู่บนไคลเอ็นต์
ClientLogin สำหรับแอปพลิเคชันที่ติดตั้ง/บนอุปกรณ์เคลื่อนที่
ควรใช้ ClientLogin โดยแอปพลิเคชันที่ติดตั้งหรือแอปพลิเคชันบนอุปกรณ์เคลื่อนที่ซึ่งต้องตรวจสอบสิทธิ์ผู้ใช้สำหรับบัญชี Google เมื่อเรียกใช้ครั้งแรก แอปพลิเคชันจะแจ้งให้ผู้ใช้ป้อนชื่อผู้ใช้/รหัสผ่าน ระบบจะอ้างอิงโทเค็นการตรวจสอบสิทธิ์ในคำขอที่ตามมา
ดูวิธีการรวม ClientLogin ไว้ในแอปพลิเคชันที่ติดตั้ง
หากต้องการใช้ ClientLogin ให้เรียกใช้เมธอด ClientLogin()
ของออบเจ็กต์ SitesClient
ซึ่งรับค่ามาจาก GDClient
ระบุอีเมลและรหัสผ่านของผู้ใช้ที่ลูกค้าส่งคำขอในนาม เช่น
client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1') client.ClientLogin('user@gmail.com', 'pa$$word', client.source);
เคล็ดลับ: เมื่อแอปพลิเคชันตรวจสอบสิทธิ์ผู้ใช้เป็นครั้งแรกเรียบร้อยแล้ว ให้จัดเก็บโทเค็นการตรวจสอบสิทธิ์ไว้ในฐานข้อมูลเพื่อเรียกใช้ภายหลัง คุณไม่จำเป็นต้องแจ้งให้ผู้ใช้ป้อนรหัสผ่านทุกครั้งที่เรียกใช้แอปพลิเคชัน ดูข้อมูลเพิ่มเติมได้ที่การเรียกโทเค็นการตรวจสอบสิทธิ์
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ ClientLogin ในแอปพลิเคชัน Python ของคุณ โปรดดูที่การใช้ ClientLogin กับไลบรารีไคลเอ็นต์ Google Data API
ฟีดเว็บไซต์
ฟีดเว็บไซต์สามารถใช้แสดงรายการ Google Sites ที่ผู้ใช้เป็นเจ้าของหรือมีสิทธิ์ดู นอกจากนี้ยังใช้แก้ไขชื่อของเว็บไซต์ที่มีอยู่ได้ด้วย สุดท้าย สำหรับโดเมน G Suite เครื่องมือนี้ยังใช้สร้างและ/หรือคัดลอกทั้งเว็บไซต์ได้ด้วย
เว็บไซต์ข้อมูล
หากต้องการแสดงรายการเว็บไซต์ที่ผู้ใช้มีสิทธิ์เข้าถึง ให้ใช้เมธอด GetSiteFeed()
ของไคลเอ็นต์ เมธอดนี้ใช้อาร์กิวเมนต์ uri
ที่ไม่บังคับ ซึ่งคุณอาจใช้เพื่อระบุ URI ของฟีดเว็บไซต์ทางเลือกได้ โดยค่าเริ่มต้น GetSiteFeed()
จะใช้ชื่อเว็บไซต์และโดเมนที่ตั้งค่าไว้ในออบเจ็กต์ไคลเอ็นต์ ดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าค่าเหล่านี้ในออบเจ็กต์ไคลเอ็นต์ได้ที่ส่วนการเริ่มต้นใช้งาน
ต่อไปนี้คือตัวอย่างการดึงข้อมูลรายการเว็บไซต์ของผู้ใช้ที่ตรวจสอบสิทธิ์แล้ว
feed = client.GetSiteFeed() for entry in feed.entry: print '%s (%s)' % (entry.title.text, entry.site_name.text) if entry.summary.text: print 'description: ' + entry.summary.text if entry.FindSourceLink(): print 'this site was copied from site: ' + entry.FindSourceLink() print 'acl feed: %s\n' % entry.FindAclLink() print 'theme: ' + entry.theme.text
ข้อมูลโค้ดด้านบนจะแสดงชื่อเว็บไซต์ ชื่อเว็บไซต์ที่คัดลอกมาจาก และ URI ของฟีด ACL
การสร้างเว็บไซต์ใหม่
หมายเหตุ: ฟีเจอร์นี้ใช้ได้กับโดเมน G Suite เท่านั้น
คุณจัดสรรเว็บไซต์ใหม่ได้โดยเรียกใช้เมธอด CreateSite()
ของไลบรารี
CreateSite()
ยังยอมรับอาร์กิวเมนต์ uri
ที่ไม่บังคับด้วย ซึ่งคล้ายกับตัวช่วย GetSiteFeed()
ที่คุณอาจใช้เพื่อระบุ URI ของฟีดเว็บไซต์อื่น (ในกรณีที่สร้างเว็บไซต์ภายใต้โดเมนอื่นที่ไม่ใช่โดเมนที่ตั้งค่าไว้ในออบเจ็กต์ SitesClient
)
ต่อไปนี้คือตัวอย่างการสร้างเว็บไซต์ใหม่ที่มีธีม "slate" และระบุชื่อและคําอธิบาย (ไม่บังคับ)
client.domain = 'example2.com' # demonstrates creating a site under a different domain. entry = client.CreateSite('Title For My Site', description='Site to hold precious memories', theme='slate') print 'Site created! View it at: ' + entry.GetAlternateLink().href
คำขอข้างต้นจะสร้างเว็บไซต์ใหม่ภายใต้โดเมน G Suite example2.com
ดังนั้น URL ของเว็บไซต์จะเป็น https://sites.google.com/a/example2.com/title-for-my-site
หากสร้างเว็บไซต์สำเร็จ เซิร์ฟเวอร์จะตอบกลับด้วยออบเจ็กต์ gdata.sites.data.SiteEntry
ซึ่งมีองค์ประกอบที่เซิร์ฟเวอร์เพิ่มเข้ามา ได้แก่ ลิงก์ไปยังเว็บไซต์ ลิงก์ไปยังฟีด ACL ของเว็บไซต์ ชื่อเว็บไซต์ ชื่อ ข้อมูลสรุป และอื่นๆ
การคัดลอกเว็บไซต์
หมายเหตุ: ฟีเจอร์นี้ใช้ได้กับโดเมน G Suite เท่านั้น
นอกจากนี้ CreateSite()
ยังใช้เพื่อคัดลอกเว็บไซต์ที่มีอยู่ได้ด้วย โดยส่งอาร์กิวเมนต์คีย์เวิร์ด source_site
เว็บไซต์ที่คัดลอกจะมีลิงก์นี้ซึ่งเข้าถึงได้ผ่าน entry.FindSourceLink()
ต่อไปนี้คือตัวอย่างการทําซ้ำเว็บไซต์ที่สร้างขึ้นในส่วนการสร้างเว็บไซต์ใหม่
copied_site = client.CreateSite('Copy of Title For My Site', description='My Copy', source_site=entry.FindSourceLink()) print 'Site copied! View it at: ' + copied_site.GetAlternateLink().href
ประเด็นสำคัญ
- คุณจะคัดลอกได้เฉพาะเว็บไซต์และเทมเพลตเว็บไซต์ที่ผู้ใช้ที่ตรวจสอบสิทธิ์เป็นเจ้าของ
- นอกจากนี้ คุณยังคัดลอกเทมเพลตเว็บไซต์ได้ด้วย เว็บไซต์จะเป็นเทมเพลตหากเลือกการตั้งค่า "เผยแพร่เว็บไซต์นี้เป็นเทมเพลต" ในหน้าการตั้งค่า Google Sites
- คุณสามารถคัดลอกเว็บไซต์จากโดเมนอื่นได้ ตราบใดที่คุณแสดงตนเป็นเจ้าของในเว็บไซต์ต้นทาง
การอัปเดตข้อมูลเมตาของเว็บไซต์
หากต้องการอัปเดตชื่อหรือข้อมูลสรุปของเว็บไซต์ คุณจะต้องมี SiteEntry
ที่มีเว็บไซต์ดังกล่าว ตัวอย่างนี้ใช้เมธอด GetEntry()
เพื่อดึงข้อมูล SiteEntry
ก่อน จากนั้นจึงเปลี่ยนชื่อ คำอธิบาย และแท็กหมวดหมู่
uri = 'https://sites.google.com/feeds/site/example2.com/title-for-my-site' site_entry = client.GetEntry(uri, desired_class=gdata.sites.data.SiteEntry) site_entry.title.text = 'Better Title' site_entry.summary.text = 'Better Description' category_name = 'My Category' category = atom.data.Category( scheme=gdata.sites.data.TAG_KIND_TERM, term=category_name) site_entry.category.append(category) updated_site_entry = client.Update(site_entry) # To force the update, even if you do not have the latest changes to the entry: # updated_site_entry = client.Update(site_entry, force=True)
การดึงข้อมูลฟีดกิจกรรม
หมายเหตุ: คุณต้องเป็นผู้ทำงานร่วมกันหรือเจ้าของเว็บไซต์จึงจะเข้าถึงฟีดนี้ได้ ไคลเอ็นต์ต้องตรวจสอบสิทธิ์โดยใช้โทเค็น AuthSub, OAuth หรือ ClientLogin โปรดดูการตรวจสอบสิทธิ์เพื่อเข้าถึงบริการ Sites
คุณสามารถดึงข้อมูลกิจกรรม (การเปลี่ยนแปลง) ล่าสุดของเว็บไซต์ได้โดยดึงข้อมูลฟีดกิจกรรม
เมธอด GetActivityFeed()
ของ Lib ให้สิทธิ์เข้าถึงฟีดนี้:
print "Fetching activity feed of '%s'...\n" % client.site feed = client.GetActivityFeed() for entry in feed.entry: print '%s [%s on %s]' % (entry.title.text, entry.Kind(), entry.updated.text)
การเรียกใช้ GetActivityFeed()
จะแสดงผลออบเจ็กต์ gdata.sites.data.ActivityFeed
ที่มีรายการ gdata.sites.data.ActivityEntry
ข้อมูลกิจกรรมแต่ละรายการจะมีข้อมูลเกี่ยวกับ
การเปลี่ยนแปลงที่ทำในเว็บไซต์
กำลังดึงข้อมูลประวัติการแก้ไข
หมายเหตุ: คุณต้องเป็นผู้ทำงานร่วมกันหรือเจ้าของเว็บไซต์จึงจะเข้าถึงฟีดนี้ได้ ไคลเอ็นต์ของคุณต้องตรวจสอบสิทธิ์โดยใช้โทเค็น AuthSub, OAuth หรือ ClientLogin โปรดดูการตรวจสอบสิทธิ์เพื่อเข้าถึงบริการ Sites
ฟีดการแก้ไขจะให้ข้อมูลเกี่ยวกับประวัติการแก้ไขของรายการเนื้อหา คุณใช้เมธอด GetRevisionFeed()
เพื่อดึงข้อมูลการแก้ไขสำหรับรายการเนื้อหาที่ระบุได้ เมธอดนี้ใช้พารามิเตอร์ uri
แบบไม่บังคับซึ่งยอมรับ gdata.sites.data.ContentEntry
, URI แบบเต็มของรายการเนื้อหา หรือรหัสรายการเนื้อหา
ตัวอย่างนี้จะค้นหาฟีดเนื้อหา และดึงฟีดการแก้ไขสำหรับรายการเนื้อหาแรก
print "Fetching content feed of '%s'...\n" % client.site content_feed = client.GetContentFeed() content_entry = content_feed.entry[0] print "Fetching revision feed of '%s'...\n" % content_entry.title.text revision_feed = client.GetRevisionFeed(content_entry) for entry in revision_feed.entry: print entry.title.text print ' new version on:\t%s' % entry.updated.text print ' view changes:\t%s' % entry.GetAlternateLink().href print ' current version:\t%s...\n' % str(entry.content.html)[0:100]
การเรียกใช้ GetRevisionFeed()
จะแสดงผลออบเจ็กต์ gdata.sites.data.RevisionFeed
ที่มีรายการ gdata.sites.data.RevisionEntry
รายการการแก้ไขแต่ละรายการจะมีข้อมูล เช่น เนื้อหาในการแก้ไขครั้งนั้น หมายเลขเวอร์ชัน และเวลาที่สร้างเวอร์ชันใหม่
ฟีดเนื้อหา
กำลังเรียกข้อมูลฟีดเนื้อหา
หมายเหตุ: ฟีดเนื้อหาอาจต้องการตรวจสอบสิทธิ์หรือไม่ก็ได้ ทั้งนี้ขึ้นอยู่กับสิทธิ์การแชร์ของเว็บไซต์ หากไซต์ไม่เป็นสาธารณะ ไคลเอ็นต์ของคุณต้องตรวจสอบสิทธิ์โดยใช้โทเค็น AuthSub, OAuth หรือ ClientLogin โปรดดูการตรวจสอบสิทธิ์กับบริการ Sites
ฟีดเนื้อหาจะแสดงเนื้อหาล่าสุดของเว็บไซต์ คุณสามารถเข้าถึงได้โดยเรียกใช้เมธอด GetContentFeed()
ของ lib ซึ่งใช้พารามิเตอร์สตริง uri
ที่ไม่บังคับในการส่งคําค้นหาที่กําหนดเอง
ต่อไปนี้คือตัวอย่างการดึงข้อมูลฟีดเนื้อหาทั้งหมดและพิมพ์องค์ประกอบที่น่าสนใจบางส่วน
print "Fetching content feed of '%s'...\n" % client.site feed = client.GetContentFeed() for entry in feed.entry: print '%s [%s]' % (entry.title.text, entry.Kind()) # Common properties of all entry kinds. print ' content entry id: ' + entry.GetNodeId() print ' revision:\t%s' % entry.revision.text print ' updated:\t%s' % entry.updated.text if entry.page_name: print ' page name:\t%s' % entry.page_name.text if entry.content: print ' content\t%s...' % str(entry.content.html)[0:100] # Subpages/items will have a parent link. parent_link = entry.FindParentLink() if parent_link: print ' parent link:\t%s' % parent_link # The alternate link is the URL pointing to Google Sites. if entry.GetAlternateLink(): print ' view in Sites:\t%s' % entry.GetAlternateLink().href # If this entry is a filecabinet, announcementpage, etc., it will have a feed of children. if entry.feed_link: print ' feed of items:\t%s' % entry.feed_link.href print
เคล็ดลับ: คุณสามารถใช้ entry.Kind()
เพื่อระบุประเภทของรายการได้
ออบเจ็กต์ feed
ที่ได้จะเป็น gdata.sites.data.ContentFeed
ที่มีรายการ gdata.sites.data.ContentEntry
แต่ละรายการแสดงหน้าเว็บ/รายการที่แตกต่างกันภายในเว็บไซต์ของผู้ใช้ และมีองค์ประกอบเฉพาะสำหรับประเภทของรายการนั้นๆ โปรดดูตัวอย่างแอปพลิเคชันเพื่อให้ทราบถึงพร็อพเพอร์ตี้บางอย่างที่มีให้ใช้งานในแต่ละประเภทของรายการ
ตัวอย่างการค้นหาฟีดเนื้อหา
คุณสามารถค้นหาฟีดเนื้อหาได้โดยใช้พารามิเตอร์การค้นหา Google Data API มาตรฐานและพารามิเตอร์เฉพาะสำหรับ Sites API แบบคลาสสิก ดูข้อมูลโดยละเอียดและรายการพารามิเตอร์ที่รองรับทั้งหมดได้ในคู่มืออ้างอิง
หมายเหตุ: ตัวอย่างในส่วนนี้ใช้เมธอดตัวช่วย gdata.sites.client.MakeContentFeedUri()
เพื่อสร้าง URI พื้นฐานของฟีดเนื้อหา
การดึงข้อมูลรายการบางประเภท
หากต้องการดึงข้อมูลประเภทรายการเฉพาะ ให้ใช้พารามิเตอร์ kind
สำหรับตัวอย่างนี้ ข้อมูลโค้ดนี้จะแสดงเฉพาะ attachment
รายการ
kind = 'webpage' print 'Fetching only %s entries' % kind uri = '%s?kind=%s' % (client.MakeContentFeedUri(), kind) feed = client.GetContentFeed(uri=uri)
หากต้องการแสดงผลมากกว่า 1 ประเภท ให้คั่น kind
แต่ละรายการด้วยคอมมา ตัวอย่างเช่น ข้อมูลโค้ดนี้จะแสดง filecabinet
และ listpage
รายการ
kind = ','.join(['filecabinet', 'listpage']) print 'Fetching only %s entries' % kind uri = '%s?kind=%s' % (client.MakeContentFeedUri(), kind) feed = client.GetContentFeed(uri=uri)
การเรียกหน้าเว็บตามเส้นทาง
หากทราบเส้นทางแบบสัมพัทธ์ของหน้าใน Google Site คุณสามารถใช้พารามิเตอร์ path
เพื่อดึงข้อมูลหน้านั้นๆ ได้
ตัวอย่างนี้จะแสดงหน้าเว็บที่อยู่ที่
http://sites.google.com/domainName/siteName/path/to/the/page
path = '/path/to/the/page' print 'Fetching page by its path: ' + path uri = '%s?path=%s' % (client.MakeContentFeedUri(), path) feed = client.GetContentFeed(uri=uri)
กำลังเรียกดูรายการทั้งหมดในหน้าหลัก
หากทราบรหัสรายการเนื้อหาของหน้าเว็บ (เช่น "1234567890" ในตัวอย่างด้านล่าง) คุณสามารถใช้พารามิเตอร์ parent
เพื่อดึงข้อมูลรายการย่อยทั้งหมดของหน้าเว็บ (หากมี) ดังนี้
parent = '1234567890' print 'Fetching all children of parent entry: ' + parent uri = '%s?parent=%s' % (client.MakeContentFeedUri(), parent) feed = client.GetContentFeed(uri=uri)
ดูพารามิเตอร์เพิ่มเติมได้ในคู่มืออ้างอิง
การสร้างเนื้อหา
หมายเหตุ: ก่อนที่จะสร้างเนื้อหาสำหรับเว็บไซต์ ให้ตรวจสอบว่าคุณได้ตั้งค่าเว็บไซต์ในไคลเอ็นต์แล้วclient.site = "siteName"
คุณสร้างเนื้อหาใหม่ (หน้าเว็บ หน้ารายการ ตู้เก็บเอกสาร หน้าประกาศ ฯลฯ) ได้โดยใช้ CreatePage()
อาร์กิวเมนต์แรกสำหรับเมธอดนี้ควรเป็นประเภทของหน้าที่จะสร้าง ตามด้วยชื่อ และเนื้อหา HTML ของหน้า
ดูรายการประเภทโหนดที่รองรับได้ที่พารามิเตอร์ kind
ในคู่มืออ้างอิง
การสร้างรายการ/หน้าใหม่
ตัวอย่างนี้จะสร้าง webpage
ใหม่ในส่วนระดับบนสุด รวมถึง XHTML สำหรับเนื้อหาหน้าเว็บ และตั้งชื่อส่วนหัวเป็น "ชื่อหน้าเว็บใหม่"
entry = client.CreatePage('webpage', 'New WebPage Title', html='<b>HTML content</b>') print 'Created. View it at: %s' % entry.GetAlternateLink().href
หากคำขอสำเร็จ entry
จะมีสำเนาของรายการที่สร้างขึ้นในเซิร์ฟเวอร์เป็น gdata.sites.gdata.ContentEntry
หากต้องการสร้างประเภทรายการที่ซับซ้อนมากขึ้นซึ่งสร้างขึ้นเมื่อมีการสร้าง (เช่น listpage
ที่มีส่วนหัวของคอลัมน์) คุณจะต้องสร้าง gdata.sites.data.ContentEntry
ด้วยตนเอง กรอกพร็อพเพอร์ตี้ที่ต้องการ และเรียกใช้ client.Post()
การสร้างรายการ/หน้าเว็บภายใต้เส้นทาง URL ที่กําหนดเอง
โดยค่าเริ่มต้น ตัวอย่างก่อนหน้านี้จะสร้างขึ้นภายใต้ URL http://sites.google.com/domainName/siteName/new-webpage-title
และมีส่วนหัวของหน้าเว็บเป็น "ชื่อหน้าเว็บใหม่" กล่าวคือ ชื่อจะได้รับการแปลงเป็นรูปแบบ new-webpage-title
สำหรับ URL
หากต้องการปรับแต่งเส้นทาง URL ของหน้าเว็บ ให้ตั้งค่าพร็อพเพอร์ตี้ page_name
ในรายการเนื้อหา ตัวช่วย CreatePage()
จะระบุอาร์กิวเมนต์คีย์เวิร์ดที่ไม่บังคับนี้
ตัวอย่างนี้จะสร้างหน้า filecabinet
ใหม่ที่มีส่วนหัว "พื้นที่เก็บไฟล์" แต่สร้างหน้านั้นภายใต้ URL http://sites.google.com/domainName/siteName/files
(แทนที่จะเป็น http://sites.google.com/domainName/siteName/file-storage
) โดยระบุพร็อพเพอร์ตี้ page_name
entry = client.CreatePage('filecabinet', 'File Storage', html='<b>HTML content</b>', page_name='files') print 'Created. View it at: ' + entry.GetAlternateLink().href
เซิร์ฟเวอร์ใช้กฎลําดับความสําคัญต่อไปนี้ในการตั้งชื่อเส้นทาง URL ของหน้าเว็บ
page_name
(หากมี) ต้องเป็นไปตามa-z, A-Z, 0-9, -, _
title
ต้องไม่เป็นค่าว่างหากไม่มีชื่อหน้า การปรับให้เป็นมาตรฐานคือการตัด + ยุบช่องว่างเป็น "-" และนำอักขระที่ไม่ตรงกับa-z, A-Z, 0-9, -, _
ออก
การสร้างหน้าย่อย
หากต้องการสร้างหน้าย่อย (หน้าลูก) ภายใต้หน้าหลัก ให้ใช้อาร์กิวเมนต์คีย์เวิร์ด parent
ของ CreatePage()
parent
อาจเป็น gdata.sites.gdata.ContentEntry
หรือสตริงที่แสดงตัวระบุแบบเต็มของรายการเนื้อหาก็ได้
ตัวอย่างนี้จะค้นหา announcementpage
ในฟีดเนื้อหาและสร้าง announcement
ใหม่ภายใต้ announcementpage
รายการแรกที่พบ
uri = '%s?kind=%s' % (client.MakeContentFeedUri(), 'announcementpage') feed = client.GetContentFeed(uri=uri) entry = client.CreatePage('announcement', 'Party!!', html='My place, this weekend', parent=feed.entry[0]) print 'Posted!'
การอัปโหลดไฟล์
API รองรับการอัปโหลดไฟล์แนบไปยังหน้าจัดการไฟล์หรือหน้าหลักเช่นเดียวกับใน Google Sites คุณต้องอัปโหลดไฟล์แนบ
ไปยังหน้าหลัก ดังนั้น คุณต้องตั้งค่าลิงก์หลักใน ContentEntry
ที่คุณพยายามอัปโหลด ดูการสร้างหน้าเว็บย่อยสำหรับข้อมูลเพิ่มเติม
เมธอด UploadAttachment()
ของไลบรารีของไคลเอ็นต์มีอินเทอร์เฟซสำหรับการอัปโหลดไฟล์แนบ
กำลังอัปโหลดไฟล์
ตัวอย่างนี้จะอัปโหลดไฟล์ PDF ไปยัง filecabinet
รายการแรกที่อยู่ในฟีดเนื้อหาของผู้ใช้
ระบบจะสร้างไฟล์แนบที่มีชื่อเป็น "คู่มือพนักงานใหม่" และคำอธิบาย (ไม่บังคับ) "ชุดเอกสารของฝ่ายทรัพยากรบุคคล"
uri = '%s?kind=%s' % (client.MakeContentFeedUri(),'filecabinet') feed = client.GetContentFeed(uri=uri) attachment = client.UploadAttachment('/path/to/file.pdf', feed.entry[0], content_type='application/pdf', title='New Employee Handbook', description='HR Packet') print 'Uploaded. View it at: %s' % attachment.GetAlternateLink().href
หากอัปโหลดสำเร็จ attachment
จะมีสำเนาของไฟล์แนบที่สร้างไว้ในเซิร์ฟเวอร์
อัปโหลดไฟล์แนบไปยังโฟลเดอร์
โฟลเดอร์รองรับที่เก็บไฟล์ใน Google Sites UploadAttachment()
มีอาร์กิวเมนต์คีย์เวิร์ดเพิ่มเติม folder_name
ที่คุณสามารถใช้เพื่ออัปโหลดไฟล์แนบไปยังโฟลเดอร์ filecabinet
เพียงระบุชื่อโฟลเดอร์ดังนี้
import gdata.data ms = gdata.data.MediaSource(file_path='/path/to/file.pdf', content_type='application/pdf') attachment = client.UploadAttachment(ms, feed.entry[0], title='New Employee Handbook', description='HR Packet', folder_name='My Folder')
โปรดสังเกตว่าตัวอย่างนี้ส่งออบเจ็กต์ gdata.data.MediaSource
ไปยัง UploadAttachment()
แทนเส้นทางไฟล์ และจะไม่ผ่านประเภทเนื้อหา แต่ให้ระบุประเภทเนื้อหาบนออบเจ็กต์ MediaSource แทน
ไฟล์แนบในเว็บ
ไฟล์แนบบนเว็บเป็นไฟล์แนบชนิดพิเศษ โดยพื้นฐานแล้ว ลิงก์เหล่านี้คือลิงก์ไปยังไฟล์อื่นๆ ในเว็บที่คุณสามารถเพิ่มลงในข้อมูล filecabinet
ได้ ฟีเจอร์นี้คล้ายกับวิธีการอัปโหลด "เพิ่มไฟล์ตาม URL" ใน UI ของ Google Sites
หมายเหตุ: คุณสร้างไฟล์แนบบนเว็บได้ภายใต้filecabinet
เท่านั้น แต่อัปโหลดไปยังหน้าประเภทอื่นๆ ไม่ได้
ตัวอย่างนี้จะสร้างไฟล์แนบเว็บภายใต้ filecabinet
รายการแรกที่มีอยู่ในฟีดเนื้อหาของผู้ใช้
โดยตั้งชื่อและคำอธิบาย (ไม่บังคับ) เป็น "GoogleLogo" และ "Nice Color" ตามลำดับ
uri = '%s?kind=%s' % (client.MakeContentFeedUri(),'filecabinet') feed = client.GetContentFeed(uri=uri) parent_entry = feed.entry[0] image_url = 'http://www.google.com/images/logo.gif' web_attachment = client.CreateWebAttachment(image_url, 'image/gif', 'GoogleLogo', parent_entry, description='nice colors') print 'Created!'
การเรียกใช้จะสร้างลิงก์ที่ชี้ไปยังรูปภาพใน "http://www.google.com/images/logo.gif" ใน filecabinet
การอัปเดตเนื้อหา
การอัปเดตข้อมูลเมตาของหน้าเว็บและ/หรือเนื้อหา HTML
คุณแก้ไขข้อมูลเมตา (ชื่อ pageName ฯลฯ) และเนื้อหาหน้าเว็บของรายการประเภทใดก็ได้โดยใช้เมธอด Update()
ของไคลเอ็นต์
ด้านล่างนี้คือตัวอย่างการอัปเดต listpage
ที่มีการเปลี่ยนแปลงต่อไปนี้
- แก้ไขชื่อเป็น "รายการที่อัปเดตแล้ว"
- เนื้อหา HTML ของหน้าได้รับการอัปเดตเป็น "เนื้อหา HTML ที่อัปเดตแล้ว"
- ส่วนส่วนหัวของคอลัมน์แรกในรายการจะเปลี่ยนเป็น "เจ้าของ"
uri = '%s?kind=%s' % (client.MakeContentFeedUri(),'listpage') feed = client.GetContentFeed(uri=uri) old_entry = feed.entry[0] # Update the listpage's title, html content, and first column's name. old_entry.title.text = 'Updated Title' old_entry.content.html = 'Updated HTML Content' old_entry.data.column[0].name = 'Owner' # You can also change the page's webspace page name on an update. # old_entry.page_name = 'new-page-path' updated_entry = client.Update(old_entry) print 'List page updated!'
การแทนที่เนื้อหาและข้อมูลเมตาของไฟล์แนบ
คุณสามารถแทนที่เนื้อหาไฟล์ของไฟล์แนบได้โดยการสร้างออบเจ็กต์ MediaSource
ใหม่ที่มีเนื้อหาไฟล์ใหม่และเรียกใช้เมธอด Update()
ของไคลเอ็นต์ นอกจากนี้ คุณยังอัปเดตข้อมูลเมตาของไฟล์แนบ (เช่น ชื่อและคำอธิบาย) หรือเพียงแค่ข้อมูลเมตาได้
ตัวอย่างนี้แสดงการอัปเดตเนื้อหาและข้อมูลเมตาของไฟล์พร้อมกัน
import gdata.data # Load the replacement content in a MediaSource. Also change the attachment's title and description. ms = gdata.data.MediaSource(file_path='/path/to/replacementContent.doc', content_type='application/msword') existing_attachment.title.text = 'Updated Document Title' existing_attachment.summary.text = 'version 2.0' updated_attachment = client.Update(existing_attachment, media_source=ms) print "Attachment '%s' changed to '%s'" % (existing_attachment.title.text, updated_attachment.title.text)
การลบเนื้อหา
หากต้องการนําหน้าเว็บหรือรายการออกจาก Google Site ให้ดึงข้อมูลรายการเนื้อหาก่อน จากนั้นเรียกใช้เมธอด Delete()
ของไคลเอ็นต์
client.Delete(content_entry)
นอกจากนี้ คุณยังส่งลิงก์ edit
ของรายการเนื้อหาด้วยเมธอด Delete()
และ/หรือบังคับให้ลบได้ด้วย โดยทำดังนี้
# force=True sets the If-Match: * header instead of using the entry's ETag. client.Delete(content_entry.GetEditLink().href, force=True)
ดูข้อมูลเพิ่มเติมเกี่ยวกับ ETag ได้จากคู่มืออ้างอิงสำหรับ Google Data API
การดาวน์โหลดไฟล์แนบ
รายการ attachment
แต่ละรายการจะมีลิงก์ src
ของเนื้อหาซึ่งใช้ดาวน์โหลดเนื้อหาไฟล์ได้
ไคลเอ็นต์ Sites มีเมธอดตัวช่วยสำหรับการเข้าถึงและดาวน์โหลดไฟล์จากลิงก์ DownloadAttachment()
โดยรับ gdata.sites.data.ContentEntry
หรือ URI การดาวน์โหลดสำหรับอาร์กิวเมนต์แรก และเส้นทางไฟล์ที่จะบันทึกไฟล์แนบเป็นอาร์กิวเมนต์ที่ 2
ตัวอย่างนี้จะดึงข้อมูลรายการไฟล์แนบที่ต้องการ (โดยการค้นหาลิงก์ self
ของไฟล์แนบ) และดาวน์โหลดไฟล์ไปยังเส้นทางที่ระบุ
uri = 'https://sites.google.com/feeds/content/site/siteName/1234567890' attachment = client.GetEntry(uri, desired_class=gdata.sites.data.ContentEntry) print "Downloading '%s', a %s file" % (attachment.title.text, attachment.content.type) client.DownloadAttachment(attachment, '/path/to/save/test.pdf') print 'Downloaded!'
การระบุนามสกุลไฟล์ที่เหมาะกับประเภทเนื้อหาของไฟล์แนบนั้นจะขึ้นอยู่กับนักพัฒนาแอป ประเภทเนื้อหาจะอยู่ในส่วน entry.content.type
ในบางกรณี คุณอาจไม่สามารถดาวน์โหลดไฟล์ลงในดิสก์ได้ (เช่น หากแอปกำลังทำงานใน Google App Engine)
สำหรับสถานการณ์เหล่านี้ ให้ใช้ _GetFileContent()
เพื่อดึงเนื้อหาของไฟล์และเก็บไว้ในหน่วยความจำ
ตัวอย่างนี้ดาวน์โหลดเป็นไฟล์แนบในหน่วยความจำ
try: file_contents = client._GetFileContent(attachment.content.src) # TODO: Do something with the file contents except gdata.client.RequestError, e: raise e
ฟีด 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
ฟีด ACL ใช้เพื่อควบคุมสิทธิ์การแชร์ของเว็บไซต์ได้ และสามารถดึงข้อมูลโดยใช้เมธอด GetAclFeed()
ตัวอย่างต่อไปนี้จะดึงข้อมูลฟีด ACL สำหรับเว็บไซต์ที่ตั้งค่าอยู่ในออบเจ็กต์ SitesClient
ในขณะนั้น และพิมพ์รายการสิทธิ์
print "Fetching acl permissions of site '%s'...\n" % client.site feed = client.GetAclFeed() for entry in feed.entry: print '%s (%s) - %s' % (entry.scope.value, entry.scope.type, entry.role.value)
หลังจากค้นหาสำเร็จแล้ว feed
จะเป็นออบเจ็กต์ gdata.sites.data.AclFeed
ที่มีลิสต์ gdata.sites.data.AclEntry
หากคุณกำลังทำงานกับรายการใน SiteFeed SiteEntry
แต่ละรายการจะมีลิงก์ไปยังฟีด ACL ของรายการนั้น
ตัวอย่างเช่น ข้อมูลโค้ดนี้ดึงข้อมูลเว็บไซต์แรกในฟีดเว็บไซต์ของผู้ใช้และค้นหาฟีด ACL ของเว็บไซต์
feed = client.GetSiteFeed() site_entry = feed.entry[0] print "Fetching acl permissions of site '%s'...\n" % site_entry.site_name.text feed = client.GetAclFeed(uri=site_entry.FindAclLink())
การแชร์เว็บไซต์
หมายเหตุ: ACL การแชร์บางรายการอาจเป็นไปได้เฉพาะเมื่อมีการกำหนดค่าโดเมนให้อนุญาตสิทธิ์ดังกล่าว (เช่น หากเปิดใช้การแชร์ภายนอกโดเมนสำหรับโดเมน G Suite เป็นต้น)
หากต้องการแชร์เว็บไซต์จาก Google Sites โดยใช้ API ให้สร้าง gdata.sites.gdata.AclEntry
ที่มีค่า gdata.acl.data.AclScope
และ gdata.acl.data.AclRole
ที่ต้องการ ดูค่า AclScope
และ AclRoles
ที่เป็นไปได้ได้ในส่วนภาพรวมฟีด ACL
ตัวอย่างนี้ให้สิทธิ์การอ่านบนไซต์แก่ผู้ใช้ "user@example.com":
import gdata.acl.data scope = gdata.acl.data.AclScope(value='user@example.com', type='user') role = gdata.acl.data.AclRole(value='reader') acl = gdata.sites.gdata.AclEntry(scope=scope, role=role) acl_entry = client.Post(acl, client.MakeAclFeedUri()) print "%s %s added as a %s" % (acl_entry.scope.type, acl_entry.scope.value, acl_entry.role.value)
การแชร์ระดับกลุ่มและโดเมน
คุณสามารถแชร์เว็บไซต์ใน Google Group หรือโดเมน G Suite ได้เช่นเดียวกับการแชร์เว็บไซต์กับผู้ใช้รายเดียว ค่า scope
ที่จําเป็นแสดงอยู่ด้านล่าง
การแชร์ไปยังอีเมลกลุ่ม
scope = gdata.acl.data.AclScope(value='group_name@example.com', type='group')
การแชร์กับทั้งโดเมน
scope = gdata.acl.data.AclScope(value='example.com', type='domain')
การแชร์ในระดับโดเมนใช้ได้กับโดเมน G Suite เท่านั้น และใช้ได้กับโดเมนที่โฮสต์เว็บไซต์เท่านั้น เช่น http://sites.google.com/a/domain1.com/siteA สามารถแชร์เว็บไซต์ทั้งไซต์กับ domain1.com ได้เท่านั้น ยกเว้น domain2.com ไม่ได้ เว็บไซต์ที่ไม่ได้ฝากไว้กับโดเมน G Suite (เช่น http://sites.google.com/site/siteB) จะเชิญโดเมนไม่ได้
การแก้ไขสิทธิ์การแชร์
หากต้องการสิทธิ์การแชร์ที่มีอยู่บนเว็บไซต์ ให้ดึงข้อมูล AclEntry
ที่ต้องการก่อน จากนั้นแก้ไขสิทธิ์ตามต้องการ แล้วเรียกใช้เมธอด Update()
ของลูกค้าเพื่อแก้ไข ACL ในเซิร์ฟเวอร์
ตัวอย่างนี้แก้ไข acl_entry
ก่อนหน้าของเราจากส่วนการแชร์เว็บไซต์ โดยอัปเดต "user@example.com" เป็นผู้เขียน (ผู้ทำงานร่วมกัน) ดังนี้
acl_entry.role.value = 'writer' updated_acl = client.Update(acl_entry) # To force the update, even if you do not have the latest changes to the entry: # updated_acl = client.Update(acl_entrys, force=True)
ดูข้อมูลเพิ่มเติมเกี่ยวกับ ETag ได้ที่คู่มืออ้างอิง Google Data API
กำลังลบสิทธิ์การแชร์
หากต้องการนำสิทธิ์การแชร์ออก ให้เรียกข้อมูล AclEntry
ก่อน แล้วจึงเรียกใช้เมธอด Delete()
ของไคลเอ็นต์
client.Delete(acl_entry)
นอกจากนี้ คุณยังส่งลิงก์ edit
ของรายการ acl ไปยังเมธอด Delete()
และ/หรือบังคับให้ลบได้ด้วย โดยทำดังนี้
# force=True sets the If-Match: * header instead of using the entry's ETag. client.Delete(acl_entry.GetEditLink().href, force=True)
ดูข้อมูลเพิ่มเติมเกี่ยวกับ ETag ได้จากคู่มืออ้างอิงสำหรับ Google Data API
หัวข้อพิเศษ
การดึงข้อมูลฟีดหรือรายการอีกครั้ง
ถ้าต้องการเรียกข้อมูลฟีดหรือรายการที่คุณได้ดึงข้อมูลมาก่อนหน้านี้ คุณสามารถปรับปรุงประสิทธิภาพโดยกำหนดให้เซิร์ฟเวอร์ส่งรายการนั้นๆ หรือรายการถ้ามีการเปลี่ยนแปลงนับจากที่คุณดึงข้อมูลครั้งล่าสุดเท่านั้น
หากต้องการดึงข้อมูลแบบมีเงื่อนไขประเภทนี้ ให้ส่งค่า ETag ไปยัง GetEntry()
ตัวอย่างเช่น หากคุณมีออบเจ็กต์ entry
อยู่แล้ว ให้ทำดังนี้
import gdata.client try: entry = client.GetEntry(entry.GetSelfLink().href, desired_class=gdata.sites.data.ContentEntry, etag=entry.etag) except gdata.client.NotModified, error: print 'You have the latest copy of this entry' print error
หาก GetEntry()
แสดงข้อยกเว้น gdata.client.NotModified
แสดงว่า ETag ของรายการตรงกับเวอร์ชันในเซิร์ฟเวอร์ ซึ่งหมายความว่าคุณมีสำเนาล่าสุด
อย่างไรก็ตาม หากลูกค้า/ผู้ใช้รายอื่นทำการแก้ไข ระบบจะแสดงรายการใหม่ใน entry
และจะไม่แสดงข้อยกเว้น
ดูข้อมูลเพิ่มเติมเกี่ยวกับ ETag ได้ที่คู่มืออ้างอิง Google Data API