راهنمای زبان جاوا

مهم: این سند قبل از سال 2012 نوشته شده است. گزینه های احراز هویت شرح داده شده در این سند (OAuth 1.0، AuthSub، و ClientLogin) از 20 آوریل 2012 به طور رسمی منسوخ شده اند و دیگر در دسترس نیستند. ما شما را تشویق می کنیم که در اسرع وقت به OAuth 2.0 مهاجرت کنید.

Google Sites Data API به برنامه های کاربردی سرویس گیرنده اجازه می دهد تا به محتوای یک سایت Google دسترسی داشته باشند، منتشر کنند، و آن را تغییر دهند. برنامه مشتری شما همچنین می‌تواند فهرستی از فعالیت‌های اخیر، واکشی سابقه بازبینی و دانلود پیوست‌ها را درخواست کند.

این راهنما علاوه بر ارائه پیش‌زمینه‌ای در مورد قابلیت‌های Sites Data API، مثال‌هایی برای تعامل با API با استفاده از کتابخانه سرویس گیرنده جاوا ارائه می‌دهد. برای راهنمایی در تنظیم کتابخانه سرویس گیرنده، به شروع به کار با کتابخانه Google Data Java Client مراجعه کنید. اگر علاقه مند به درک بیشتر در مورد پروتکل اساسی هستید که توسط کتابخانه سرویس گیرنده جاوا برای تعامل با Sites API کلاسیک استفاده می شود، لطفاً راهنمای پروتکل را ببینید.

مخاطب

این سند برای توسعه دهندگانی در نظر گرفته شده است که می خواهند برنامه های مشتری را بنویسند که با استفاده از کتابخانه Google Data Java Client با Google Sites تعامل دارند.

شروع کردن

Google Sites از حساب‌های Google یا حساب‌های G Suite برای احراز هویت استفاده می‌کند. اگر از قبل یک حساب کاربری دارید، همه چیز آماده است. در غیر این صورت، می توانید یک حساب کاربری جدید ایجاد کنید .

نصب کتابخانه

برای راهنمایی در راه‌اندازی و نصب کتابخانه سرویس گیرنده، شروع به کار با Google Data Java Client Library را ببینید. اگر از Eclipse استفاده می کنید، آن مقاله همچنین نحوه راه اندازی پروژه خود را با استفاده از افزونه Google Data APIs Eclipse توضیح می دهد. در اینجا چیزی است که برای شروع نیاز دارید:

  1. جاوا 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 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 به کاربر اجازه می دهد تا تعدادی عملیات را انجام دهد که نحوه استفاده از Sites API کلاسیک را نشان می دهد.

توجه داشته باشید، برای اجرای نمونه باید java/sample/util/lib/sample-util.jar را وارد کنید.

شروع پروژه خودتان

نکته : برای راه‌اندازی سریع با افزونه Eclipse، مقاله استفاده از Eclipse با Google Data API را ببینید.

بسته به نیاز برنامه شما، به چندین واردات نیاز دارید. توصیه می کنیم با واردات زیر شروع کنید:

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 را تنظیم کنید، که نشان دهنده اتصال مشتری به Sites API کلاسیک است:

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

آرگومان applicationName باید از فرمت پیروی کند: company-applicationname-version . این پارامتر برای اهداف ورود به سیستم استفاده می شود.

توجه : بقیه این راهنما فرض می کند که شما یک SitesService در client متغیر ایجاد کرده اید.

احراز هویت با Sites API کلاسیک

کتابخانه سرویس گیرنده جاوا می تواند برای کار با فیدهای عمومی یا خصوصی استفاده شود. Sites Data API بسته به مجوزهای Sites و عملیاتی که می‌خواهید انجام دهید، دسترسی به فیدهای خصوصی و عمومی را فراهم می‌کند. برای مثال، ممکن است بتوانید فید محتوای یک سایت عمومی را بخوانید اما به‌روزرسانی آن را انجام ندهید - چیزی که نیاز به یک کلاینت تأیید شده دارد. این را می توان از طریق تأیید اعتبار نام کاربری/گذرواژه ClientLogin ، AuthSub یا OAuth انجام داد.

لطفاً برای اطلاعات بیشتر در مورد AuthSub، OAuth و ClientLogin به نمای کلی احراز هویت Google Data APIs مراجعه کنید.

نکته : API از SSL (HTTPS) پشتیبانی می کند. اگر از AuthSub/OAuth استفاده می‌کنید، حتماً محدوده http s ://sites.google.com/feeds/ را برای درخواست فید از طریق SSL مشخص کنید. همچنین توجه داشته باشید که برای دامنه‌های G Suite، تنظیمات «نیاز به SSL» در کنترل پنل اداری توسط API رعایت می‌شود. شما می توانید با فراخوانی client.useSsl(); .

AuthSub برای برنامه های کاربردی وب

AuthSub Authentication برای برنامه های کاربردی وب باید توسط برنامه های مشتری که نیاز به احراز هویت کاربران خود در حساب های 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() چندین پارامتر (مرتبط با پارامترهای پرس و جو مورد استفاده توسط AuthSubRequest handler) می گیرد:

  • URL بعدی - URL که گوگل پس از ورود کاربر به حساب خود و اعطای دسترسی، به آن تغییر مسیر می دهد. http://www.example.com/welcome.jsp در مثال بالا
  • محدودهhttps://sites.google.com/feeds/ در مثال بالا
  • یک بولی برای نشان دادن اینکه آیا توکن در حالت ثبت استفاده خواهد شد یا خیر. در مثال بالا false
  • یک بولی دوم برای نشان دادن اینکه آیا توکن بعداً با یک توکن جلسه مبادله خواهد شد یا خیر. در مثال بالا true

ارتقاء به یک نشانه جلسه

استفاده از AuthSub با Google Data API Client Libraries را ببینید.

بازیابی اطلاعات مربوط به نشانه جلسه

استفاده از AuthSub با Google Data API Client Libraries را ببینید.

لغو نشانه جلسه

استفاده از AuthSub با Google Data API Client Libraries را ببینید.

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 در برنامه‌های جاوا، به استفاده از ClientLogin با کتابخانه‌های Google Data API Client مراجعه کنید.

بازگشت به بالا

فید سایت

از فید سایت می توان برای فهرست کردن سایت های Google که یک کاربر مالک آن است یا مجوز مشاهده آنها را دارد استفاده کرد. همچنین می توان از آن برای تغییر نام یک سایت موجود استفاده کرد. برای دامنه‌های G Suite، می‌توان از آن برای ایجاد و/یا کپی کل سایت استفاده کرد.

سایت های فهرست بندی

برای پرس و جو از فید سایت، یک HTTP GET به URL فید سایت ارسال کنید:

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

در سرویس گیرنده جاوا، می توانید از کلاس های 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() کلاینت در فید سایت فراهم کرد.

این مثال یک سایت کاملاً جدید با موضوع 'slate' (تنظیم اختیاری) ایجاد می کند و نام سایت (الزامی) و توضیحات (اختیاری) را ارائه می دهد:

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 حاوی سایت مورد نظر را واکشی کنید، یک یا چند ویژگی را اصلاح کنید و سپس متد SiteEntry 's update() را فراخوانی کنید. این مثال تم سایت قبلی را تغییر می دهد و نام سایت را تغییر می دهد:

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 نگاشت کنند. به عنوان مثال، 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 s در ورودی های سایت (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 به نشانی اینترنتی فید فعالیت ارسال کنید:

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

در سرویس گیرنده جاوا، از کلاس 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 احراز هویت کند. به احراز هویت در سرویس سایت ها مراجعه کنید.

بازگشت به بالا

فید تجدید نظر

برای واکشی تاریخچه ویرایش برای هر ورودی محتوا، یک 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 احراز هویت کند. به احراز هویت در سرویس سایت ها مراجعه کنید.

بازگشت به بالا

فید محتوا

بازیابی فید محتوا

فید محتوا آخرین محتوای یک سایت را فهرست می کند. با ارسال HTTP GET به 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 Data API و پارامترهای خاص 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());
}

بازیابی صفحه به مسیر

اگر مسیر نسبی یک صفحه را در سایت گوگل می دانید، می توانید از پارامتر 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";

محتوای جدید (صفحات وب، صفحات فهرست، صفحات کابینت فایل، صفحات اعلامیه و غیره) را می توان با ارسال یک HTTP POST به فید محتوا ایجاد کرد:

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

برای لیستی از انواع گره های پشتیبانی، به پارامتر kind در راهنمای مرجع مراجعه کنید.

ایجاد آیتم ها / صفحات جدید

این مثال یک webpage جدید در سطح بالای سایت ایجاد می کند، شامل مقداری XHTML برای بدنه صفحه می شود و عنوان عنوان را روی «عنوان صفحه وب جدید» تنظیم می کند:

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 سفارشی

به‌طور پیش‌فرض، مثال قبلی تحت نشانی اینترنتی http://sites.google.com/ site / siteName /new-webpage-title ایجاد می‌شود و عنوان صفحه «عنوان صفحه وب جدید» دارد. یعنی <atom:title> به عنوان new-webpage-title برای URL عادی می شود. برای سفارشی کردن مسیر URL صفحه، می توانید عنصر <sites:pageName> را تنظیم کنید.

این مثال یک صفحه filecabinet جدید با عنوان «ذخیره‌سازی فایل» ایجاد می‌کند، اما صفحه را تحت نشانی اینترنتی http://sites.google.com/ site / siteName /files (به‌جای http://sites.google.com/ site / siteName /file-storage ایجاد می‌کند. 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> ، در صورت وجود. باید az, AZ, 0-9, -, _ برآورده کند.
  2. اگر pageName موجود نباشد، <atom:title> نباید تهی باشد. عادی سازی عبارت است از برش + کوچک کردن فضای سفید به "-" و حذف نویسه هایی که با az, AZ, 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 است. ' و 'قالب'، به ترتیب.

این مثال یک الگوی 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 به آدرس اینترنتی فید محتوا ارسال کنید:

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 صفحه

فراداده (عنوان، pageName، و غیره) و محتوای صفحه از هر نوع 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، ابتدا ورودی محتوا را بازیابی کنید، سپس ورودی 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 وجود دارد:

  • خواننده - بیننده (معادل دسترسی فقط خواندنی).
  • نویسنده - یک همکار (معادل دسترسی خواندن/نوشتن).
  • مالک - معمولاً مدیر سایت (معادل دسترسی خواندن/نوشتن).

محدوده ها

عنصر scope نشان دهنده موجودیتی است که این سطح دسترسی را دارد. چهار نوع ممکن از عنصر gAcl:scope وجود دارد:

  • کاربر — یک مقدار آدرس ایمیل، به عنوان مثال "user@gmail.com".
  • گروه — یک آدرس ایمیل گروه Google، به عنوان مثال "group@domain.com".
  • دامنه — یک نام دامنه G Suite، به عنوان مثال «domain.com».
  • پیش فرض — تنها یک محدوده ممکن از نوع "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 با استفاده از 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);
}

برای مقادیر احتمالی AclScope و AclRoles به بخش بررسی اجمالی فید ACL مراجعه کنید.

اشتراک گذاری در سطح گروه و دامنه

مشابه اشتراک‌گذاری یک سایت با یک کاربر ، می‌توانید یک سایت را در گروه 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 مورد نظر را واکشی کنید، مجوز را به دلخواه تغییر دهید و سپس متد AclEntry 's update() را برای تغییر ACL در سرور فراخوانی کنید.

این مثال با به‌روزرسانی «user@example.com» به‌عنوان writer (همکار) نمونه قبلی aclEntry ما را از بخش اشتراک‌گذاری سایت تغییر می‌دهد:

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 می پذیرد. می‌توانید از 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ی است که شما مشخص کرده اید یا خیر. اگر تگ‌های ET مطابقت داشته باشند، آیتم تغییر نکرده است، و سرور برمی‌گرداند یا یک استثنای HTTP 304 NotModifiedException ایجاد می‌شود.

اگر تگ های ET با هم مطابقت نداشته باشند، پس از آخرین باری که شما آن را درخواست کرده اید، مورد تغییر یافته است و سرور آن مورد را برمی گرداند.

برای اطلاعات بیشتر در مورد ETags، راهنمای مرجع Google Data APIs را ببینید.

بازگشت به بالا