Java भाषा गाइड

अहम जानकारी: यह दस्तावेज़ 2012 से पहले लिखा गया था. पुष्टि के विकल्प इस दस्तावेज़ में दिए गए (OAuth 1.0, AuthSub, और ClientLogin) आधिकारिक तौर पर बंद कर दी गई है 20 अप्रैल, 2012 से है और अब उपलब्ध नहीं है. हम आपको यहां माइग्रेट करने के लिए प्रोत्साहित करते हैं: OAuth 2.0 को जल्द से जल्द मंज़ूरी दें.

Google Sites Data API का इस्तेमाल करके, क्लाइंट ऐप्लिकेशन किसी Google साइट में मौजूद कॉन्टेंट को ऐक्सेस कर सकते हैं, उसे पब्लिश कर सकते हैं, और उसमें बदलाव कर सकते हैं. आपका क्लाइंट ऐप्लिकेशन भी हाल की गतिविधियों की सूची का अनुरोध कर सकता है, संशोधन इतिहास फ़ेच कर सकता है, और अटैचमेंट डाउनलोड कर सकता है.

Sites Data API की सुविधाओं के बारे में कुछ जानकारी देने के साथ-साथ, इस गाइड में एपीआई के साथ इंटरैक्ट करने के उदाहरण भी दिए गए हैं Java क्लाइंट लाइब्रेरी का इस्तेमाल करके क्लाइंट लाइब्रेरी सेट अप करने में मदद पाने के लिए, यहां देखें Google Data Java क्लाइंट लाइब्रेरी का इस्तेमाल शुरू करना. अगर आपको यह जानना है कि अगर आपको क्लासिक साइट एपीआई के साथ इंटरैक्ट करने के लिए Java क्लाइंट लाइब्रेरी में इस्तेमाल किए जाने वाले प्रोटोकॉल के बारे में ज़्यादा जानकारी चाहिए, तो कृपया यहां देखें प्रोटोकॉल गाइड.

दर्शक

यह दस्तावेज़ उन डेवलपर के लिए है जो Google Sites के साथ इंटरैक्ट करने वाले क्लाइंट ऐप्लिकेशन लिखना चाहते हैं Google Data Java क्लाइंट लाइब्रेरी का इस्तेमाल करके.

शुरू करना

'Google साइटें' पुष्टि करने के लिए Google खातों या G Suite खातों का इस्तेमाल करती है. अगर आपके पास पहले से कोई खाता है, तो इसका मतलब है कि आपको खाता सेट अप करना है. अगर ऐसा नहीं है, तो नया खाता बनाएं.

लाइब्रेरी इंस्टॉल करना

क्लाइंट लाइब्रेरी को सेट अप और इंस्टॉल करने में मदद पाने के लिए, Google Data Java क्लाइंट लाइब्रेरी का इस्तेमाल शुरू करना देखें. अगर एक्लिप्स का इस्तेमाल किया जा रहा है, तो वह लेख Google Data API Eclipse प्लगिन का इस्तेमाल करके, अपने प्रोजेक्ट को सेट अप करने का तरीका. यहां बताया गया है कि शुरू करने के लिए आपको क्या करना होगा:

  1. Java 1.5 या उसके बाद वाला वर्शन इंस्टॉल करें
  2. क्लाइंट लाइब्रेरी डाउनलोड करें (gdata-src.java.zip का सबसे नया वर्शन)
  3. डिपेंडेंसी की सूची डाउनलोड करें
  4. ऐप्लिकेशन के नमूने (gdata-samples.java.zip का सबसे नया वर्शन) डाउनलोड करें

.Jers को इंस्टॉल करने के बाद, आपको अपने प्रोजेक्ट में इन्हें शामिल करना होगा:

  1. java/lib/gdata-sites-2.0.jar - यहां मौजूद वर्शन 2.0, Sites के क्लासिक वर्शन के एपीआई के 1.4 वर्शन के लिए है.
  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) ज़रूर शामिल करें.

सैंपल ऐप्लिकेशन चलाना

पूरी तरह से काम करने वाला सैंपल ऐप्लिकेशन, gdata-samples.java.zip डाउनलोड की /java/sample/sites सबडायरेक्ट्री में मौजूद है. सोर्स, इस साइट पर भी उपलब्ध है /trunk/java/sample/sites/ SVN रिपॉज़िटरी में मौजूद होता है. इसे सोर्स टैब से ऐक्सेस किया जा सकता है. SitesDemo.java से उपयोगकर्ता को कई कार्रवाइयां करने की अनुमति मिलती है, जिनमें क्लासिक Sites API को इस्तेमाल करने का तरीका बताया गया है.

ध्यान दें, सैंपल चलाने के लिए, आपको java/sample/util/lib/sample-util.jar शामिल करना होगा.

अपना प्रोजेक्ट शुरू करना

सलाह: हमारे Eclipse प्लगिन की मदद से तुरंत सेटअप करने के लिए, Google Data API के साथ Eclipse का इस्तेमाल करना लेख देखें.

अपने ऐप्लिकेशन की ज़रूरतों के मुताबिक, आपको कई डेटा इंपोर्ट करने की ज़रूरत होगी. हमारा सुझाव है कि आप नीचे दिए गए इंपोर्ट से शुरू करें:

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

इसके बाद, आपको एक SitesService ऑब्जेक्ट भी सेटअप करना होगा, जो क्लासिक Sites एपीआई के लिए क्लाइंट कनेक्शन को दिखाता है:

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

applicationName आर्ग्युमेंट को इस फ़ॉर्मैट में होना चाहिए: company-applicationname-version. इस पैरामीटर का इस्तेमाल, लॉगिंग के लिए किया जाता है.

ध्यान दें: इस गाइड के बाकी हिस्से के मुताबिक यह माना जाता है कि आपने वैरिएबल client में SitesService बनाया है.

क्लासिक Sites API में पुष्टि की जा रही है

Java क्लाइंट लाइब्रेरी का इस्तेमाल, सार्वजनिक या निजी फ़ीड के साथ काम करने के लिए किया जा सकता है. साइट डेटा एपीआई निजी और सार्वजनिक ऐक्सेस देता है और जो कार्रवाई आप करने की कोशिश कर रहे हैं उसके आधार पर फ़ीड. उदाहरण के लिए, आप हमारे लेखों का कॉन्टेंट फ़ीड पढ़ सकते हैं सार्वजनिक साइट, लेकिन उसमें अपडेट न करें - कुछ ऐसा जिसके लिए एक प्रमाणित क्लाइंट की ज़रूरत होगी. ऐसा इनके ज़रिए किया जा सकता है: ClientLogin उपयोगकर्ता नाम/पासवर्ड की पुष्टि करना, AuthSub या OAuth.

AuthSub, OAuth, और ClientLogin पर ज़्यादा जानकारी के लिए, कृपया Google Data API की पुष्टि से जुड़ी खास जानकारी देखें.

जानकारी: यह एपीआई, एसएसएल (एचटीटीपीएस) के साथ काम करता है. अगर AuthSub/OAuth का इस्तेमाल किया जा रहा है, तो SSL पर फ़ीड का अनुरोध करने के लिए https://sites.google.com/feeds/ का दायरा. यह भी ध्यान रखें कि G Suite डोमेन, 'एसएसएल ज़रूरी है' सेटिंग का काम API द्वारा किया जाता है. सभी को ज़बरदस्ती भेजा जा सकता है client.useSsl(); को कॉल करके एचटीटीपीएस पर अनुरोध करने वाले एपीआई का अनुरोध करें.

वेब ऐप्लिकेशन के लिए AuthSub

वेब ऐप्लिकेशन के लिए AuthSub की पुष्टि का इस्तेमाल ऐसे क्लाइंट ऐप्लिकेशन के ज़रिए किया जाना चाहिए जिन्हें की पुष्टि करने के लिए कहा जा सकता है. ऑपरेटर को Google Sites के उपयोगकर्ता के उपयोगकर्ता नाम और पासवर्ड के ऐक्सेस की ज़रूरत नहीं होती है - सिर्फ़ AuthSub टोकन ज़रूरी है.

अपने वेब ऐप्लिकेशन में AuthSub शामिल करने के निर्देश देखें

सिर्फ़ एक बार इस्तेमाल होने वाले टोकन के लिए अनुरोध करें

जब उपयोगकर्ता पहली बार आपके ऐप्लिकेशन पर आता है, तो उसे अपनी पहचान की पुष्टि करनी होगी. आम तौर पर, डेवलपर उपयोगकर्ता को निर्देश देने के लिए कुछ टेक्स्ट और लिंक प्रिंट करते हैं AuthSub के मंज़ूरी पेज पर जाएं. Google डेटा की Java क्लाइंट लाइब्रेरी यह यूआरएल जनरेट करें. नीचे दिया गया कोड 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 हैंडलर के इस्तेमाल किए गए क्वेरी पैरामीटर के मुताबिक):

  • अगला यूआरएल — वह यूआरएल जिस पर Google रीडायरेक्ट करेगा उपयोगकर्ता के अपने खाते में लॉग इन करने और ऐक्सेस देने के बाद; ऊपर दिए गए उदाहरण में http://www.example.com/welcome.jsp
  • दायरा — ऊपर दिए गए उदाहरण में https://sites.google.com/feeds/
  • बूलियन से पता चलता है कि टोकन का इस्तेमाल रजिस्टर किए गए मोड में किया जाएगा या नहीं; ऊपर दिए गए उदाहरण में false
  • एक दूसरा बूलियन, जो यह बताता है कि टोकन को बाद में सेशन टोकन के लिए बदला जाएगा या नहीं; ऊपर दिए गए उदाहरण में true

सेशन टोकन पर अपग्रेड करना

Google Data API क्लाइंट लाइब्रेरी के साथ AuthSub का इस्तेमाल करना देखें.

सेशन टोकन के बारे में जानकारी पाना

Google Data API क्लाइंट लाइब्रेरी के साथ AuthSub का इस्तेमाल करना देखें.

सेशन टोकन को रद्द करना

Google Data API क्लाइंट लाइब्रेरी के साथ AuthSub का इस्तेमाल करना देखें.

वेब या इंस्टॉल किए गए/मोबाइल ऐप्लिकेशन के लिए OAuth

OAuth का इस्तेमाल, AuthSub के विकल्प के तौर पर किया जा सकता है और यह वेब ऐप्लिकेशन के लिए है. OAuth का इस्तेमाल करना, AuthSub के सुरक्षित और रजिस्टर किए गए मोड का इस्तेमाल करने जैसा है डेटा के सभी अनुरोध डिजिटल रूप से साइन किए जाने चाहिए. साथ ही, आपको अपना डोमेन रजिस्टर करना होगा.

इंस्टॉल किए गए अपने ऐप्लिकेशन में OAuth लागू करने के निर्देश देखें

अनुरोध टोकन फ़ेच किया जा रहा है

Google Data API क्लाइंट लाइब्रेरी के साथ OAuth का इस्तेमाल करना लेख पढ़ें.

अनुरोध टोकन की अनुमति देना

Google Data API क्लाइंट लाइब्रेरी के साथ OAuth का इस्तेमाल करना लेख पढ़ें.

ऐक्सेस टोकन पर अपग्रेड करना

Google Data API क्लाइंट लाइब्रेरी के साथ OAuth का इस्तेमाल करना लेख पढ़ें.

इंस्टॉल किए गए/मोबाइल ऐप्लिकेशन के लिए ClientLogin

ClientLogin का इस्तेमाल, इंस्टॉल किए गए या ऐसे मोबाइल ऐप्लिकेशन में किया जाना चाहिए जिन्हें की पुष्टि करने के लिए कहा जा सकता है. पहली बार चलाने पर, आपका ऐप्लिकेशन उपयोगकर्ता को उसका उपयोगकर्ता नाम/पासवर्ड डालने का अनुरोध करता है. बाद के अनुरोधों पर, पुष्टि करने वाले टोकन का रेफ़रंस दिया गया है.

इंस्टॉल किए गए अपने ऐप्लिकेशन में ClientLogin शामिल करने के निर्देश देखें

ClientLogin का इस्तेमाल करने के लिए, setUserCredentials() SitesService ऑब्जेक्ट का तरीका, जो इससे इनहेरिट किया गया है GoogleService. उपयोगकर्ता का ईमेल पता और पासवर्ड बताएं किसकी ओर से आपका क्लाइंट अनुरोध कर रहा है. उदाहरण के लिए:

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

सलाह: जब आपका ऐप्लिकेशन पहली बार उपयोगकर्ता की पुष्टि कर लेगा, तब पुष्टि वाले टोकन को अपने ताकि बाद में इस्तेमाल करने के लिए रीकॉल किया जा सके. आपको हर बार ऐप्लिकेशन चलाने पर, उपयोगकर्ता को उसका पासवर्ड डालने की ज़रूरत नहीं है. ज़्यादा जानकारी के लिए, पुष्टि करने वाले टोकन को वापस लाना देखें.

अपने Java ऐप्लिकेशन में ClientLogin का इस्तेमाल करने के बारे में ज़्यादा जानकारी के लिए, Google Data API क्लाइंट लाइब्रेरी के साथ ClientLogin का इस्तेमाल करना लेख देखें.

वापस सबसे ऊपर जाएं

साइट फ़ीड

साइट फ़ीड का इस्तेमाल, उन Google साइटों की सूची बनाने के लिए किया जा सकता है जिनका मालिकाना हक किसी उपयोगकर्ता के पास है या जिनके पास देखने की अनुमतियां हैं. इसका इस्तेमाल, किसी मौजूदा साइट का नाम बदलने के लिए भी किया जा सकता है. G Suite डोमेन के लिए, इसका इस्तेमाल पूरी साइट में से एक को चुनें.

लिस्टिंग से जुड़ी साइटें

साइट फ़ीड की क्वेरी करने के लिए, साइट फ़ीड के यूआरएल पर एक एचटीटीपी GET भेजें:

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 के तहत एक नई साइट बनाएगा. इस तरह, साइट का यूआरएल 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);

अहम पॉइंट:

  • सिर्फ़ उन साइटों और साइट टेंप्लेट को कॉपी किया जा सकता है जिनका मालिकाना हक पुष्टि किए गए उपयोगकर्ता के पास है.
  • साइट टेंप्लेट को भी कॉपी किया जा सकता है. अगर "इस साइट को एक टेंप्लेट के रूप में पब्लिश करें", तो साइट को एक टेंप्लेट माना जाता है सेटिंग की जाँच की गई है.
  • अगर सोर्स साइट पर आपको मालिक के तौर पर शामिल किया गया है, तो आपके पास किसी दूसरे डोमेन से साइट को कॉपी करने का विकल्प होगा.

किसी साइट का मेटाडेटा अपडेट करना

किसी साइट का नाम बदलने, उसकी थीम, कैटगरी टैग या खास जानकारी बदलने के लिए, आपको पहले उस SiteEntry को फ़ेच करना होगा जिसमें वह साइट शामिल है, एक या ज़्यादा प्रॉपर्टी में बदलाव करें और फिर SiteEntry के 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();

वेब पता मैपिंग

वेब पते की मैपिंग से, Sites के उपयोगकर्ता अपने डोमेन को 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());
  }
}

मौजूदा मैपिंग, rel='webAddressMapping' के साथ link के तौर पर दिखेंगी. उदाहरण के लिए, ऊपर दिए गए उदाहरण में इस साइट पर ले जाने वाले तीन webAddressMapping हैं http://sites.google.com/site/myOtherTestSite.

वेब पता मैपिंग में बदलाव करना

ध्यान दें: सभी GET/POST/PUT ऑपरेशन में, काम करते समय with-mappings=true पैरामीटर होना चाहिए के लिए डिज़ाइन किया गया है. अगर पैरामीटर मौजूद नहीं है, तो साइट एंट्री (GET) में webAddressMapping को नहीं लौटाया जाएगा का इस्तेमाल करते हैं.

मैपिंग जोड़ने, अपडेट करने या मिटाने के लिए, नई साइटें बनाते समय ऐसा लिंक दें, उसे बदलें या हटाएं या किसी साइट का मेटाडेटा अपडेट करना. साइट फ़ीड के यूआरआई में with-mappings=true पैरामीटर शामिल करना ज़रूरी है. ध्यान दें: पते की मैपिंग अपडेट करने के लिए, आपको साइट का एडमिन होना चाहिए या 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();

ध्यान दें, किसी साइट को बनाते/कॉपी करते समय भी वेब पते की मैपिंग को तय किया जा सकता है.

वापस सबसे ऊपर जाएं

गतिविधि फ़ीड

गतिविधि फ़ीड को फ़ेच करके, किसी साइट की हाल की गतिविधि (बदलाव) को फ़ेच किया जा सकता है. इसमें प्रत्येक प्रविष्टि गतिविधि फ़ीड में साइट में किए गए बदलाव की जानकारी होती है.

गतिविधि फ़ीड के बारे में क्वेरी करने के लिए, गतिविधि फ़ीड के यूआरएल पर एक एचटीटीपी GET भेजें:

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

Java क्लाइंट में, ActivityEntry ऑब्जेक्ट देने के लिए, ActivityFeed क्लास का इस्तेमाल करें:

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 टोकन का इस्तेमाल करके पुष्टि करनी होगी. Sites की सेवा के लिए पुष्टि करना देखें.

वापस सबसे ऊपर जाएं

बदलाव फ़ीड

किसी भी कॉन्टेंट एंट्री के लिए बदलावों का इतिहास फ़ेच करने के लिए, एंट्री के बदलाव करने के लिंक पर एक एचटीटीपी 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 टोकन का इस्तेमाल करके पुष्टि करनी होगी. Sites की सेवा के लिए पुष्टि करना देखें.

वापस सबसे ऊपर जाएं

कॉन्टेंट फ़ीड

कॉन्टेंट फ़ीड को फिर से पाना

कॉन्टेंट फ़ीड में साइट का नया कॉन्टेंट मौजूद होता है. कॉन्टेंट फ़ीड के यूआरएल पर एचटीटीपी GET भेजकर, इसे ऐक्सेस किया जा सकता है:

https://sites.google.com/feeds/content/site/siteName
फ़ीड पैरामीटरब्यौरा
site"site" या आपके G Suite से होस्ट किए गए डोमेन का डोमेन (जैसे, example.com).
siteNameआपकी साइट का वेबस्पेस नाम; जो साइट के यूआरएल में मौजूद है (जैसे, mySite).

कॉन्टेंट फ़ीड को फ़ेच करने का उदाहरण:

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

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

यह contentFeed एक ContentFeed ऑब्जेक्ट है, जिसमें सर्वर से मिला रिस्पॉन्स शामिल होता है. हर एंट्री का contentFeed, उपयोगकर्ता की साइट में किसी अलग पेज या आइटम को दिखाता है. ContentFeed में अलग-अलग तरह के नतीजे होंगे ऑब्जेक्ट, सभी BaseContentEntry से लिए गए हैं: ListItemEntry, ListPageEntry, AttachmentEntry, WebAttachmentEntry, FileCabinetPageEntry, AnnouncementsPageEntry, AnnouncementEntry, WebPageEntry, CommentEntry.

यहां एक ContentFeed में अलग-अलग तरह की एंट्री की सूची दी गई है. हर तरह की एंट्री में अलग-अलग प्रॉपर्टी होती हैं. हालांकि, सभी एंट्री यहां प्रिंट नहीं की जाती हैं.

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

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

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

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

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

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

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

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

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

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

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

ध्यान दें: इस फ़ीड के लिए पुष्टि करने की ज़रूरत हो भी सकती है और नहीं भी; शेयर करने की अनुमतियों के आधार पर. अगर साइट गैर-सार्वजनिक है, तो आपके क्लाइंट को AuthSub, OAuth या ClientLogin टोकन का इस्तेमाल करके प्रमाणित करना होगा. यहां जाएं: Sites की सेवा के लिए पुष्टि करना.

कॉन्टेंट फ़ीड से जुड़ी क्वेरी के उदाहरण

कुछ स्टैंडर्ड 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());
}

पाथ के हिसाब से पेज वापस पाना

अगर आपको Google साइट में किसी पेज का रिलेटिव पाथ पता है, तो उस खास पेज को फ़ेच करने के लिए, 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 भेजकर नया कॉन्टेंट (वेबपेज, लिस्टपेज, फ़ाइल कैबिनेट पेज, घोषणा पेज वगैरह) बनाया जा सकता है कॉन्टेंट फ़ीड में:

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

सहायता नोड टाइप की सूची के लिए, रेफ़रंस गाइड में kind पैरामीटर देखें.

नए आइटम / पेज बनाना

यह उदाहरण साइट के टॉप-लेवल के तहत एक नया webpage बनाता है, जिसमें पेज के मुख्य हिस्से के लिए कुछ XL शामिल हैं, और शीर्षक के शीर्षक को 'नए वेबपेज का टाइटल' पर सेट करता है:

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 में सर्वर पर बनाई गई एंट्री की एक कॉपी शामिल होगी.

कस्टम यूआरएल पाथ में आइटम/पेज बनाना

डिफ़ॉल्ट रूप से, पिछला उदाहरण यूआरएल के नीचे http://sites.google.com/site/siteName/new-webpage-title और 'नया वेबपेज टाइटल' का पेज टाइटल होगा. इसका मतलब है कि यूआरएल के लिए, <atom:title> को new-webpage-title के तौर पर नॉर्मलाइज़ किया गया है. किसी पेज के यूआरएल पाथ को अपनी पसंद के मुताबिक बनाने के लिए, <sites:pageName> एलिमेंट को सेट किया जा सकता है.

इस उदाहरण में, 'फ़ाइल स्टोरेज' हेडिंग के साथ एक नया filecabinet पेज बनाया गया है, लेकिन पेज को भी बनाया गया है 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());

किसी पेज के यूआरएल पाथ को नाम देने के लिए, सर्वर इन प्राथमिकता नियमों का इस्तेमाल करता है:

  1. <sites:pageName>, अगर मौजूद है. a-z, A-Z, 0-9, -, _ को पूरा करना ज़रूरी है.
  2. <atom:title>, 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);

किसी टेंप्लेट से पेज बनाना

पेज टेंप्लेट बनाने की तरह ही, किसी टेंप्लेट से नया पेज इंस्टैंशिएट किया जा सकता है. इसके लिए, rel='http://schemas.google.com/sites/2008#template' के साथ <link> शामिल करना होगा पॉइंटिंग सेल्फ़ लिंक पर क्लिक करें.

इस उदाहरण से एक नया 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 की तरह ही, यह एपीआई फ़ाइल कैबिनेट पेज या पैरंट पेज पर अटैचमेंट को अपलोड करने की सुविधा देता है.

किसी पैरंट के लिए अटैचमेंट अपलोड करने के लिए, कॉन्टेंट फ़ीड के यूआरएल पर एचटीटीपी POST का अनुरोध भेजें:

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

सभी तरह के अटैचमेंट, पैरंट पेज पर अपलोड किए जाने चाहिए. इसलिए, आपने AttachmentEntry पर पैरंट लिंक सेट किया है या WebAttachmentEntry ऑब्जेक्ट शामिल करें, जिसे अपलोड करने की कोशिश की जा रही है. ज़्यादा जानकारी के लिए सबपेज बनाना देखें.

अटैचमेंट अपलोड हो रहे हैं

यह उदाहरण, उपयोगकर्ता के कॉन्टेंट फ़ीड में मिले पहले FileCabinetPageEntry में PDF फ़ाइल अपलोड करता है. अटैचमेंट 'Getting Started' के टाइटल के साथ बनाया गया है और एक (वैकल्पिक) विवरण, 'HR पैकेट'.

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"));

वेब अटैचमेंट

वेब अटैचमेंट खास तरह के अटैचमेंट होते हैं. मूल रूप से, वे वेब पर मौजूद दूसरी फ़ाइलों के लिंक होती हैं जिसे अपनी फ़ाइल कैबिनेट सूची में जोड़ा जा सकता है. यह सुविधा 'यूआरएल से फ़ाइल जोड़ें' जैसी है अपलोड करने का तरीका जानना होगा.

ध्यान दें: वेब अटैचमेंट सिर्फ़ फ़ाइल कैबिनेट के तहत बनाए जा सकते हैं. इन्हें दूसरी तरह के पेजों पर अपलोड नहीं किया जा सकता.

यह उदाहरण, उपयोगकर्ता के कॉन्टेंट फ़ीड में मिलने वाले पहले FileCabinetPageEntry के तहत WebAttachmentEntry बनाता है. इसका टाइटल और जानकारी (ज़रूरी नहीं) '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' पर मौजूद इमेज पर पॉइंट करता हुआ एक लिंक बनाता है.

वापस सबसे ऊपर जाएं



कॉन्टेंट अपडेट किया जा रहा है

किसी पेज के मेटाडेटा और/या एचटीएमएल कॉन्टेंट को अपडेट करना

किसी भी BaseContentEntry टाइप के मेटाडेटा (टाइटल, pageName वगैरह) और पेज के कॉन्टेंट में, ये बदलाव किए जा सकते हैं एंट्री के update() तरीके का इस्तेमाल करके. इससे एंट्री के edit पर एक एचटीटीपी PUT अनुरोध भेजा जाएगा लिंक.

ListPageEntry को इन बदलावों के साथ अपडेट करने का एक उदाहरण नीचे दिया गया है:

  • इस टाइटल को 'अपडेट किया गया टाइटल' में बदला गया
  • पेज के एचटीएमएल कॉन्टेंट को '<p>अपडेट किया गया एचटीएमएल कॉन्टेंट</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);
}

इस उदाहरण में, एंट्री के edit-media लिंक पर, एचटीटीपी PUT अनुरोध भेजा गया है. रिटर्न AttachmentEntry में अपडेट किया गया कॉन्टेंट शामिल होगा.

अटैचमेंट मेटाडेटा और कॉन्टेंट अपडेट किया जा रहा है

updateMedia() तरीके का इस्तेमाल करके, एक ही कॉल में किसी अटैचमेंट का मेटाडेटा और उसके कॉन्टेंट को अपडेट किया जा सकता है. अगर आप सिर्फ़ फ़ाइल के कॉन्टेंट, मेटाडेटा या दोनों को अपडेट कर सकते हैं.

यह उदाहरण अटैचमेंट का शीर्षक बदलकर 'नया टाइटल' कर देता है, उसके ब्यौरे को अपडेट करता है, और उसकी फ़ाइल के कॉन्टेंट को एक नई .zip फ़ाइल से बदल देता है. इस अनुरोध में फ़ाइल का नया कॉन्टेंट शामिल है. इसलिए, AttachmentEntry के updateMedia() का इस्तेमाल किया जा रहा है.

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();

एंट्री के edit लिंक और ETag वैल्यू को पास करके भी सर्विस क्लास के delete() तरीके का इस्तेमाल किया जा सकता है:

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

अगर एंट्री मिटा दी गई है, तो सर्वर एचटीटीपी 200 OK के साथ जवाब देता है.

वापस सबसे ऊपर जाएं



अटैचमेंट डाउनलोड किए जा रहे हैं

AttachmentEntry को डाउनलोड करने के लिए, एंट्री के कॉन्टेंट सोर्स लिंक पर एक एचटीटीपी 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 फ़ीड

शेयर करने की अनुमतियों (एसीएल) के बारे में खास जानकारी

एसीएल फ़ीड की हर एसीएल एंट्री किसी खास इकाई की ऐक्सेस भूमिका दिखाती है. इसमें उपयोगकर्ता, उपयोगकर्ताओं का ग्रुप, डोमेन, या डिफ़ॉल्ट ऐक्सेस (जो एक सार्वजनिक साइट है). एंट्री सिर्फ़ उन इकाइयों के लिए दिखाई जाएंगी जिनके पास साफ़ तौर पर ऐक्सेस है. एक एंट्री दिखेगी हर ईमेल पते के लिए, "ऐक्सेस वाले लोग" सेक्शन में पैनल पर जाएं. इसलिए, डोमेन के एडमिन नहीं दिखाए जाएंगे, भले ही उनके पास किसी साइट का इंप्लिसिट ऐक्सेस हो.

भूमिकाएं

रोल एलिमेंट, किसी इकाई के ऐक्सेस लेवल के बारे में बताता है. gAcl:role एलिमेंट की चार वैल्यू हो सकती हैं:

  • रीडर — दर्शक (रीड ओनली ऐक्सेस के बराबर).
  • लेखक — सहयोगी (पढ़ने/लिखने का ऐक्सेस) के बराबर है.
  • मालिक — आम तौर पर, साइट का एडमिन (पढ़ने/लिखने के ऐक्सेस के बराबर).

स्कोप

स्कोप एलिमेंट उस इकाई के बारे में बताता है जिसके पास यह ऐक्सेस लेवल है. gAcl:scope एलिमेंट चार तरह के हो सकते हैं:

  • user — ईमेल पते की वैल्यू, जैसे कि "user@gmail.com".
  • group — Google ग्रुप का ईमेल पता, जैसे कि "group@domain.com".
  • domain — G Suite डोमेन नाम, जैसे कि "domain.com".
  • डिफ़ॉल्ट — "डिफ़ॉल्ट" टाइप का सिर्फ़ एक स्कोप हो सकता है, जिसमें कोई वैल्यू नहीं होती (उदाहरण के लिए, <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 फ़ीड का लिंक होता है. उदाहरण के लिए, यह स्निपेट किसी SiteEntry के acl फ़ीड को फ़ेच करता है:

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

साइट शेयर करना

ध्यान दें: कुछ एसीएल सिर्फ़ तब शेयर किए जा सकते हैं, जब डोमेन कॉन्फ़िगर किया गया हो ऐसी अनुमतियां देने के लिए (उदाहरण के लिए, अगर G Suite डोमेन के लिए डोमेन के बाहर शेयर करने की सुविधा चालू हो वगैरह).

एपीआई का इस्तेमाल करके Google साइट शेयर करने के लिए, आपके क्लाइंट को 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 के लिए ACL फ़ीड की खास जानकारी सेक्शन देखें और 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 पर पूरी साइट का ऐक्सेस सिर्फ़ Domains1.com के साथ शेयर किया जा सकता है, डोमेन2.com के साथ नहीं. ऐसी साइटें जो जो G Suite डोमेन पर होस्ट नहीं किए गए हैं (जैसे कि http://sites.google.com/site/siteB) डोमेन को न्योता नहीं भेज सकते हैं.

शेयर करने की अनुमतियों में बदलाव किया जा रहा है

किसी साइट पर शेयर करने की मौजूदा अनुमति के लिए, सबसे पहले उस AclEntry को फ़ेच करें जिसकी शिकायत की गई है. इसके बाद, अनुमति में बदलाव करें ऐसा करें और फिर सर्वर पर ACL में बदलाव करने के लिए AclEntry के update() तरीके को कॉल करें.

इस उदाहरण में, साइट शेयर करना सेक्शन से हमारे पिछले 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);

ई-टैग के बारे में ज़्यादा जानकारी के लिए, Google Data API से जुड़ी रेफ़रंस गाइड देखें.

शेयर करने की अनुमतियां हटाई जा रही हैं

शेयर करने की अनुमति हटाने के लिए, पहले AclEntry को फिर से पाएं. इसके बाद, इससे delete() तरीके का इस्तेमाल करें:

aclEntry.delete();

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

ई-टैग के बारे में ज़्यादा जानकारी के लिए, Google Data API से जुड़ी रेफ़रंस गाइड देखें.

वापस सबसे ऊपर जाएं

खास विषय

किसी फ़ीड या एंट्री को फिर से वापस पाना

अगर आपको किसी ऐसे फ़ीड या एंट्री को फिर से वापस लाना है जिसे आपने पहले वापस लिया था, तो यह जानकारी देकर परफ़ॉर्मेंस को बेहतर बनाया जा सकता है सूची या एंट्री भेजने के लिए सर्वर का इस्तेमाल सिर्फ़ तब करें, जब पिछली बार जब आपने इसे फ़ेच किया था, तब से अब तक इसमें बदलाव हुआ हो.

शर्तों के साथ डेटा वापस पाने की इस तरह की प्रोसेस के लिए, getFeed() और getEntry(), दोनों तरीके एक अतिरिक्त आर्ग्युमेंट, जो If-Modified-Since हेडर के लिए ETag वैल्यू या DateTime ऑब्जेक्ट स्वीकार करता हो. आपके पास 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 है. अगर ईटैग मेल खाता है, तो आइटम में बदलाव नहीं होता है और सर्वर एचटीटीपी 304 NotModifiedException का अपवाद लागू किया जाएगा.

अगर ई-टैग मेल नहीं खाता है, तो इसका मतलब है कि पिछली बार आपके अनुरोध करने के बाद, आइटम में बदलाव किए गए हैं. साथ ही, सर्वर उस आइटम को दिखाता है.

ई-टैग के बारे में ज़्यादा जानकारी के लिए, Google Data API से जुड़ी रेफ़रंस गाइड देखें.

वापस सबसे ऊपर जाएं