คู่มือ Python

สำคัญ: เอกสารนี้เขียนขึ้นก่อนปี 2012 ตัวเลือกการตรวจสอบสิทธิ์ที่อธิบายไว้ในเอกสารนี้ (OAuth 1.0, AuthSub และ ClientLogin) ถูกเลิกใช้งานอย่างเป็นทางการแล้วเมื่อวันที่ 20 เมษายน 2012 และไม่สามารถใช้ได้อีกต่อไป เราขอแนะนำให้คุณเปลี่ยนไปใช้ OAuth 2.0 โดยเร็วที่สุด

Google Sites Data API ช่วยให้แอปพลิเคชันไคลเอ็นต์เข้าถึง เผยแพร่ และแก้ไขเนื้อหาภายใน Google Sites ได้ นอกจากนี้ แอปพลิเคชันไคลเอ็นต์ยังขอรายการกิจกรรมล่าสุด ดึงประวัติการแก้ไข และดาวน์โหลดไฟล์แนบได้ด้วย

นอกเหนือจากการให้ข้อมูลความเป็นมาเกี่ยวกับความสามารถของ Sites Data API แล้ว คู่มือนี้ยังให้ตัวอย่างการโต้ตอบกับ API โดยใช้ไลบรารีของไคลเอ็นต์ Python ด้วย สำหรับความช่วยเหลือในการตั้งค่าไลบรารีของไคลเอ็นต์ โปรดดูที่การเริ่มต้นใช้งานไลบรารีของไคลเอ็นต์ Python ของ Google หากสนใจที่จะทำความเข้าใจเพิ่มเติมเกี่ยวกับโปรโตคอลที่สำคัญซึ่งไลบรารีของไคลเอ็นต์ Python ใช้ในการโต้ตอบกับ Sites API แบบคลาสสิก โปรดดูคู่มือโปรโตคอล

ผู้ชม

เอกสารนี้จัดทำขึ้นสำหรับนักพัฒนาซอฟต์แวร์ที่ต้องการเขียนแอปพลิเคชันไคลเอ็นต์ที่โต้ตอบกับ Google Sites โดยใช้ไลบรารีของไคลเอ็นต์ Python ของ Google

เริ่มต้นใช้งาน

ในการใช้ไลบรารีของไคลเอ็นต์ Python คุณต้องมี Python 2.2 ขึ้นไป และโมดูลที่แสดงในหน้า wiki ของ DependencyModules หลังจากดาวน์โหลดไลบรารีของไคลเอ็นต์แล้ว โปรดดูการเริ่มต้นใช้งานไลบรารี Data Python สำหรับความช่วยเหลือในการติดตั้งและใช้งานไคลเอ็นต์

การเรียกใช้ตัวอย่าง

ตัวอย่างที่ใช้งานได้เต็มรูปแบบจะอยู่ในไดเรกทอรีย่อย 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 เพื่อทำงานกับฟีดสาธารณะหรือฟีดส่วนตัวได้ Sites Data API ให้สิทธิ์เข้าถึงฟีดส่วนตัวและฟีดสาธารณะ ขึ้นอยู่กับสิทธิ์ของเว็บไซต์และการดำเนินการที่คุณพยายามทำ ตัวอย่างเช่น คุณอาจสามารถอ่านฟีดเนื้อหาของเว็บไซต์สาธารณะได้ แต่ไม่ทำการอัปเดตฟีดได้ ซึ่งเป็นเรื่องที่ต้องใช้ไคลเอ็นต์ที่ผ่านการตรวจสอบสิทธิ์ ซึ่งทำได้ผ่านการตรวจสอบสิทธิ์ชื่อผู้ใช้/รหัสผ่าน ClientLogin, AuthSub หรือ OAuth

โปรดดูภาพรวมการตรวจสอบสิทธิ์ API ข้อมูลของ Google สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ AuthSub, OAuth และ ClientLogin

AuthSub สำหรับเว็บแอปพลิเคชัน

แอปพลิเคชันไคลเอ็นต์ควรใช้การตรวจสอบสิทธิ์ AuthSub สำหรับเว็บแอปพลิเคชัน ซึ่งจำเป็นต้องตรวจสอบสิทธิ์ผู้ใช้สำหรับบัญชี Google หรือ G Suite โอเปอเรเตอร์ไม่จำเป็นต้องเข้าถึงชื่อผู้ใช้และรหัสผ่านสำหรับผู้ใช้ 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() ของไลบรารี เช่นเดียวกับตัวช่วย GetSiteFeed() CreateSite() ยังยอมรับอาร์กิวเมนต์ที่ไม่บังคับ uri ด้วย ซึ่งอาจใช้เพื่อระบุ URI ของฟีดเว็บไซต์ทางเลือก (ในกรณีที่สร้างเว็บไซต์ภายใต้โดเมนอื่นซึ่งไม่ใช่โดเมนที่ตั้งค่าไว้ในออบเจ็กต์ SitesClient)

ต่อไปนี้คือตัวอย่างการสร้างเว็บไซต์ใหม่โดยใช้ธีม "แถบสเลท" พร้อมระบุชื่อและคำอธิบาย (ไม่บังคับ)

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 Sites ก็สามารถใช้พารามิเตอร์ 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 ของหน้าเว็บ

  1. page_name (หากมี) ต้องเป็นไปตาม a-z, A-Z, 0-9, -, _
  2. title ต้องไม่เป็นค่าว่างหากไม่มีชื่อหน้า การปรับให้เป็นมาตรฐานคือการตัด + ยุบช่องว่างเป็น "-" และนำอักขระที่ไม่ตรงกับ a-z, A-Z, 0-9, -, _ ออก

การสร้างหน้าย่อย

หากต้องการสร้างหน้าเว็บย่อย (รายการย่อย) ภายใต้หน้าหลัก ให้ใช้อาร์กิวเมนต์คีย์เวิร์ด parent ของ CreatePage() parent อาจเป็น gdata.sites.gdata.ContentEntry หรือสตริงที่แสดงรหัสตนเองแบบเต็มของรายการเนื้อหาก็ได้

ตัวอย่างนี้จะค้นหาฟีดเนื้อหาสำหรับ announcementpage และสร้าง announcement ใหม่ภายใต้รายการแรกที่พบ

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 แรกที่พบในฟีดเนื้อหาของผู้ใช้ ไฟล์แนบจะถูกสร้างขึ้นโดยมีชื่อเรื่อง "คู่มือพนักงานใหม่" และคำอธิบาย (ไม่บังคับ) คือ "แพ็คเก็ต HR"

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 จะมีสำเนาของไฟล์แนบที่สร้างขึ้นบนเซิร์ฟเวอร์

การอัปโหลดไฟล์แนบไปยังโฟลเดอร์

Filecabinets ในโฟลเดอร์สนับสนุนของ 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" และ "สีสวยๆ" ตามลำดับ

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 Sites ให้เรียกข้อมูลรายการเนื้อหาก่อน จากนั้นจึงเรียกใช้เมธอด 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"
  • กลุ่ม — ที่อยู่อีเมลของ Google Group เช่น "group@domain.com"
  • โดเมน — ชื่อโดเมนของ G Suite เช่น "domain.com"
  • ค่าเริ่มต้น — ขอบเขตประเภท "ค่าเริ่มต้น" ที่เป็นไปได้มีเพียง 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 ที่ต้องการ ดูส่วนภาพรวมของฟีด ACL สำหรับค่า AclScope และ AclRoles ที่เป็นไปได้

ตัวอย่างนี้ให้สิทธิ์อ่านในเว็บไซต์แก่ผู้ใช้ "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 หรือโดเมน 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 เท่านั้น แต่ไม่สามารถแชร์ไซต์กับ domain1.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)

นอกจากนี้คุณยังส่งผ่านเมธอด Delete() เพื่อลิงก์ edit ของรายการ ACL และ/หรือบังคับให้ลบได้ดังนี้

# 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

กลับไปด้านบน