Java भाषा गाइड

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

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

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

दर्शक

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

रिपोर्ट का इस्तेमाल करना

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

लाइब्रेरी इंस्टॉल की जा रही है

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

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

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

  1. java/lib/gdata-sites-2.0.jar - यहां दिया गया वर्शन 2.0, क्लासिक Sites API के 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/ पर भी उपलब्ध है. SitesDemo.java, उपयोगकर्ता को कई कार्रवाइयां करने देता है. इनमें, क्लासिक Sites API को इस्तेमाल करने का तरीका बताया जाता है.

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

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

सलाह: हमारे Eclipse प्लगिन की मदद से तुरंत सेटअप करने के लिए, Eclipse with 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. इस पैरामीटर का इस्तेमाल, जानकारी लॉग करने के लिए किया जाता है.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

साइट फ़ीड

साइट फ़ीड का इस्तेमाल उन 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 ऑब्जेक्ट के साथ जवाब देगा. इसमें सर्वर के जोड़े गए एलिमेंट शामिल होंगे: साइट का लिंक, साइट के एसीएल फ़ीड का लिंक, साइट का नाम, टाइटल, खास जानकारी वगैरह.

किसी साइट को कॉपी करना

ध्यान दें: यह सुविधा सिर्फ़ 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 के 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://sites.google.com/a/domain.com/mysite के बजाय, http://www.mydomainsite.com का इस्तेमाल किया जा सकता है. आपकी साइट कहां होस्ट की गई है, इसके आधार पर आप साइट की वेब पता मैपिंग में मैन्युअल तरीके से बदलाव कर सकते हैं. ज़्यादा जानकारी के लिए, हमारे सहायता केंद्र का लेख पढ़ें.

किसी साइट की वेब पता मैपिंग फ़ेच की जा रही है

किसी साइट के लिए वेब पते की मैपिंग दिखाने के लिए, 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 पैरामीटर तय किया जाना चाहिए. अगर पैरामीटर मौजूद नहीं है, तो webAddressMapping को साइट एंट्री (GET) में नहीं लौटाया जाएगा या किसी एंट्री से मैपिंग अपडेट करते/हटाते समय (PUT) मैपिंग को अपडेट करते समय, इनका इस्तेमाल नहीं किया जाएगा.

मैपिंग जोड़ने, अपडेट करने या मिटाने के लिए, नई साइटें बनाते समय या साइट का मेटाडेटा अपडेट करते समय ऐसा लिंक साफ़ तौर पर बताएं, उसमें बदलाव करें या उसे हटाएं. साइट फ़ीड के यूआरआई में, 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 या Clientलॉगिन टोकन का इस्तेमाल करके पुष्टि करनी होगी. साइटें सेवा के लिए पुष्टि करना देखें.

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

पुनरीक्षण फ़ीड

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

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

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

कॉन्टेंट फ़ीड को वापस पाया जा रहा है

कॉन्टेंट फ़ीड में, किसी साइट के सबसे नए कॉन्टेंट को सूची में शामिल किया जाता है. इसे, कॉन्टेंट फ़ीड के यूआरएल पर एचटीटीपी 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 या Clientलॉगिन टोकन का इस्तेमाल करके पुष्टि करनी होगी. 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 बनाता है, जिसमें पेज के मुख्य हिस्से के लिए कुछ एक्सएचटीएमएल शामिल होता है. साथ ही, यह हेडिंग के टाइटल को 'नया वेबपेज टाइटल' पर सेट करता है:

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 पेज बनाया जाता है, लेकिन <sites:pageName> एलिमेंट तय करके, यूआरएल http://sites.google.com/site/siteName/files (http://sites.google.com/site/siteName/file-storage के बजाय) में पेज बनाया जाता है.

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. अगर pageName मौजूद नहीं है, तो <atom:title> खाली नहीं होना चाहिए. सामान्य तरीका, खाली सफ़ेद जगह को '-' में ट्रिम + छोटा करना है और 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 फ़ाइल अपलोड करता है. अटैचमेंट को 'शुरुआत करना' टाइटल और '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"));

वेब अटैचमेंट

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

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

इस उदाहरण में, उपयोगकर्ता के कॉन्टेंट फ़ीड में मिलने वाले पहले FileCabinetPageEntry के तहत WebAttachmentEntry बनाया जाता है. इसका टाइटल और (ज़रूरी नहीं) ब्यौरा 'Googleलोगो' और 'अच्छे रंग' पर सेट है.

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 तरह के मेटाडेटा (टाइटल, पेज का नाम वगैरह) और पेज कॉन्टेंट में बदलाव करने के लिए, एंट्री के 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();

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

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

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

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



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

AttachmentEntry को डाउनलोड करने के लिए, एंट्री के कॉन्टेंट src लिंक पर एक एचटीटीपी GET अनुरोध भेजें.

यह उदाहरण, उपयोगकर्ता के कॉन्टेंट फ़ीड में मिलने वाले पहले AttachmentEntry को "/path/to/save/file/" डायरेक्ट्री में डाउनलोड करता है:

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

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

  InputStream inStream = null;
  FileOutputStream outStream = null;

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

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

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

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

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

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

ACL फ़ीड

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

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

भूमिकाएं

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

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

स्कोप

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

  • user — कोई ई-मेल पता मान, उदाहरण के लिए "user@gmail.com".
  • group — Google Group का ई-मेल पता, उदाहरण के लिए "group@domain.com".
  • domain — G Suite का डोमेन नाम, जैसे कि "domain.com".
  • डिफ़ॉल्ट — "डिफ़ॉल्ट" टाइप का सिर्फ़ एक संभावित स्कोप है, जिसका कोई वैल्यू नहीं होती है (जैसे, <gAcl:scope type="default">). इस खास दायरा से उस ऐक्सेस को कंट्रोल किया जाता है जो किसी सार्वजनिक साइट पर, किसी उपयोगकर्ता को डिफ़ॉल्ट रूप से मिला होता है.

ध्यान दें: डोमेन में gAcl:role वैल्यू को "मालिकाना हक" पर सेट नहीं किया जा सकता. वे सिर्फ़ पाठक या लेखक हो सकते हैं.

एसीएल फ़ीड को वापस पाया जा रहा है

AclFeed और AclEntry क्लास का इस्तेमाल, किसी साइट को शेयर करने की अनुमतियों को कंट्रोल करने के लिए किया जा सकता है. इन्हें सर्विस क्लास के getFeed() तरीके से फ़ेच किया जा सकता है.

नीचे दिया गया उदाहरण किसी साइट के लिए एसीएल फ़ीड को फ़ेच करता है और हर 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 का एसीएल फ़ीड फ़ेच करता है:

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 साइट शेयर करने के लिए, आपके क्लाइंट को सर्वर पर एक नया 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 वैल्यू के लिए, एसीएल फ़ीड की खास जानकारी सेक्शन देखें.

ग्रुप और डोमेन लेवल पर शेयर करने की सुविधा

एक उपयोगकर्ता के साथ साइट शेयर करने की तरह ही, किसी साइट को 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 के update() तरीके को कॉल करें.

यह उदाहरण, '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);

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

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

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

aclEntry.delete();

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

ETag के बारे में ज़्यादा जानकारी के लिए, 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 के जैसा है या नहीं. अगर ETag मेल खाते हैं, तो इसका मतलब है कि आइटम में कोई बदलाव नहीं हुआ है. साथ ही, सर्वर एचटीटीपी 304 NotModifiedException अपवाद दिखाता है.

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

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

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