מדריך ל-Python

חשוב: המסמך הזה נכתב לפני 2012. אפשרויות ההרשאה המתוארות במסמך זה (OAuth 1.0, AuthSub ו-ClientLogin) הוצאו משימוש באופן רשמי החל מ-20 באפריל 2012 ואינן זמינות עוד. מומלץ לעבור ל-OAuth 2.0 בהקדם האפשרי.

Google Sites Data API מאפשר לאפליקציות לקוח לגשת לתוכן ב-Google Sites, לפרסם ולשנות אותו. אפליקציית הלקוח שלכם יכולה גם לבקש רשימה של הפעילויות האחרונות, לאחזר היסטוריית גרסאות ולהוריד קבצים מצורפים.

בנוסף לקבלת רקע על היכולות של Google Sites Data API, המדריך הזה כולל דוגמאות לאינטראקציה עם ה-API באמצעות ספריית הלקוח של Python. לקבלת עזרה בהגדרה של ספריית הלקוח, קראו את המאמר תחילת העבודה עם ספריית הלקוח של Google Data ב-Python. אם ברצונך להבין יותר על הפרוטוקול הבסיסי שמשמש את ספריית הלקוח של Python לאינטראקציה עם הגרסה הקלאסית של Google Sites API, כדאי לעיין במדריך הפרוטוקול.

קהל

המסמך הזה מיועד למפתחים שרוצים לכתוב אפליקציות לקוח שיוצרות אינטראקציה עם Google Sites באמצעות ספריית הלקוח של Google Data Python.

תחילת העבודה

כדי להשתמש בספריית הלקוח של Python, צריך את Python 2.2 ואילך ואת המודולים שמפורטים בדף ה-wiki של DependencyModules. אחרי הורדת ספריית הלקוח, קראו את המאמר תחילת העבודה עם ספריית Python לנתוני Google לקבלת עזרה בהתקנת הלקוח ובשימוש בו.

הפעלת הדוגמה

דוגמה תקינה מלאה נמצאת בספריית המשנה 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]

אם הדגלים הנדרשים לא יסופקו, האפליקציה תבקש מכם להזין את הערכים האלה. הדוגמה מאפשרת למשתמש לבצע מספר פעולות שמדגימות את אופן השימוש בגרסה הקלאסית של Google Sites API. לכן, יהיה עליך לבצע אימות כדי לבצע פעולות מסוימות (למשל, שינוי תוכן). התוכנית תבקש מכם גם לבצע אימות דרך AuthSub, OAuth או ClientLogin.

כדי לכלול בקוד שלכם את הדוגמאות במדריך הזה, אתם זקוקים להצהרות import הבאות:

import atom.data
import gdata.sites.client
import gdata.sites.data

צריך גם להגדיר אובייקט SitesClient שמייצג חיבור לקוח לממשק ה-API הקלאסי של Google Sites. העבר את שם האפליקציה ואת שם מרחב האינטרנט של האתר (מכתובת ה-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.

אימות לממשק ה-API הקלאסי של Google Sites

אפשר להשתמש בספריית הלקוח של Python לעבודה עם פידים ציבוריים או פרטיים. ממשק ה-API של Google Sites Data מספק גישה לעדכונים פרטיים וציבוריים, בהתאם להרשאות של האתר ולפעולה שאתם מנסים לבצע. לדוגמה, ייתכן שתוכלו לקרוא את עדכון התוכן של אתר ציבורי, אבל לא לבצע בו עדכונים – דבר שדורש לקוח מאומת. לשם כך, אפשר להשתמש באימות שם משתמש וסיסמה באמצעות ClientLogin, AuthSub או OAuth.

עיין בסקירה הכללית על אימות ממשקי API של Google Data למידע נוסף על 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() משתמשת בכמה פרמטרים (בהתאם לפרמטרים של השאילתה שבהם משתמש ה-handler AuthSubRequest):

  • כתובת ה-URL next – כתובת ה-URL ש-Google תפנה אליה אחרי שהמשתמש יתחבר לחשבון ותעניק לו גישה; http://www.example.com/myapp.py בדוגמה שלמעלה
  • ההיקףhttps://sites.google.com/feeds/
  • secure, ערך בוליאני שמציין אם ייעשה שימוש באסימון במצב מאובטח ורשום או לא; True בדוגמה שלמעלה
  • session, ערך בוליאני שני שמציין אם האסימון לשימוש יחיד יוחלף מאוחר יותר באסימון סשן, או לא; 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. לכן, כתובת האתר תהיה https://sites.google.com/a/example2.com/title-for-my-site.

אם האתר נוצר בהצלחה, השרת יגיב באובייקט gdata.sites.data.SiteEntry, שמאוכלס ברכיבים שהשרת הוסיף: קישור לאתר, קישור אל פיד ה-acl של האתר, שם האתר, הכותרת, הסיכום וכן הלאה.

העתקת אתר

הערה: התכונה הזו זמינה רק בדומיינים של G Suite.

אפשר להשתמש בפרמטר CreateSite() גם כדי להעתיק אתר קיים. כדי לעשות זאת, מעבירים את הארגומנט של מילת המפתח source_site. כל אתר שהועתק יקבל את הקישור הזה, שאליו ניתן לגשת דרך entry.FindSourceLink(). הנה דוגמה לשכפול האתר שנוצר בקטע Creating new sites:

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. למידע נוסף, ראו אימות לשירות Google 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. למידע נוסף, ראו אימות לשירות Google Sites.

עדכון הגרסאות מספק מידע על היסטוריית הגרסאות של כל רשומת תוכן. אפשר להשתמש ב-method 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. למידע נוסף, ראו אימות לשירות Google Sites.

עדכון התוכן מחזיר את התוכן העדכני ביותר של אתר מסוים. אפשר לגשת אליו על ידי קריאה ל-method 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, ואלה הספציפיים לממשק ה-API הקלאסי של Google Sites. למידע מפורט יותר ורשימה מלאה של הפרמטרים הנתמכים, עיינו במדריך העזר.

הערה: בדוגמאות בקטע הזה נעשה שימוש בשיטת העזר 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)

כדי להחזיר יותר מסוג אחד, צריך להפריד בין הערכים של 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 לגוף הדף, ומגדיר את כותרת הכותרת ל-'New WebPage Title':

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 מנורמלת ל-new-webpage-title. כדי להתאים אישית נתיב של כתובת URL של דף, אפשר להגדיר את המאפיין page_name ברשומת התוכן. כלי העזר CreatePage() מספק זאת כארגומנט אופציונלי של מילת מפתח.

הדוגמה הזו יוצרת דף filecabinet חדש עם הכותרת 'File Storage', אבל יוצרת את הדף בכתובת ה-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!'

העלאת קבצים

בדומה ל-Google Sites, ה-API תומך בהעלאת קבצים מצורפים לדף של ספריית קבצים או לדף הורה. צריך להעלות קבצים מצורפים לדף הורה. לכן צריך להגדיר קישור הורה ב-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' בממשק המשתמש של 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 של דף

אפשר לערוך את המטא-נתונים (כותרת, שם דף וכו') ואת תוכן הדף מכל סוג באמצעות שיטת 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, קודם צריך לאחזר את הערך של התוכן ואז לקרוא ל-method של הלקוח ב-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)

מידע נוסף על תגי ETags זמין במדריך העזר של Google Data APIs.

חזרה למעלה



מתבצעת הורדה של קבצים מצורפים

כל רשומת attachment מכילה קישור src של תוכן שיכול לשמש להורדת התוכן של הקובץ. הלקוח של Google Sites מכיל שיטת עזר לגישה אל הקובץ ולהורדה שלו מהקישור הזה: DownloadAttachment(). הוא מקבל gdata.sites.data.ContentEntry או URI להורדה לארגומנט הראשון שלו, ונתיב קובץ לשמירת הקובץ המצורף בתור השני.

בדוגמה הבאה מאחזרים רשומה מסוימת של קובץ מצורף (באמצעות שאילתה על הקישור ל-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 מייצגת תפקיד גישה של ישות מסוימת: משתמש, קבוצת משתמשים, דומיין או גישת ברירת המחדל (שזהו אתר ציבורי). הערכים יוצגו רק עבור ישויות עם גישה מפורשת – תוצג רשומה אחת לכל כתובת אימייל בחלונית 'אנשים עם גישה' במסך השיתוף בממשק המשתמש של Google Sites. לכן מנהלי דומיינים לא יוצגו, גם אם יש להם גישה מרומזת לאתר.

תפקידים

רכיב התפקיד מייצג רמת גישה שיכולה להיות לישות. יש ארבעה ערכים אפשריים של הרכיב gAcl:role:

  • Reader — צופה (שווה לגישת קריאה בלבד).
  • writer — שותף עריכה (שווה ערך לגישת קריאה/כתיבה).
  • owner – בדרך כלל מנהל האתר (שווה לגישת קריאה/כתיבה).

רמות

רכיב ההיקף מייצג את הישות שיש לה את רמת הגישה הזו. יש ארבעה סוגים אפשריים של הרכיב gAcl:scope:

  • user - ערך של כתובת אימייל, למשל "user@gmail.com".
  • group — כתובת אימייל של קבוצת Google, למשל "group@domain.com".
  • domain - שם דומיין ב-G Suite, לדוגמה "domain.com".
  • default – יש רק היקף אחד אפשרי מסוג "default" (ברירת מחדל) שאין לו ערך (למשל <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, ולא עם 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)

מידע נוסף על תגי ETags זמין במדריך העזר של Google Data APIs.

מסיר את הרשאות השיתוף

כדי להסיר הרשאת שיתוף, קודם צריך לאחזר את ה-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)

מידע נוסף על תגי ETags זמין במדריך העזר של Google Data APIs.

חזרה למעלה

נושאים מיוחדים

אחזור שוב של עדכון או ערך

אם רוצים לאחזר פיד או רשומה שאחזרתם בעבר, אפשר לשפר את היעילות על ידי אמירת השרת לשלוח את הרשימה או הרשומה רק אם הם השתנו מאז הפעם האחרונה שאחזרתם אותם.

כדי לבצע אחזור מותנה מהסוג הזה, צריך להעביר ערך 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 ולא תירשם חריגה.

מידע נוסף על תגי ETags זמין במדריך העזר של Google Data APIs.

חזרה למעלה