חשוב: המסמך הזה נכתב לפני 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. כדי להתחיל:
- התקנת Java 1.5 ואילך
- להורדת ספריית הלקוח (הגרסה האחרונה של
gdata-src.java.zip
) - מורידים את רשימת התלות
- הורד את האפליקציות לדוגמה (הגרסה האחרונה של
gdata-samples.java.zip
)
אחרי שמתקינים את קובצי ה- .jars, צריך לכלול את הפרטים הבאים בפרויקט:
java/lib/gdata-sites-2.0.jar
– גרסה 2.0 כאן מיועדת לגרסה 1.4 של הגרסה הקלאסית של Google Sites API.java/lib/gdata-core-1.0.jar
java/lib/gdata-client-1.0.jar
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.
ביטול אסימון סשן
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
פרמטר של פיד | תיאור |
---|---|
site | site או הדומיין של הדומיין שמתארח ב-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 של דף:
<sites:pageName>
, אם קיים. חייב לעמוד בדרישות שלa-z, A-Z, 0-9, -, _
.<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.