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 क्लाइंट लाइब्रेरी के इस्तेमाल किए गए प्रोटोकॉल के बारे में ज़्यादा जानना है, ताकि यह पता चल सके कि यह प्रोटोकॉल, Classic Sites API के साथ कैसे इंटरैक्ट करता है, तो कृपया प्रोटोकॉल गाइड देखें.

ऑडियंस

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

शुरू करना

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

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

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

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

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

  1. java/lib/gdata-sites-2.0.jar - यहां दिया गया वर्शन 2.0, क्लासिक 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 सबडायरेक्ट्री में मौजूद है. यह सोर्स, SVN रिपॉज़िटरी में /trunk/java/sample/sites/ पर भी उपलब्ध है. इसे सोर्स टैब से ऐक्सेस किया जा सकता है. SitesDemo.java की मदद से उपयोगकर्ता कई कार्रवाइयां कर सकता है. इससे पता चलता है कि Classic 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 API से क्लाइंट कनेक्शन को दिखाता है:

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

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

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

Sites API के पुराने वर्शन के लिए पुष्टि करना

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

AuthSub, OAuth, और ClientLogin के बारे में ज़्यादा जानने के लिए, कृपया Google Data APIs Authentication Overview देखें.

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

  • next यूआरएल — वह यूआरएल जिस पर 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

साइट फ़ीड

साइट फ़ीड का इस्तेमाल, उन Google Sites को लिस्ट करने के लिए किया जा सकता है जिनका मालिकाना हक किसी उपयोगकर्ता के पास है या जिनके लिए उसके पास देखने की अनुमतियां हैं. इसका इस्तेमाल, किसी मौजूदा साइट का नाम बदलने के लिए भी किया जा सकता है. 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 पैरामीटर के बारे में बताना चाहिए. अगर पैरामीटर मौजूद नहीं है, तो साइट की एंट्री (GET) में webAddressMappings नहीं दिखेंगे. इसके अलावा, किसी एंट्री से मैपिंग को अपडेट/हटाते (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 या 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 के कुछ स्टैंडर्ड क्वेरी पैरामीटर और Classic 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 बनाया गया है. इसमें पेज के मुख्य हिस्से के लिए कुछ XHTML शामिल है. साथ ही, हेडिंग के टाइटल को 'New WebPage Title' पर सेट किया गया है:

private void setContentBlob(BaseContentEntry<?> entry, String pageContent) {
  XmlBlob xml = new XmlBlob();
  xml.setBlob(pageContent);
  entry.setContent(new XhtmlTextConstruct(xml));
}

public WebPageEntry createWebPage(String title, String content)
    throws MalformedURLException, IOException, ServiceException {
  WebPageEntry entry = new WebPageEntry();
  entry.setTitle(new PlainTextConstruct(title));

  setContentBlob(entry, content); // Entry's HTML content

  return client.insert(new URL(buildContentFeedUrl()), entry);
}

WebPageEntry createdEntry = createWebPage("New Webpage Title", "<b>HTML content</b>");
System.out.println("Created! View at " + createdEntry.getHtmlLink().getHref());

अनुरोध पूरा होने पर, createdEntry में सर्वर पर बनाई गई एंट्री की कॉपी शामिल होगी.

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

डिफ़ॉल्ट रूप से, पिछले उदाहरण को यूआरएल http://sites.google.com/site/siteName/new-webpage-title के तहत बनाया जाएगा. साथ ही, इसका पेज हेडिंग '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. <atom:title>, अगर pageName मौजूद नहीं है, तो इसे null नहीं होना चाहिए. सामान्य बनाने का मतलब है कि सफ़ेद जगह को ट्रिम करके '-' में बदलना और a-z, A-Z, 0-9, -, _ से मेल न खाने वाले वर्णों को हटाना.

सबपेज बनाना

किसी पैरंट पेज के नीचे सबपेज (चाइल्ड) बनाने के लिए, आपको एंट्री में पैरंट लिंक सेट करना होगा. लिंक के href एट्रिब्यूट को पैरंट नोड के सेल्फ़ लिंक पर सेट करें.

public AnnouncementEntry postAnnouncement(String title, String content, AnnouncementsPageEntry parentPage)
    throws MalformedURLException, IOException, ServiceException {
  AnnouncementEntry entry = new AnnouncementEntry();
  entry.setTitle(new PlainTextConstruct(title));

  setContentBlob(entry, content); // Entry's HTML content

  // Set the entry's parent link to create the announcement under that page.
  entry.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, parentPage.getSelfLink().getHref());

  return client.insert(new URL(buildContentFeedUrl()), entry);
}

ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=announcementspage"), ContentFeed.class);

AnnouncementEntry createdEntry = postAnnouncement("Party!!", "My place, this weekend", contentFeed.getEntries().get(0));
System.out.println("New post by " + createdEntry.getAuthors().get(0).getName());

ऊपर दिए गए उदाहरण में, उपयोगकर्ता के कॉन्टेंट फ़ीड में मौजूद पहले सूचना पेज के नीचे एक नया announcement बनाया गया है. सूचना का टाइटल "पार्टी!!" और कॉन्टेंट "मेरे घर पर, इस हफ़्ते के आखिर में" पर सेट किया गया है.

पेज के टेंप्लेट

पेज टेंप्लेट बनाना

पेज टेंप्लेट बनाने की प्रोसेस, नए आइटम/पेज बनाने और सबपेज बनाने की प्रोसेस जैसी ही होती है. इसमें सिर्फ़ category को जोड़ा जाता है. साथ ही, टर्म और लेबल को क्रमशः 'http://schemas.google.com/g/2005#template' और 'template' पर सेट किया जाता है.

इस उदाहरण में, एक नया webpage टेंप्लेट बनाया गया है.

// The template webpage entry.
WebPageEntry entry = new WebPageEntry();

// Set title and content.
entry.setTitle(new PlainTextConstruct("Page template title"));
XmlBlob xml = new XmlBlob();
xml.setBlob("Content for page template");
entry.setContent(new XhtmlTextConstruct(xml));

// Set the template category
Category TEMPLATE_CATEGORY = new Category(TemplateCategory.Scheme.LABELS,
    TemplateCategory.Term.TEMPLATE, TemplateCategory.Label.TEMPLATE);
entry.getCategories().add(TEMPLATE_CATEGORY);

// Insert the template webpage entry.
WebPageEntry createdEntry = client.insert(new URL("https://sites.google.com/feeds/content/site/siteName"), entry);

टेंप्लेट से पेज बनाना

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

इस उदाहरण में, एक नया filecabinet टेंप्लेट बनाया गया है. इसके बाद, उस टेंप्लेट से एक नया filecabinet पेज बनाया गया है.

URL feedUrl = new URL("https://sites.google.com/feeds/content/site/siteName");

// 1. Create file cabinet page template
FileCabinetPageEntry inputTemplateEntry = new FileCabinetPageEntry();
inputTemplateEntry.setTitle(new PlainTextConstruct("File cabinet page template title"));
XmlBlob xml = new XmlBlob();
xml.setBlob("Content for page template");
inputTemplateEntry.setContent(new XhtmlTextConstruct(xml));

// Set the template category
Category TEMPLATE_CATEGORY = new Category(TemplateCategory.Scheme.LABELS,
    TemplateCategory.Term.TEMPLATE, TemplateCategory.Label.TEMPLATE);
inputTemplateEntry.getCategories().add(TEMPLATE_CATEGORY);

// 2. Create file cabinet page template instance
FileCabinetPageEntry templateEntry = client.insert(feedUrl, inputTemplateEntry);

// Specify link to the page template
FileCabinetPageEntry templateInstanceEntry = new FileCabinetPageEntry();
templateInstanceEntry.setTitle(new PlainTextConstruct("File cabinet template instance"));
templateInstanceEntry.addLink(new Link(SitesLink.Rel.TEMPLATE, Link.Type.ATOM, templateEntry.getSelfLink().getHref()));

FileCabinetPageEntry createdFileCabinetFromTemplate =  client.insert(feedUrl, templateInstanceEntry);

ध्यान दें: टेंप्लेट में <category> तय किए जाने के बावजूद, आपको अपनी एंट्री में इसे शामिल करना होगा. यह भी ध्यान दें कि अगर आपने <content> एलिमेंट शामिल किया है, तो सर्वर उसे अस्वीकार कर देगा.

फ़ाइलें अपलोड की जा रही हैं

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

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

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

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

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

इस उदाहरण में, उपयोगकर्ता के कॉन्टेंट फ़ीड में मौजूद पहले FileCabinetPageEntry में एक PDF फ़ाइल अपलोड की गई है. अटैचमेंट को 'शुरू करें' टाइटल और 'एचआर पैकेट' (ज़रूरी नहीं) जानकारी के साथ बनाया जाता है.

MimetypesFileTypeMap mediaTypes = new MimetypesFileTypeMap();
mediaTypes.addMimeTypes("application/msword doc");
mediaTypes.addMimeTypes("application/vnd.ms-excel xls");
mediaTypes.addMimeTypes("application/pdf pdf");
mediaTypes.addMimeTypes("text/richtext rtx");
// ... See a more complete list of mime types in the SitesHelper.java

public AttachmentEntry uploadAttachment(File file, BasePageEntry<?> parentPage,
    String title, String description) throws IOException, ServiceException {
  AttachmentEntry newAttachment = new AttachmentEntry();
  newAttachment.setMediaSource(new MediaFileSource(file, mediaTypes.getContentType(file)));
  newAttachment.setTitle(new PlainTextConstruct(title));
  newAttachment.setSummary(new PlainTextConstruct(description));
  newAttachment.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, parentPage.getSelfLink().getHref());

  return client.insert(new URL(buildContentFeedUrl()), newAttachment);
}

ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=filecabinet"), ContentFeed.class);
FileCabinetPageEntry parentPage = contentFeed.getEntries(FileCabinetPageEntry.class).get(0);

AttachmentEntry attachment = uploadAttachment(
    new File("/path/to/your/file.pdf"), parentPage, "Getting Started", "HR packet");
System.out.println("Uploaded!");

अपलोड पूरा होने पर, attachment में बनाई गई अटैचमेंट एंट्री की कॉपी शामिल होगी.

किसी फ़ोल्डर में अटैचमेंट अपलोड करना

FileCabinetPageEntry में मौजूद किसी मौजूदा फ़ोल्डर में अटैचमेंट अपलोड करने के लिए, ऐसी कैटगरी शामिल करें जिसमें 'term' एट्रिब्यूट को फ़ोल्डर के नाम पर सेट किया गया हो. उदाहरण के लिए, uploadAttachment() में यह लाइन जोड़ें:

newAttachment.getCategories().add(new Category("http://schemas.google.com/sites/2008#folder", "FolderName"));

वेब अटैचमेंट

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

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

इस उदाहरण में, उपयोगकर्ता के कॉन्टेंट फ़ीड में मौजूद पहले FileCabinetPageEntry के नीचे एक WebAttachmentEntry बनाया गया है. इसके टाइटल को 'GoogleLogo' और जानकारी को 'nice colors' पर सेट किया गया है. जानकारी देना ज़रूरी नहीं है.

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>Updated HTML Content</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 फ़ीड

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

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

भूमिकाएं

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

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

स्कोप

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

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

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 और 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() तरीके को कॉल करें.

इस उदाहरण में, हमने साइट शेयर करना सेक्शन में दिए गए पिछले 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 APIs की रेफ़रंस गाइड देखें.

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

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

aclEntry.delete();

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

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

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

खास विषय

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

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

इस तरह की शर्त के आधार पर डेटा वापस पाने के लिए, 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\"");

जब सर्वर को यह अनुरोध मिलता है, तो वह यह जांच करता है कि आपने जिस आइटम का अनुरोध किया है उसका ईटैग, आपके दिए गए ईटैग के बराबर है या नहीं. अगर ईटैग मेल खाते हैं, तो इसका मतलब है कि आइटम में कोई बदलाव नहीं हुआ है. ऐसे में, सर्वर या तो HTTP 304 NotModifiedException अपवाद दिखाएगा.

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

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

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