מדריך לשפת Java

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

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

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

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

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

טיפ: להגדרה מהירה באמצעות הפלאגין Eclipse שלנו, אפשר לעיין במאמר שימוש ב-Eclipse עם Google Data APIs.

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

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, שמייצג חיבור לקוח לגרסה הקלאסית של Google Sites API:

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

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

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

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

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

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

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

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

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

חזרה למעלה

פיד גרסאות

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

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
פרמטר של פידתיאור
sitesite או הדומיין של הדומיין שמתארח ב-G Suite (למשל example.com).
siteNameשם מרחב האינטרנט של האתר; שנמצא בכתובת ה-URL של האתר (למשל, 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 ועל הממשקים הספציפיים לגרסה הקלאסית של Google Sites API. כדי לקבל מידע מפורט ורשימה מלאה של הפרמטרים הנתמכים, אפשר לעיין ב מדריך עזר.

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

הדוגמה שולחת בקשת HTTP PUT לקישור 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 לקישור של תוכן הרשומה ברשומה.

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

חזרה למעלה