מדריך לשפת Java

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

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

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

קהל

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

תחילת העבודה

Google Sites משתמש בחשבונות Google או בחשבונות G Suite לצורך אימות. אם כבר יש לך חשבון, הכול מוכן. אם לא, ניתן ליצור חשבון חדש.

התקנת הספרייה

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

  1. התקנת Java 1.5 ואילך
  2. הורדה של ספריית הלקוח (הגרסה האחרונה של gdata-src.java.zip)
  3. מורידים את הרשימה של יחסי תלות
  4. הורד את האפליקציות לדוגמה (הגרסה האחרונה של gdata-samples.java.zip)

לאחר התקנת קובצי ה- .jars, עליך לכלול את הפריטים הבאים בפרויקט:

  1. java/lib/gdata-sites-2.0.jar – גרסה 2.0 כאן מיועדת לגרסה 1.4 של הגרסה הקלאסית של Google Sites API.
  2. java/lib/gdata-core-1.0.jar
  3. java/lib/gdata-client-1.0.jar
  4. java/lib/gdata-spreadsheet-3.0.jar (אם עובדים עם דפי רשימה / פריטים ברשימה)

כמו כן, חשוב לכלול את מאגרי התלות (gdata-media-1.0.jar, mail.jar ו-google-collect....jar).

הפעלת האפליקציה לדוגמה

אפליקציה לדוגמה שפועלת במלואה נמצאת בספריית המשנה /java/sample/sites של ההורדה של gdata-samples.java.zip. המקור זמין גם בכתובת /trunk/java/sample/sites/ במאגר ה-SVN שניתן לגשת אליו מהכרטיסייה Source. SitesDemo.java מאפשר למשתמש לבצע מספר פעולות שמדגימות את אופן השימוש בממשק ה-API הקלאסי של Google Sites.

הערה: צריך לכלול java/sample/util/lib/sample-util.jar כדי להריץ את הדוגמה.

התחלת פרויקט משלכם

טיפ: כדאי לעיין במאמר שימוש ב-Eclipse עם ממשקי Google Data API כדי להגדיר במהירות את הפלאגין של Eclipse.

בהתאם לצורכי האפליקציה שלך, יהיה עליך לבצע מספר פעולות ייבוא. אנחנו ממליצים להתחיל בייבוא של הפעולות הבאות:

import com.google.gdata.client.*;
import com.google.gdata.client.sites.*;
import com.google.gdata.data.*;
import com.google.gdata.data.acl.*;
import com.google.gdata.data.media.*;
import com.google.gdata.data.sites.*;
import com.google.gdata.data.spreadsheet.*;  // If working with listpages / listitems
import com.google.gdata.util.*;

בשלב הבא צריך להגדיר גם אובייקט SitesService שמייצג חיבור לקוח לממשק ה-API הקלאסי של Google Sites:

SitesService client = new SitesService("yourCo-yourAppName-v1");

הארגומנט applicationName צריך להיות בפורמט: company-applicationname-version. הפרמטר הזה משמש למטרות רישום ביומן.

הערה: בהמשך המדריך הזה אנחנו מניחים שיצרתם SitesService במשתנה client.

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

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

עיין בסקירה הכללית על אימות ממשקי API של Google Data למידע נוסף על AuthSub , OAuth ו-ClientLogin.

טיפ: ה-API תומך ב-SSL (HTTPS). אם משתמשים ב-AuthSub/OAuth, חשוב לציין היקף של https://sites.google.com/feeds/ כדי לבקש פידים באמצעות SSL. כמו כן, שימו לב שבדומיינים של G Suite, ההגדרה 'נדרש SSL' בלוח הבקרה הניהולי מובאת בחשבון על ידי ה-API. אפשר לאלץ את כל הבקשות של ה-API לעבור ל-HTTPS באמצעות קריאה ל-client.useSsl();.

AuthSub לאפליקציות אינטרנט

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

הוראות לשילוב AuthSub באפליקציית האינטרנט

בקשת אסימון לשימוש חד-פעמי

כשהמשתמש נכנס לאפליקציה בפעם הראשונה, הוא צריך לבצע אימות. בדרך כלל, מפתחים מדפיסים טקסט וקישור שמפנה את המשתמשים לדף האישור של AuthSub כדי לאמת את המשתמש ולבקש גישה למסמכים שלו. ספריית הלקוח של Google Data Java מספקת פונקציה ליצירת כתובת ה-URL הזו. הקוד שבהמשך מגדיר קישור לדף AuthSubRequest.

import com.google.gdata.client.*;

String nextUrl = "http://www.example.com/welcome.jsp";
String scope = "https://sites.google.com/feeds/";
boolean secure = true;
boolean session = true;
String authSubUrl = AuthSubUtil.getRequestUrl(nextUrl, scope, secure, session);

כדי לאמת משתמשים בדומיין המתארח ב-G Suite:

import com.google.gdata.client.*;

String hostedDomain = "example.com";
String nextUrl = "http://www.example.com/welcome.jsp";
String scope = "https://sites.google.com/feeds/";  // SSL is also supported
boolean secure = true;
boolean session = true;
String authSubUrl = AuthSubUtil.getRequestUrl(hostedDomain, nextUrl, scope, secure, session);

השיטה getRequestUrl() משתמשת בכמה פרמטרים (בהתאם לפרמטרים של השאילתה שבהם משתמש ה-handler AuthSubRequest):

  • כתובת ה-URL next – כתובת ה-URL ש-Google תפנה אליה אחרי שהמשתמש יתחבר לחשבון ותעניק לו גישה; http://www.example.com/welcome.jsp בדוגמה שלמעלה
  • ההיקףhttps://sites.google.com/feeds/ בדוגמה שלמעלה
  • ערך בוליאני שמציין אם ייעשה שימוש באסימון במצב רשום או לא; false בדוגמה שלמעלה
  • ערך בוליאני שני כדי לציין אם האסימון יוחלף מאוחר יותר באסימון סשן או לא; true בדוגמה שלמעלה

שדרוג לאסימון סשן

ראה שימוש ב-AuthSub עם ספריות הלקוח של Google Data API.

אחזור מידע על אסימון סשן

ראה שימוש ב-AuthSub עם ספריות הלקוח של Google Data API.

ביטול אסימון סשן

ראה שימוש ב-AuthSub עם ספריות הלקוח של Google Data API.

OAuth לאפליקציות אינטרנט או לאפליקציות מותקנות/ניידים

ניתן להשתמש ב-OAuth כחלופה ל-AuthSub, והוא מיועד לאפליקציות אינטרנט. השימוש ב-OAuth דומה לשימוש במצב מאובטח ורשום של AuthSub, בכך שכל הבקשות לנתונים חייבות להיות חתומות בחתימה דיגיטלית ועליכם לרשום את הדומיין.

הוראות לשילוב OAuth באפליקציה מותקנת

אחזור אסימון בקשה

למידע נוסף, ראו שימוש ב-OAuth עם ספריות הלקוח של Google Data API.

מתן הרשאה לאסימון בקשה

למידע נוסף, ראו שימוש ב-OAuth עם ספריות הלקוח של Google Data API.

שדרוג לאסימון גישה

למידע נוסף, ראו שימוש ב-OAuth עם ספריות הלקוח של Google Data API.

ClientLogin לאפליקציות מותקנות/ניידים

יש להשתמש ב-ClientLogin באפליקציות מותקנות או לנייד שצריכות לאמת את המשתמשים שלהן בחשבונות Google. בהפעלה הראשונה, האפליקציה מבקשת מהמשתמש את שם המשתמש/הסיסמה שלו. בבקשות הבאות, יש הפניה לאסימון אימות.

הצגת הוראות לשילוב ClientLogin באפליקציה שמותקנת

כדי להשתמש ב-ClientLogin, צריך להפעיל את השיטה setUserCredentials() של אובייקט SitesService שעוברת בירושה מ-GoogleService. מציינים את כתובת האימייל והסיסמה של המשתמש שהלקוח שולח בקשות בשמו. לדוגמה:

SitesService client = new SitesService("yourCo-yourAppName-v1");
client.setUserCredentials("example@gmail.com", "pa$$word");

טיפ: אחרי שהאפליקציה אימתה את המשתמש בפעם הראשונה, שמרו את אסימון האימות במסד הנתונים שלכם כדי שתוכלו להשתמש בו מאוחר יותר. אין צורך לבקש מהמשתמש את הסיסמה שלו בכל הפעלה של האפליקציה. למידע נוסף, אפשר לעיין במאמר אחזור של אסימון אימות.

למידע נוסף על השימוש ב-ClientLogin ביישומי Java, עיין במאמר שימוש ב-ClientLogin עם ספריות הלקוח של Google Data API.

חזרה למעלה

פיד האתר

אפשר להשתמש בפיד האתר כדי לציין את רשימת האתרים ב-Google Sites שבבעלות משתמש או שיש לו הרשאות צפייה. ניתן להשתמש בו גם כדי לשנות שם של אתר קיים. בדומיינים של G Suite, אפשר להשתמש בו גם כדי ליצור ו/או להעתיק אתר שלם.

אתרי רישומים

כדי לשלוח שאילתה לגבי פיד האתר, צריך לשלוח HTTP GET לכתובת ה-URL של פיד האתר:

https://sites.google.com/feeds/site/site/

בלקוח Java, אפשר להשתמש במחלקות SiteFeed ו-SiteEntry כדי לעבוד עם פיד האתר:

public String getSiteFeedUrl() {
  String domain = "site";  // OR if the Site is hosted on G Suite, your domain (e.g. example.com)
  return "https://sites.google.com/feeds/site/" + domain + "/";
}

public void getSiteFeed() throws IOException, ServiceException {
  SiteFeed siteFeed = client.getFeed(new URL(getSiteFeedUrl()), SiteFeed.class);
  for (SiteEntry entry : siteFeed.getEntries()){
    System.out.println("title: " + entry.getTitle().getPlainText());
    System.out.println("site name: " + entry.getSiteName().getValue());
    System.out.println("theme: " + entry.getTheme().getValue());
    System.out.println("");
  }
}

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

יצירת אתרים חדשים

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

אפשר להקצות אתרים חדשים על ידי יצירה של SiteEntry חדש וקריאה ל-method insert() של הלקוח בפיד האתר.

הדוגמה הזו יוצרת אתר חדש עם העיצוב 'צפחה' (הגדרה אופציונלית) ומספקת את שם האתר (חובה) ותיאור (אופציונלי):

public String getSiteFeedUrl() {
  String domain = "example.com";
  return "https://sites.google.com/feeds/site/" + domain + "/";
}

public SiteEntry createSite(String title, String summary, String theme, String tag)
    throws MalformedURLException, IOException, ServiceException {
  SiteEntry entry = new SiteEntry();
  entry.setTitle(new PlainTextConstruct(title));
  entry.setSummary(new PlainTextConstruct(summary));

  Theme tt = new Theme();
  tt.setValue(theme);
  entry.setTheme(tt);

  entry.getCategories().add(new Category(TagCategory.Scheme.TAG, tag, null));

  return client.insert(new URL(getSiteFeedUrl()), entry);
}

SiteEntry newSiteEntry = createSite("My Site Title", "summary for site", "slate", "tag");

הבקשה שלמעלה תיצור אתר חדש בדומיין G Suite example.com. לכן, כתובת האתר תהיה https://sites.google.com/a/example.com/my-site-title.

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

העתקת אתר

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

העתקת אתר דומה ליצירת אתר חדש. ההבדל הוא שצריך להגדיר בSiteEntry החדש קישור שכולל את הקישור העצמי של האתר כדי לשכפל אותו. הנה דוגמה לשכפול האתר שנוצר בקטע יצירת אתרים חדשים:

public SiteEntry copySite(String title, String summary, String sourceHref)
    throws MalformedURLException, IOException, ServiceException {
  SiteEntry entry = new SiteEntry();
  entry.setTitle(new PlainTextConstruct(title));
  entry.setSummary(new PlainTextConstruct(summary));
  entry.addLink(SitesLink.Rel.SOURCE, Link.Type.ATOM, sourceHref);

  return client.insert(new URL(getSiteFeedUrl()), entry);
}

String sourceHref = newSiteEntry.getLink(SitesLink.Rel.SOURCE, Link.Type.ATOM).getHref();
SiteEntry myTwin = copySite("Duplicate Site", "A copy", sourceHref);

נקודות חשובות:

  • אפשר להעתיק רק אתרים ותבניות אתר שבבעלות המשתמש המאומת.
  • אפשר גם להעתיק תבנית אתר. אתר הוא תבנית אם ההגדרה 'פרסום האתר הזה כתבנית' מסומנת בדף ההגדרות של Google Sites.
  • אפשר להעתיק אתר מדומיין אחר, כל עוד אתם רשומים כבעלים באתר המקור.

עדכון המטא-נתונים של אתר

כדי לשנות שם של אתר, לשנות את העיצוב, תג הקטגוריה או הסיכום שלו, צריך קודם לאחזר את SiteEntry שמכיל את האתר הרלוונטי, לשנות נכס אחד או יותר ולאחר מכן לקרוא ל-method update() של SiteEntry. הדוגמה הזו משנה את העיצוב של האתר הקודם ומשנה את שם האתר:

myTwin.setTitle(new PlainTextConstruct("better-title"));

Theme theme = myTwin.getTheme();
theme.setValue('iceberg');
myTwin.setTheme(theme);

myTwin.getCategories().add(new Category(TagCategory.Scheme.TAG, "newTag", null));

SiteEntry updatedSiteEntry = myTwin.update();

System.out.println(updatedSiteEntry.getTitle().getPlainText();

מיפויים של כתובות אינטרנט

מיפויים של כתובות אינטרנט מאפשרים למשתמשי Google Sites למפות את הדומיינים שלהם לאתר שנוצר באמצעות Google Sites. לדוגמה, אפשר להשתמש ב-http://www.mydomainsite.com במקום ב-http://sites.google.com/a/domain.com/mysite. תוכלו לשנות באופן ידני את מיפוי כתובות האינטרנט של האתר בהתאם למקום שבו הוא מתארח. מידע נוסף זמין במאמר במרכז העזרה.

אחזור מיפויים של כתובות אינטרנט של אתר

כדי להחזיר את המיפויים של כתובות האינטרנט לאתר, מאחזרים את הערך/הפיד של האתר עם הפרמטר with-mappings=true:

SiteQuery query = new SiteQuery(new URL("https://sites.google.com/feeds/site/siteName"));
query.setWithMappings(true);

SiteFeed feed = service.getFeed(query, SiteFeed.class);
for (SiteEntry entry : feed.getEntries()) {
  System.out.println("Mappings for '" + entry.getSiteName().getValue() + "':");
  for (Link link : entry.getWebAddressMappingLinks()) {
    System.out.println("  " + link.getHref());
  }
}

מיפויים קיימים יוצגו כ-link עם rel='webAddressMapping'. לדוגמה, בדוגמה שלמעלה יש שלושה סימני webAddressMapping שמפנות לאתר http://sites.google.com/site/myOtherTestSite.

שינוי מיפויים של כתובות אינטרנט

הערה: בכל הפעולות של GET/POST/PUT צריך לציין את הפרמטר with-mappings=true כשעובדים עם מיפויים של כתובות אינטרנט. אם הפרמטר חסר, ערכי webAddressMapping לא יוחזרו ברשומות האתר (GET) ולא נלקחו בחשבון כשמעדכנים או מסירים מיפויים (PUT) מרשומה.

כדי להוסיף, לעדכן או למחוק מיפוי, פשוט צריך לציין, לשנות או להסיר קישור כזה כשיוצרים אתרים חדשים או מעדכנים את המטא-נתונים של אתר. הפרמטר with-mappings=true חייב להיכלל ב-URI של פיד האתר. הערה: כדי לעדכן את מיפויי הכתובות, אם מדובר באתר שמתארח ב-G Suite צריך להיות מנהל אתר או אדמינים של דומיין.

לדוגמה, הבקשה שבהמשך מעדכנת את המיפוי של http://www.mysitemapping.com לערך http://www.my-new-sitemapping.com, ומסירה את הערך http://www.mysitemapping2.com על ידי השארת הקישור מחוץ לרשומה:

SiteEntry entry = client.getEntry(new URL("https://sites.google.com/feeds/site/site/siteName?with-mappings=true"), SiteEntry.class);

// Modify mappings (remove all mappings, add some of them again, add modified mappings)
entry.removeLinks(SitesLink.Rel.WEBADDRESSMAPPING, Link.Type.HTML);
entry.addLink(SitesLink.Rel.WEBADDRESSMAPPING, Link.Type.HTML, "http://www.my-new-sitemapping.com");

// Update the entry with the mappings.
entry.update();

הערה: אפשר לציין מיפויים של כתובות אינטרנט גם בזמן היצירה/העתקה של האתר.

חזרה למעלה

פיד הפעילות

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

כדי לשלוח שאילתה לגבי פיד הפעילות, צריך לשלוח HTTP GET לכתובת ה-URL של פיד הפעילות:

https://sites.google.com/feeds/activity/site/siteName

בלקוח Java, משתמשים במחלקה ActivityFeed כדי להחזיר ActivityEntry אובייקטים:

public String buildActivityFeedUrl() {
  String domain = "site";  // OR if the Site is hosted on G Suite, your domain (e.g. example.com)
  String siteName = "mySite";
  return "https://sites.google.com/feeds/activity/" + domain + "/" + siteName + "/";
}

public void getActivityFeed() throws IOException, ServiceException {
  ActivityFeed activityFeed = client.getFeed(new URL(buildActivityFeedUrl()), ActivityFeed.class);
  for (BaseActivityEntry<?> entry : activityFeed.getEntries()){
    System.out.println(entry.getSummary().getPlainText());
    System.out.println(" revisions link: " + entry.getRevisionLink().getHref());
  }
}

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

חזרה למעלה

פיד גרסאות קודמות

כדי לאחזר את היסטוריית הגרסאות של ערך תוכן כלשהו, שולחים HTTP GET לקישור הגרסה הקודמת של הרשומה:

https://sites.google.com/feeds/revision/site/siteName/CONTENT_ENTRY_ID

בדוגמה הזו מופיעה שאילתה לגבי פיד התוכן, ולאחר מכן מאחזרת את הגרסה הקודמת של פיד התוכן עבור רשומת התוכן הראשונה:

ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl()), ContentFeed.class);
URL revisionFeedUrl = new URL(contentFeed.getEntries().get(0).getRevisionLink().getHref()); // use first entry

public void getRevisionFeed(String revisionFeedUrl) throws IOException, ServiceException {
  RevisionFeed revisionFeed = client.getFeed(revisionFeedUrl, RevisionFeed.class);
  for (BaseContentEntry<?> entry : revisionFeed.getEntries()){
    System.out.println(entry.getTitle().getPlainText());
    System.out.println(" updated: " + entry.getUpdated().toUiString() + " by " +
        entry.getAuthors().get(0).getEmail());
    System.out.println(" revision #: " + entry.getRevision().getValue());
  }
}

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

חזרה למעלה

פיד תוכן

אחזור של פיד התוכן

עדכון התוכן מפרט את התוכן העדכני ביותר של אתר. אפשר לגשת אליו באמצעות שליחת GET HTTP לכתובת ה-URL של פיד התוכן:

https://sites.google.com/feeds/content/site/siteName
פרמטר פידתיאור
site"site" או הדומיין של הדומיין המתארח ב-G Suite (למשל, example.com).
siteNameשם מרחב האינטרנט של האתר שלך; מופיע בכתובת של האתר (למשל mySite).

דוגמה לאחזור פיד התוכן:

public String buildContentFeedUrl() {
  String domain = "site";  // OR if the Site is hosted on G Suite, your domain (e.g. example.com)
  String siteName = "mySite";
  return "https://sites.google.com/feeds/content/" + domain + "/" + siteName + "/";
}

ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl()), ContentFeed.class);

התוצאה contentFeed שמתקבלת היא אובייקט ContentFeed שמכיל את התגובה מהשרת. כל רשומה של contentFeed מייצגת דף או פריט שונה באתר של המשתמש. השדה ContentFeed יכלול סוגים שונים של אובייקטים. כולם יעברו בירושה מהיחידה הארגונית BaseContentEntry: ListItemEntry, ListPageEntry, AttachmentEntry, WebAttachmentEntry, FileCabinetPageEntry, AnnouncementsPageEntry, AnnouncementEntry, WebPageEntry, CommentEntry.

הנה דוגמה לפירוט הסוגים השונים של ערכים ב-ContentFeed. כל סוג של רשומה מכיל מאפיינים שונים, אך לא כולם מודפסים כאן.

public String getContentBlob(BaseContentEntry<?> entry) {
 return ((XhtmlTextConstruct) entry.getTextContent().getContent()).getXhtml().getBlob();
}

// Extracts an entry's numeric ID.
private String getEntryId(String selfLink) {
  return selfLink.substring(selfLink.lastIndexOf("/") + 1);
}

public void printContentEntries(ContentFeed contentFeed) {
  System.out.println("Listing all WebPageEntry:");
  for (WebPageEntry entry : contentFeed.getEntries(WebPageEntry.class)) {
    System.out.println(" title: " + entry.getTitle().getPlainText());
    System.out.println(" id: " + getEntryId(entry));
    if (entry.getParentLink() != null) {
      System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref()));
    }
    System.out.println(" author: " + entry.getAuthors().get(0).getEmail());
    System.out.println(" content: " + getContentBlob(entry));
  }

  System.out.println("Listing all ListPageEntry:");
  for (ListPageEntry entry : contentFeed.getEntries(ListPageEntry.class)) {
    System.out.println(" title: " + entry.getTitle().getPlainText());
    System.out.println(" id: " + getEntryId(entry));
    for (Column col : entry.getData().getColumns()) {
      System.out.print(" [" + col.getIndex() + "] " + col.getName() + "\t");
    }
  }

  for (ListItemEntry entry : contentFeed.getEntries(ListItemEntry.class)) {
    for (Field field : entry.getFields()) {
      System.out.print(" [" + field.getIndex() + "] " + field.getValue() + "\t");
    }
    System.out.println("\n");
  }

  System.out.println("Listing all FileCabinetPageEntry:");
  for (FileCabinetPageEntry entry : contentFeed.getEntries(FileCabinetPageEntry.class)) {
    System.out.println(" title: " + entry.getTitle().getPlainText());
    System.out.println(" id: " + getEntryId(entry));
    System.out.println(" content: " + getContentBlob(entry));
  }

  System.out.println("Listing all CommentEntry:");
  for (CommentEntry entry : contentFeed.getEntries(CommentEntry.class)) {
    System.out.println(" in-reply-to: " + entry.getInReplyTo().toString());
    System.out.println(" content: " + getContentBlob(entry));
  }

  System.out.println("Listing all AnnouncementsPageEntry:");
  for (AnnouncementsPageEntry entry : contentFeed.getEntries(AnnouncementsPageEntry.class)) {
    System.out.println(" title: " + entry.getTitle().getPlainText());
    System.out.println(" id: " + getEntryId(entry));
    System.out.println(" content: " + getContentBlob(entry));
  }

  System.out.println("Listing all AnnouncementEntry:");
  for (AnnouncementEntry entry : contentFeed.getEntries(AnnouncementEntry.class)) {
    System.out.println(" title: " + entry.getTitle().getPlainText());
    System.out.println(" id: " + getEntryId(entry));
    if (entry.getParentLink() != null) {
      System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref()));
    }
    System.out.println(" draft?: " + entry.isDraft());
    System.out.println(" content: " + getContentBlob(entry));
  }

  System.out.println("Listing all AttachmentEntry:");
  for (AttachmentEntry entry : contentFeed.getEntries(AttachmentEntry.class)) {
    System.out.println(" title: " + entry.getTitle().getPlainText());
    System.out.println(" id: " + getEntryId(entry));
    if (entry.getParentLink() != null) {
      System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref()));
    }
    if (entry.getSummary() != null) {
      System.out.println(" description: " + entry.getSummary().getPlainText());
    }
    System.out.println(" revision: " + entry.getRevision().getValue());
    MediaContent content = (MediaContent) entry.getContent();
    System.out.println(" src: " + content.getUri());
    System.out.println(" content type: " + content.getMimeType().getMediaType());
  }

  System.out.println("Listing all WebAttachmentEntry:");
  for (WebAttachmentEntry entry : contentFeed.getEntries(WebAttachmentEntry.class)) {
    System.out.println(" title: " + entry.getTitle().getPlainText());
    System.out.println(" id: " + getEntryId(entry));
    if (entry.getParentLink() != null) {
      System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref()));
    }
    if (entry.getSummary() != null) {
      System.out.println(" description: " + entry.getSummary().getPlainText());
    }
    System.out.println(" src: " + ((MediaContent) entry.getContent()).getUri());
  }
}

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

דוגמאות לשאילתות של פיד תוכן

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

הערה: בדוגמאות בקטע הזה נעשה שימוש בשיטה buildContentFeedUrl() באחזור של פיד התוכן.

אחזור סוגים ספציפיים של רשומות

כדי לאחזר רק סוג מסוים של רשומה, צריך להשתמש בפרמטר kind. הדוגמה הזו מחזירה רק attachment רשומות:

ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl()));
query.setKind("webpage");
ContentFeed contentFeed = client.getFeed(query, ContentFeed.class);
for (AttachmentEntry entry : contentFeed.getEntries(AttachmentEntry.class)) {
  System.out.println(entry.getTitle().getPlainText());
}

כדי להחזיר יותר מסוג רשומה אחד, צריך להפריד כל kind באמצעות ','. דוגמה זו מחזירה את הערכים filecabinet ו-listpage:

URL url = new URL(buildContentFeedUrl() + "?kind=filecabinet,listpage");
ContentFeed contentFeed = client.getFeed(url, ContentFeed.class);
for (FileCabinetPageEntry entry : contentFeed.getEntries(FileCabinetPageEntry.class)) {
  System.out.println(" title: " + entry.getTitle().getPlainText());
}
for (ListPageEntry entry : contentFeed.getEntries(ListPageEntry.class)) {
  System.out.println(" title: " + entry.getTitle().getPlainText());
}

אחזור דף לפי נתיב

אם ידוע לך מהו הנתיב היחסי של דף באתר שנוצר באמצעות Google Sites, אפשר להשתמש בפרמטר path כדי לאחזר את הדף הספציפי. הדוגמה הזו תחזיר את הדף שנמצא ב-http://sites.google.com/site/siteName/path/to/the/page:

ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl()));
query.setPath("/path/to/the/page");
ContentFeed contentFeed = client.getFeed(query, ContentFeed.class);
for (BaseContentEntry<?> entry : contentFeed.getEntries()) {
  System.out.println(" title: " + entry.getTitle().getPlainText());
}

מאחזרים את כל הרשומות מדף הורה

אם ידוע לך מזהה רשומת התוכן של דף (למשל "1234567890" בדוגמה שלמטה), אפשר להשתמש בפרמטר parent כדי לאחזר את כל רשומות הצאצא שלו (אם יש):

ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl()));
query.setParent("1234567890");
ContentFeed contentFeed = client.getFeed(query, ContentFeed.class);

פרמטרים נוספים מופיעים במדריך העזר.

חזרה למעלה



יצירת תוכן

הערה: לפני שיוצרים תוכן לאתר, צריך לוודא שהגדרתם את האתר בלקוח.
client.site = "siteName";

אפשר ליצור תוכן חדש (דפי אינטרנט, דפי רשימה, דפי ארון קבצים, דפי הודעות וכו') על ידי שליחת POST HTTP אל פיד התוכן:

https://sites.google.com/feeds/content/site/siteName

בפרמטר kind במדריך העזר מופיעה רשימה של סוגי צומתי התמיכה.

יצירת פריטים / דפים חדשים

בדוגמה הזו נוצר webpage חדש ברמה העליונה של האתר, שכולל XHTML לגוף הדף, ומגדיר את כותרת הכותרת ל-'New WebPage Title':

private void setContentBlob(BaseContentEntry<?> entry, String pageContent) {
  XmlBlob xml = new XmlBlob();
  xml.setBlob(pageContent);
  entry.setContent(new XhtmlTextConstruct(xml));
}

public WebPageEntry createWebPage(String title, String content)
    throws MalformedURLException, IOException, ServiceException {
  WebPageEntry entry = new WebPageEntry();
  entry.setTitle(new PlainTextConstruct(title));

  setContentBlob(entry, content); // Entry's HTML content

  return client.insert(new URL(buildContentFeedUrl()), entry);
}

WebPageEntry createdEntry = createWebPage("New Webpage Title", "<b>HTML content</b>");
System.out.println("Created! View at " + createdEntry.getHtmlLink().getHref());

אם הבקשה תבוצע בהצלחה, createdEntry יכיל עותק של הרשומה שנוצרה בשרת.

יצירת פריטים/דפים בנתיבים של כתובות URL מותאמות אישית

כברירת מחדל, הדוגמה הקודמת תיווצר תחת כתובת ה-URL http://sites.google.com/site/siteName/new-webpage-title, והכותרת של הדף תהיה 'New Webpage Title'. כלומר, הפרמטר <atom:title> מנורמל ל-new-webpage-title עבור כתובת ה-URL. כדי להתאים אישית את נתיב כתובת ה-URL של דף, אפשר להגדיר את הרכיב <sites:pageName>.

הדוגמה הזו יוצרת דף filecabinet חדש עם הכותרת 'File Storage', אבל יוצרת את הדף בכתובת ה-URL http://sites.google.com/site/siteName/files (במקום http://sites.google.com/site/siteName/file-storage) על ידי ציון הרכיב <sites:pageName>.

public FileCabinetPageEntry createFileCabinetPage(String title, String content, String customPageName)
    throws MalformedURLException, IOException, ServiceException {
  FileCabinetPageEntry entry = new FileCabinetPageEntry();
  entry.setTitle(new PlainTextConstruct(title));

  setContentBlob(entry, content); // Entry's HTML content

  entry.setPageName(new PageName(customPageName)); // Upload to a custom page path

  return client.insert(new URL(buildContentFeedUrl()), entry);
}

FileCabinetPageEntry createdEntry = createFileCabinetPage("File Storage", "<b>HTML content</b>", "files");
System.out.println("Created! View at " + createdEntry.getHtmlLink().getHref());

השרת משתמש בכללי הקדימות הבאים למתן שמות לנתיב כתובת ה-URL של דף:

  1. <sites:pageName>, אם יש כזה. חייב לעמוד ב-a-z, A-Z, 0-9, -, _.
  2. <atom:title>, לא יכול להיות null אם לא קיים pageName. באמצעות נורמליזציה, תצטרכו לחתוך ולכווץ את הרווח הלבן לערך '-' ולהסיר תווים שלא תואמים לערך a-z, A-Z, 0-9, -, _.

יצירת דפי משנה

כדי ליצור דפי משנה (ילדים) בדף הורה, צריך להגדיר ברשומה את הקישור להורה. המאפיין href של הקישור לקישור העצמי של הצומת הראשי.

public AnnouncementEntry postAnnouncement(String title, String content, AnnouncementsPageEntry parentPage)
    throws MalformedURLException, IOException, ServiceException {
  AnnouncementEntry entry = new AnnouncementEntry();
  entry.setTitle(new PlainTextConstruct(title));

  setContentBlob(entry, content); // Entry's HTML content

  // Set the entry's parent link to create the announcement under that page.
  entry.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, parentPage.getSelfLink().getHref());

  return client.insert(new URL(buildContentFeedUrl()), entry);
}

ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=announcementspage"), ContentFeed.class);

AnnouncementEntry createdEntry = postAnnouncement("Party!!", "My place, this weekend", contentFeed.getEntries().get(0));
System.out.println("New post by " + createdEntry.getAuthors().get(0).getName());

הדוגמה שלמעלה יוצרת announcement חדש בדף ההודעות הראשון שנמצא בפיד התוכן של המשתמש. כותרת ההודעה היא 'מסיבה!!', והתוכן שלה הוא 'המקום שלי, בסופ"ש הקרוב'.

תבניות של דפים

יצירת תבניות של דפים

תהליך היצירה של תבנית דף זהה לתהליך היצירה של יצירת פריטים/דפים חדשים ויצירת דפי משנה.ההבדל הוא שההבדל הוא הוספה של category עם מונח ותווית שמוגדרים ל-'http://schemas.google.com/g/2005#template' ו-'template', בהתאמה.

הדוגמה הזו יוצרת תבנית webpage חדשה.

// The template webpage entry.
WebPageEntry entry = new WebPageEntry();

// Set title and content.
entry.setTitle(new PlainTextConstruct("Page template title"));
XmlBlob xml = new XmlBlob();
xml.setBlob("Content for page template");
entry.setContent(new XhtmlTextConstruct(xml));

// Set the template category
Category TEMPLATE_CATEGORY = new Category(TemplateCategory.Scheme.LABELS,
    TemplateCategory.Term.TEMPLATE, TemplateCategory.Label.TEMPLATE);
entry.getCategories().add(TEMPLATE_CATEGORY);

// Insert the template webpage entry.
WebPageEntry createdEntry = client.insert(new URL("https://sites.google.com/feeds/content/site/siteName"), entry);

יצירת דפים מתבנית

בדומה ליצירת תבניות דפים, ניתן ליצור דף חדש מתבנית על ידי הוספת <link> עם rel='http://schemas.google.com/sites/2008#template' שמצביע לקישור העצמי של תבנית דף.

הדוגמה הזו יוצרת תבנית filecabinet חדשה ולאחר מכן יוצרת דף filecabinet חדש מהתבנית הזו.

URL feedUrl = new URL("https://sites.google.com/feeds/content/site/siteName");

// 1. Create file cabinet page template
FileCabinetPageEntry inputTemplateEntry = new FileCabinetPageEntry();
inputTemplateEntry.setTitle(new PlainTextConstruct("File cabinet page template title"));
XmlBlob xml = new XmlBlob();
xml.setBlob("Content for page template");
inputTemplateEntry.setContent(new XhtmlTextConstruct(xml));

// Set the template category
Category TEMPLATE_CATEGORY = new Category(TemplateCategory.Scheme.LABELS,
    TemplateCategory.Term.TEMPLATE, TemplateCategory.Label.TEMPLATE);
inputTemplateEntry.getCategories().add(TEMPLATE_CATEGORY);

// 2. Create file cabinet page template instance
FileCabinetPageEntry templateEntry = client.insert(feedUrl, inputTemplateEntry);

// Specify link to the page template
FileCabinetPageEntry templateInstanceEntry = new FileCabinetPageEntry();
templateInstanceEntry.setTitle(new PlainTextConstruct("File cabinet template instance"));
templateInstanceEntry.addLink(new Link(SitesLink.Rel.TEMPLATE, Link.Type.ATOM, templateEntry.getSelfLink().getHref()));

FileCabinetPageEntry createdFileCabinetFromTemplate =  client.insert(feedUrl, templateInstanceEntry);

הערה: גם אם יש תבנית שמגדירה <category>, עדיין צריך לכלול את הערך בערך. כמו כן, אם כוללים רכיב <content>, השרת ידחה אותו.

העלאת קבצים

בדומה ל-Google Sites, ה-API תומך בהעלאת קבצים מצורפים לדף של ספריית קבצים או לדף הורה.

כדי להעלות קובץ מצורף להורה, צריך לשלוח בקשת HTTP מסוג POST לכתובת ה-URL של פיד התוכן:

https://sites.google.com/feeds/content/site/siteName

יש להעלות את כל סוגי הקבצים המצורפים לדף הורה. לכן צריך להגדיר קישור הורה באובייקט AttachmentEntry או WebAttachmentEntry שמנסים להעלות. מידע נוסף זמין ביצירת דפי משנה.

הקבצים מועלים

הדוגמה הזו מעלה קובץ PDF ל-FileCabinetPageEntry הראשון שנמצא בפיד התוכן של המשתמש. הקובץ המצורף נוצר עם הכותרת 'תחילת העבודה' ותיאור (אופציונלי), 'חבילת משאבי אנוש'.

MimetypesFileTypeMap mediaTypes = new MimetypesFileTypeMap();
mediaTypes.addMimeTypes("application/msword doc");
mediaTypes.addMimeTypes("application/vnd.ms-excel xls");
mediaTypes.addMimeTypes("application/pdf pdf");
mediaTypes.addMimeTypes("text/richtext rtx");
// ... See a more complete list of mime types in the SitesHelper.java

public AttachmentEntry uploadAttachment(File file, BasePageEntry<?> parentPage,
    String title, String description) throws IOException, ServiceException {
  AttachmentEntry newAttachment = new AttachmentEntry();
  newAttachment.setMediaSource(new MediaFileSource(file, mediaTypes.getContentType(file)));
  newAttachment.setTitle(new PlainTextConstruct(title));
  newAttachment.setSummary(new PlainTextConstruct(description));
  newAttachment.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, parentPage.getSelfLink().getHref());

  return client.insert(new URL(buildContentFeedUrl()), newAttachment);
}

ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=filecabinet"), ContentFeed.class);
FileCabinetPageEntry parentPage = contentFeed.getEntries(FileCabinetPageEntry.class).get(0);

AttachmentEntry attachment = uploadAttachment(
    new File("/path/to/your/file.pdf"), parentPage, "Getting Started", "HR packet");
System.out.println("Uploaded!");

אם ההעלאה תתבצע בהצלחה, attachment יכיל עותק של הקובץ המצורף שנוצר.

העלאת קובץ מצורף לתיקייה

כדי להעלות קובץ מצורף לתיקייה קיימת בתוך FileCabinetPageEntry, צריך לכלול קטגוריה שבה המאפיין 'term' מוגדר לשם התיקייה. לדוגמה, מוסיפים את השורה הבאה ב-uploadAttachment():

newAttachment.getCategories().add(new Category("http://schemas.google.com/sites/2008#folder", "FolderName"));

קבצים מצורפים באינטרנט

קבצים מצורפים באינטרנט הם סוגים מיוחדים של קבצים מצורפים. למעשה, אלו קישורים לקבצים אחרים באינטרנט שתוכלו להוסיף לרשומות שלכם בספריות הקבצים. התכונה הזו דומה לשיטת ההעלאה 'הוספת קובץ לפי כתובת URL' בממשק המשתמש של Google Sites.

הערה: ניתן ליצור קבצים מצורפים באינטרנט רק מתחת לספריית קבצים. לא ניתן להעלות אותם לסוגים אחרים של דפים.

הדוגמה הזו יוצרת WebAttachmentEntry מתחת לערך ה-FileCabinetPageEntry הראשון שנמצא בפיד התוכן של המשתמש. הכותרת והתיאור (אופציונלי) של הלוגו מוגדרים ל-'GoogleLogo' ול 'צבעים יפים', בהתאמה.

public WebAttachmentEntry uploadWebAttachment(String contentUrl, FileCabinetPageEntry filecabinet,
    String title, String description) throws MalformedURLException, IOException, ServiceException {
  MediaContent content = new MediaContent();
  content.setUri(contentUrl);

  WebAttachmentEntry webAttachment = new WebAttachmentEntry();
  webAttachment.setTitle(new PlainTextConstruct(title));
  webAttachment.setSummary(new PlainTextConstruct(description));
  webAttachment.setContent(content);
  webAttachment.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM,
      filecabinet.getSelfLink().getHref());

  return client.insert(new URL(buildContentFeedUrl()), webAttachment);
}

ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=filecabinet"), ContentFeed.class);
FileCabinetPageEntry parentPage = contentFeed.getEntries(FileCabinetPageEntry.class).get(0);

WebAttachmentEntry webAttachment =
    uploadWebAttachment("http://www.google.com/images/logo.gif", parentPage, "Google's Logo", "nice colors");
System.out.println("Web attachment created!");

POST יוצר קישור בארון הקבצים של המשתמש שמצביע על התמונה בכתובת 'http://www.google.com/images/logo.gif'.

חזרה למעלה



עדכון התוכן

עדכון המטא-נתונים ותוכני ה-HTML של דף

אפשר לערוך את המטא-נתונים (כותרת, שם דף וכו') ואת תוכן הדף מכל סוג BaseContentEntry באמצעות שיטת update() של הרשומה. הפעולה הזו תשלח בקשת HTTP PUT לקישור edit של הרשומה.

למטה מוצגת דוגמה לעדכון של ListPageEntry עם השינויים הבאים:

  • הכותרת שונתה ל 'כותרת מעודכנת'
  • תוכן ה-HTML של הדף מתעדכן ל'<p>תוכן HTML מעודכן</p>'
  • כותרת העמודה הראשונה ברשימה תשתנה ל'בעלים'
ContentFeed contentFeed = client.getFeed(
    new URL(buildContentFeedUrl() + "?kind=listpage"), ContentFeed.class);
ListPageEntry listPage = contentFeed.getEntries(ListPageEntry.class).get(0); // Update first list page found

// Update title
listPage.setTitle(new PlainTextConstruct("Updated Title"));

// Update HTML content
XmlBlob xml = new XmlBlob();
xml.setBlob("<p>Updated HTML Content</p>");
listPage.setContent(new XhtmlTextConstruct(xml));

// Change first column's heading
listPage.getData().getColumns().get(0).setName("Owner");

// listPage.setPageName(new PageName("new-page-path"));  // You can also change the page's URL path

ListPageEntry updatedEntry = listPage.update();

System.out.println("ListPage updated!");

התוכן של הקובץ המצורף מתעדכן

ב-AttachmentEntry אפשר גם לעדכן את התוכן על ידי הגדרת ה-MediaSource של הרשומה ושימוש בשיטה updateMedia(boolean) של הרשומה.

הדוגמה הבאה תעדכן את התוכן של קובץ מצורף קיים:

public AttachmentEntry updateFile(AttachmentEntry entry, File newFile)
    throws IOException, ServiceException {
  // See Uploading Attachments for the definition of mediaTypes.
  entry.setMediaSource(new MediaFileSource(newFile, mediaTypes.getContentType(newFile)));
  return entry.updateMedia(false);
}

הדוגמה שולחת בקשת PUT HTTP לקישור edit-media של הרשומה. הערך AttachmentEntry שמוחזר יכיל את התוכן המעודכן.

עדכון המטא-נתונים והתוכן של הקבצים המצורפים

ניתן לעדכן את המטא-נתונים של קובץ מצורף ואת התוכן שלו באותה קריאה באמצעות השיטה updateMedia(). אם אפשר לעדכן רק את תוכן הקובץ, את המטא-נתונים או את שניהם.

הדוגמה הזו משנה את שם הקובץ המצורף ל'כותרת חדשה', מעדכנת את התיאור שלו ומחליפה את תוכן הקובץ בקובץ ZIP חדש. מכיוון שהבקשה מכילה תוכן חדש של הקובץ, נעשה שימוש בupdateMedia() של AttachmentEntry.

public AttachmentEntry updateAttachment(AttachmentEntry entry, File newFile, String newTitle, String newDescription)
    throws IOException, ServiceException  {
  // See Uploading Attachments for the definition of mediaTypes.
  entry.setMediaSource(new MediaFileSource(newFile, mediaTypes.getContentType(newFile)));
  entry.setTitle(new PlainTextConstruct(newTitle));
  entry.setSummary(new PlainTextConstruct(newDescription));

  return entry.updateMedia(true);
}

ContentFeed contentFeed = client.getFeed(
    new URL(buildContentFeedUrl() + "?kind=attachment&max-results=1"), ContentFeed.class);
AttachmentEntry attachment = contentFeed.getEntries(AttachmentEntry.class).get(0); // Update first attachment found

AttachmentEntry updatedAttachment = updateAttachment(attachment, new File("/path/to/file.zip"), "New Title", "better stuff");

חזרה למעלה



מחיקת תוכן

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

entry.delete();

אפשר גם להשתמש בשיטת delete() של מחלקת השירות על ידי העברת הקישור edit וערך ה-ETag של הרשומה:

client.delete(entry.getEditLink().getHref(), "*"); // Note: using "*" may overwrite another client's changes.

אם הרשומה נמחקה בהצלחה, השרת מגיב באמצעות HTTP 200 OK.

חזרה למעלה



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

כדי להוריד AttachmentEntry, צריך לשלוח בקשת HTTP GET אל הקישור לתוכן src של הרשומה.

בדוגמה הזו מתבצעת הורדה של השדה AttachmentEntry הראשון שנמצא בפיד התוכן של המשתמש לספרייה "/path/to/save/file/":

private void downloadFile(String downloadUrl, String fullFilePath) throws IOException, ServiceException {
  System.out.println("Downloading file from: " + downloadUrl);

  MediaContent mc = new MediaContent();
  mc.setUri(downloadUrl);
  MediaSource ms = service.getMedia(mc);

  InputStream inStream = null;
  FileOutputStream outStream = null;

  try {
    inStream = ms.getInputStream();
    outStream = new FileOutputStream(fullFilePath);

    int c;
    while ((c = inStream.read()) != -1) {
      outStream.write(c);
    }
  } finally {
    if (inStream != null) {
      inStream.close();
    }
    if (outStream != null) {
      outStream.flush();
      outStream.close();
    }
  }
}

public void downloadAttachment(AttachmentEntry entry, String directory) throws IOException, ServiceException {
  String url = ((OutOfLineContent) entry.getContent()).getUri();
  downloadFile(url, directory + entry.getTitle().getPlainText()); // Use entry's title for the save filename
}

ContentFeed contentFeed = client.getFeed(
    new URL(buildContentFeedUrl() + "?kind=attachment&max-results=1"), ContentFeed.class);

downloadAttachment(contentFeed.getEntries(AttachmentEntry.class).get(0), "/path/to/save/file/");
System.out.println("Downloaded.");

חזרה למעלה

עדכון ACL

סקירה כללית של הרשאות שיתוף (ACL)

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

ניתן להשתמש במחלקות AclFeed וב-AclEntry כדי לשלוט בהרשאות השיתוף של אתר, ולאחזור באמצעות שיטת getFeed() של מחלקת השירות.

בדוגמה הבאה מאחזרים את פיד ה-ACL של אתר נתון, ומדפיסים את ההרשאות של כל AclEntry:

public String getAclFeedUrl(String siteName) {
  String domain = "site";  // OR if the Site is hosted on G Suite, your domain (e.g. example.com)
  return "https://sites.google.com/feeds/acl/site/" + domain + "/" + siteName + "/";
}

public void getAclFeed(String siteName) throws IOException, ServiceException {
  AclFeed aclFeed = client.getFeed(new URL(getAclFeedUrl(siteName)), AclFeed.class);
  for (AclEntry entry : aclFeed.getEntries()) {
    System.out.println(entry.getScope().getValue() + " (" + entry.getScope().getType() + ") : " +
                       entry.getRole().getValue());
  }
}

getAclFeed('my-site-name');

אם משתמשים בערכים ב-SiteFeed, כל SiteEntry מכיל קישור אל פיד ה-ACL שלו. לדוגמה, קטע הקוד הזה מאחזר את פיד ה-ACL של SiteEntry:

String aclLink = siteEntry.getLink(SitesAclFeedLink.Rel.ACCESS_CONTROL_LIST, Link.Type.ATOM).getHref();
AclFeed aclFeed = client.getFeed(new URL(aclLink), AclFeed.class);

שיתוף אתר

הערה: יש רשימות ACL לשיתוף רק אם הדומיין מוגדר לאפשר הרשאות כאלה (לדוגמה, אם מופעל שיתוף עם דומיינים של G Suite מחוץ לדומיין וכו').

כדי לשתף אתר שנוצר באמצעות Google Sites באמצעות ה-API, הלקוח צריך ליצור AclEntry חדש ו-POST אותו לשרת.

הנה דוגמה שמוסיפה את 'user@example.com' בתור reader באתר:

AclRole role = new AclRole("reader");
AclScope scope = new AclScope(AclScope.Type.USER, "user@example.com");
AclEntry aclEntry = addAclRole(role, scope, entry);

public AclEntry addAclRole(AclRole role, AclScope scope, SiteEntry siteEntry)
    throws IOException, MalformedURLException, ServiceException  {
  AclEntry aclEntry = new AclEntry();
  aclEntry.setRole(role);
  aclEntry.setScope(scope);

  Link aclLink = siteEntry.getLink(SitesAclFeedLink.Rel.ACCESS_CONTROL_LIST, Link.Type.ATOM);
  return client.insert(new URL(aclLink.getHref()), aclEntry);
}

בקטע סקירה כללית של פיד ACL מופיעים הערכים האפשריים של AclScope ו-AclRoles.

שיתוף ברמת הקבוצה וברמת הדומיין

בדומה לשיתוף אתר עם משתמש יחיד, ניתן לשתף אתר עם קבוצת Google או דומיין של G Suite.

שיתוף לכתובת אימייל של קבוצה:

AclScope scope = new AclScope(AclScope.Type.GROUP, "group_name@example.com");

שיתוף עם כל הדומיין:

AclScope scope = new AclScope(AclScope.Type.DOMAIN, "example.com");

שיתוף ברמת הדומיין נתמך רק בדומיינים של G Suite ורק בדומיין שהאתר מתארח בו. לדוגמה, בכתובת http://sites.google.com/a/domain1.com/siteA אפשר לשתף את האתר כולו רק עם domain1.com, ולא עם domain2.com. אתרים שאינם מתארחים בדומיין של G Suite (למשל http://sites.google.com/site/siteB) לא יכולים להזמין דומיינים.

שינוי הרשאות השיתוף

להרשאת שיתוף קיימת באתר מסוים, קודם צריך לאחזר את AclEntry הרלוונטי, לשנות את ההרשאה באופן הרצוי, ולאחר מכן להפעיל את השיטה update() של AclEntry כדי לשנות את ה-ACL בשרת.

הדוגמה הזו משנה את הדוגמה הקודמת של aclEntry מהקטע שיתוף אתר, על ידי עדכון הכתובת 'user@example.com' ל-writer (שותף עריכה):

aclEntry.setRole(new AclRole("writer"));
AclEntry updatedAclEntry = aclEntry.update();

// Could also use the client's update method
// client.update(new URL(aclEntry.getEditLink().getHref()), aclEntry);

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

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

כדי להסיר הרשאת שיתוף, קודם צריך לאחזר את AclEntry ואז להפעיל את שיטת ה-delete() שלו:

aclEntry.delete();

// Could also use the client's delete method
// client.delete(new URL(aclEntry.getEditLink().getHref()), aclEntry);

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

חזרה למעלה

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

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

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

כדי לבצע אחזור מותנה מהסוג הזה, גם השיטה getFeed() וגם השיטה getEntry() מספקות ארגומנט נוסף שמקבל ערך ETag או אובייקט DateTime לכותרת If-Modified-Since. ניתן לגשת ל-etag של רשומה מ-entry.getEtag().

בדוגמה הבאה מתבצעת אחזור מותנה לרשומת דף אינטרנט של תוכן:

String feedUrl = "https://sites.google.com/feeds/content/site/siteName/123456789";
WebPageEntry entry = client.getEntry(new URL(feedUrl), WebPageEntry.class, "\"GVQHSARDQyp7ImBq\"");

כשהשרת מקבל את הבקשה הזו, הוא בודק אם לפריט שביקשתם יש אותו ETag כמו ל-ETag שציינתם. אם תגי ה-ETags תואמים, הפריט לא השתנה והשרת מחזיר חריג מסוג NotModifiedException של HTTP 304.

אם תגי ה-ETags לא תואמים, הפריט השתנה מאז הפעם האחרונה שביקשת אותו והשרת מחזיר את הפריט.

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

חזרה למעלה