คู่มือ 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 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 ของหน้าเว็บ

  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 ใหม่ภายใต้ 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

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