अहम जानकारी: यह दस्तावेज़ 2012 से पहले लिखा गया था. इस दस्तावेज़ में बताए गए पुष्टि करने के विकल्पों (OAuth 1.0, AuthSub, और ClientLogin) को 20 अप्रैल, 2012 से आधिकारिक तौर पर बंद कर दिया गया है और अब ये उपलब्ध नहीं हैं. हमारा सुझाव है कि आप जल्द से जल्द OAuth 2.0 पर माइग्रेट करें.
Google Sites Data API की मदद से, क्लाइंट ऐप्लिकेशन किसी Google साइट के कॉन्टेंट को ऐक्सेस, पब्लिश, और उसमें बदलाव कर सकते हैं. आपका क्लाइंट ऐप्लिकेशन भी हाल की गतिविधियों की सूची का अनुरोध कर सकता है, संशोधन इतिहास फ़ेच कर सकता है, और अटैचमेंट डाउनलोड कर सकता है.
Sites Data API की क्षमताओं के बारे में कुछ जानकारी देने के अलावा, इस गाइड में Java क्लाइंट लाइब्रेरी का इस्तेमाल करके, एपीआई के साथ इंटरैक्ट करने के उदाहरण भी दिए गए हैं. क्लाइंट लाइब्रेरी सेट अप करने में मदद पाने के लिए, Google Data Java क्लाइंट लाइब्रेरी का इस्तेमाल शुरू करना लेख पढ़ें. अगर आपको क्लासिक Sites API के साथ इंटरैक्ट करने के लिए, Java क्लाइंट लाइब्रेरी के इस्तेमाल किए गए प्रोटोकॉल के बारे में ज़्यादा जानना है, तो कृपया प्रोटोकॉल गाइड देखें.
ऑडियंस
यह दस्तावेज़ उन डेवलपर के लिए है जो Google Data Java क्लाइंट लाइब्रेरी का इस्तेमाल करके, Google Sites के साथ इंटरैक्ट करने वाले क्लाइंट ऐप्लिकेशन लिखना चाहते हैं.
शुरू करना
'Google साइटें' पुष्टि करने के लिए Google खातों या G Suite खातों का इस्तेमाल करती है. अगर आपके पास पहले से कोई खाता है, तो इसका मतलब है कि आपको खाता सेट अप करना है. इसके अलावा, नया खाता बनाया जा सकता है.
लाइब्रेरी इंस्टॉल करना
क्लाइंट लाइब्रेरी को सेट अप और इंस्टॉल करने में मदद पाने के लिए, Google Data Java क्लाइंट लाइब्रेरी का इस्तेमाल शुरू करना लेख पढ़ें. अगर Eclipse का इस्तेमाल किया जा रहा है, तो इस लेख में यह भी बताया गया है कि Google Data API Eclipse प्लगिन का इस्तेमाल करके, अपना प्रोजेक्ट कैसे सेटअप किया जा सकता है. शुरू करने के लिए, आपको ये चीज़ें चाहिए:
- Java 1.5 या इसके बाद का वर्शन इंस्टॉल करें
- क्लाइंट लाइब्रेरी डाउनलोड करें (
gdata-src.java.zip
का नया वर्शन) - डिपेंडेंसी की सूची डाउनलोड करना
- सैंपल ऐप्लिकेशन (
gdata-samples.java.zip
का नया वर्शन) डाउनलोड करें
.jars इंस्टॉल करने के बाद, आपको अपने प्रोजेक्ट में ये चीज़ें शामिल करनी होंगी:
java/lib/gdata-sites-2.0.jar
- यहां वर्शन 2.0 का मतलब, क्लासिक Sites API के वर्शन 1.4 से है.java/lib/gdata-core-1.0.jar
java/lib/gdata-client-1.0.jar
java/lib/gdata-spreadsheet-3.0.jar
(अगर सूची वाले पेजों या आइटम की सूची के साथ काम किया जा रहा है)
साथ ही, डिपेंडेंसी जार (gdata-media-1.0.jar
, mail.jar
, और google-collect....jar
) ज़रूर शामिल करें.
सैंपल ऐप्लिकेशन चलाना
पूरी तरह से काम करने वाला सैंपल ऐप्लिकेशन, gdata-samples.java.zip
डाउनलोड की /java/sample/sites
सबडायरेक्ट्री में मौजूद है.
यह सोर्स, SVN डेटा स्टोर करने की जगह में मौजूद /trunk/java/sample/sites/
पर भी उपलब्ध है. इसे सोर्स टैब से ऐक्सेस किया जा सकता है. SitesDemo.java
की मदद से, उपयोगकर्ता कई कार्रवाइयां कर सकता है. इन कार्रवाइयों से, क्लासिक Sites API का इस्तेमाल करने का तरीका पता चलता है.
ध्यान दें, सैंपल चलाने के लिए, आपको java/sample/util/lib/sample-util.jar
शामिल करना होगा.
अपना प्रोजेक्ट शुरू करना
सलाह: हमारे Eclipse प्लग इन की मदद से तुरंत सेटअप करने के लिए, Google Data API के साथ Eclipse का इस्तेमाल करना लेख पढ़ें.
अपने ऐप्लिकेशन की ज़रूरतों के मुताबिक, आपको कई डेटा इंपोर्ट करने की ज़रूरत होगी. हमारा सुझाव है कि आप इन इंपोर्ट से शुरुआत करें:
import com.google.gdata.client.*; import com.google.gdata.client.sites.*; import com.google.gdata.data.*; import com.google.gdata.data.acl.*; import com.google.gdata.data.media.*; import com.google.gdata.data.sites.*; import com.google.gdata.data.spreadsheet.*; // If working with listpages / listitems import com.google.gdata.util.*;
इसके बाद, आपको एक SitesService
ऑब्जेक्ट भी सेट अप करना होगा. यह क्लासिक Sites API के क्लाइंट कनेक्शन को दिखाता है:
SitesService client = new SitesService("yourCo-yourAppName-v1");
applicationName
आर्ग्युमेंट इस फ़ॉर्मैट में होना चाहिए: company-applicationname-version
. इस पैरामीटर का इस्तेमाल लॉग करने के लिए किया जाता है.
ध्यान दें: इस गाइड के बाकी हिस्से में यह माना गया है कि आपने वैरिएबल client
में SitesService
बनाया है.
क्लासिक Sites API में पुष्टि की जा रही है
Java क्लाइंट लाइब्रेरी का इस्तेमाल, सार्वजनिक या निजी फ़ीड के साथ काम करने के लिए किया जा सकता है. Sites का डेटा एपीआई, साइट की अनुमतियों और की जा रही कार्रवाई के आधार पर निजी और सार्वजनिक फ़ीड का ऐक्सेस देता है. उदाहरण के लिए, हो सकता है कि आप किसी सार्वजनिक साइट के कॉन्टेंट फ़ीड को पढ़ सकें, लेकिन उसमें अपडेट न कर सकें. ऐसा करने के लिए, पुष्टि किए गए क्लाइंट की ज़रूरत होती है. ऐसा ClientLogin उपयोगकर्ता नाम/पासवर्ड ऑथेंटिकेशन, AuthSub या OAuth की मदद से किया जा सकता है.
AuthSub, OAuth, और ClientLogin पर ज़्यादा जानकारी के लिए, कृपया Google Data API की पुष्टि से जुड़ी खास जानकारी देखें.
सलाह: एपीआई, एसएसएल (एचटीटीपीएस) के साथ काम करता है. अगर AuthSub/OAuth का इस्तेमाल किया जा रहा है, तो एसएसएल के ज़रिए फ़ीड का अनुरोध करने के लिए, https://sites.google.com/feeds/
का दायरा तय करना न भूलें. यह भी ध्यान दें कि G Suite डोमेन के लिए, एपीआई, एडमिन कंट्रोल पैनल में 'एसएसएल की ज़रूरत है' सेटिंग का पालन करता है. client.useSsl();
को कॉल करके, सभी एपीआई अनुरोधों को एचटीटीपीएस पर भेजने के लिए मजबूर किया जा सकता है.
वेब ऐप्लिकेशन के लिए AuthSub
वेब ऐप्लिकेशन के लिए AuthSub पुष्टि का इस्तेमाल, उन क्लाइंट ऐप्लिकेशन को करना चाहिए जिन्हें अपने उपयोगकर्ताओं की पुष्टि Google खातों के लिए करनी है. ऑपरेटर को 'Google साइटें' के उपयोगकर्ता के उपयोगकर्ता नाम और पासवर्ड के ऐक्सेस की ज़रूरत नहीं है - सिर्फ़ 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 का इस्तेमाल करना लेख पढ़ें.
इंस्टॉल किए गए/मोबाइल ऐप्लिकेशन के लिए 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 साइटों की सूची बनाने के लिए किया जा सकता है जिनका मालिकाना हक किसी उपयोगकर्ता के पास है या जिनके पास देखने की अनुमतियां हैं. इसका इस्तेमाल, किसी मौजूदा साइट के नाम में बदलाव करने के लिए भी किया जा सकता है. G Suite डोमेन के लिए, इसका इस्तेमाल पूरी साइट बनाने और/या कॉपी करने के लिए भी किया जा सकता है.
लिस्टिंग साइटें
साइट फ़ीड से जुड़ी क्वेरी करने के लिए, साइट फ़ीड के यूआरएल पर एचटीटीपी GET
भेजें:
https://sites.google.com/feeds/site/site/
Java क्लाइंट में, साइट फ़ीड के साथ काम करने के लिए SiteFeed
और SiteEntry
क्लास का इस्तेमाल किया जा सकता है:
public String getSiteFeedUrl() { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) return "https://sites.google.com/feeds/site/" + domain + "/"; } public void getSiteFeed() throws IOException, ServiceException { SiteFeed siteFeed = client.getFeed(new URL(getSiteFeedUrl()), SiteFeed.class); for (SiteEntry entry : siteFeed.getEntries()){ System.out.println("title: " + entry.getTitle().getPlainText()); System.out.println("site name: " + entry.getSiteName().getValue()); System.out.println("theme: " + entry.getTheme().getValue()); System.out.println(""); } }
ऊपर दिया गया स्निपेट, साइट का टाइटल, साइट का नाम, और साइट की थीम को प्रिंट करता है. फ़ीड में अन्य प्रॉपर्टी ऐक्सेस करने के लिए, अन्य गैटर उपलब्ध हैं.
नई साइटें बनाना
ध्यान दें: यह सुविधा सिर्फ़ G Suite डोमेन के लिए उपलब्ध है.
नई साइटों को प्रोविज़न करने के लिए, नया SiteEntry
बनाएं और साइट फ़ीड पर क्लाइंट के insert()
तरीके को कॉल करें.
इस उदाहरण में, 'स्लेट' थीम (ज़रूरी नहीं) वाली एक नई साइट बनाई गई है. साथ ही, साइट का नाम (ज़रूरी) और जानकारी (ज़रूरी नहीं) दी गई है:
public String getSiteFeedUrl() { String domain = "example.com"; return "https://sites.google.com/feeds/site/" + domain + "/"; } public SiteEntry createSite(String title, String summary, String theme, String tag) throws MalformedURLException, IOException, ServiceException { SiteEntry entry = new SiteEntry(); entry.setTitle(new PlainTextConstruct(title)); entry.setSummary(new PlainTextConstruct(summary)); Theme tt = new Theme(); tt.setValue(theme); entry.setTheme(tt); entry.getCategories().add(new Category(TagCategory.Scheme.TAG, tag, null)); return client.insert(new URL(getSiteFeedUrl()), entry); } SiteEntry newSiteEntry = createSite("My Site Title", "summary for site", "slate", "tag");
ऊपर दिए गए अनुरोध से, G Suite डोमेन example.com
के तहत एक नई साइट बन जाएगी.
इसलिए, साइट का यूआरएल https://sites.google.com/a/example.com/my-site-title होगा.
साइट बन जाने के बाद, सर्वर SiteEntry
ऑब्जेक्ट के साथ रिस्पॉन्स देगा. इसमें सर्वर के जोड़े गए एलिमेंट शामिल होंगे: साइट का लिंक, साइट के acl फ़ीड का लिंक, साइट का नाम, टाइटल, खास जानकारी वगैरह.
साइट कॉपी करना
ध्यान दें: यह सुविधा सिर्फ़ G Suite डोमेन के लिए उपलब्ध है.
साइट कॉपी करना, नई साइट बनाने जैसा ही है. अंतर यह है कि आपको अपने नए SiteEntry
पर एक लिंक सेट करना होगा, जिसमें डुप्लीकेट की जाने वाली साइट का सेल्फ़ लिंक शामिल हो.
नई साइटें बनाना सेक्शन में बनाई गई साइट की डुप्लीकेट कॉपी बनाने का उदाहरण यहां दिया गया है:
public SiteEntry copySite(String title, String summary, String sourceHref) throws MalformedURLException, IOException, ServiceException { SiteEntry entry = new SiteEntry(); entry.setTitle(new PlainTextConstruct(title)); entry.setSummary(new PlainTextConstruct(summary)); entry.addLink(SitesLink.Rel.SOURCE, Link.Type.ATOM, sourceHref); return client.insert(new URL(getSiteFeedUrl()), entry); } String sourceHref = newSiteEntry.getLink(SitesLink.Rel.SOURCE, Link.Type.ATOM).getHref(); SiteEntry myTwin = copySite("Duplicate Site", "A copy", sourceHref);
अहम बातें:
- सिर्फ़ उन साइटों और साइट टेंप्लेट को कॉपी किया जा सकता है जिनका मालिकाना हक पुष्टि किए गए उपयोगकर्ता के पास है.
- साइट टेंप्लेट को भी कॉपी किया जा सकता है. अगर 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
s को साइट एंट्री (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 या ClientLogin टोकन का इस्तेमाल करके पुष्टि करनी होगी. Sites की सेवा के लिए पुष्टि करना देखें.
बदलाव वाला फ़ीड
किसी भी कॉन्टेंट एंट्री के बदलाव का इतिहास फ़ेच करने के लिए, एंट्री के बदलाव के लिंक पर एचटीटीपी GET
भेजें:
https://sites.google.com/feeds/revision/site/siteName/CONTENT_ENTRY_ID
इस उदाहरण में, कॉन्टेंट फ़ीड से क्वेरी की जाती है. इसके बाद, पहली कॉन्टेंट एंट्री के लिए बदलाव वाला फ़ीड फ़ेच किया जाता है:
ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl()), ContentFeed.class); URL revisionFeedUrl = new URL(contentFeed.getEntries().get(0).getRevisionLink().getHref()); // use first entry public void getRevisionFeed(String revisionFeedUrl) throws IOException, ServiceException { RevisionFeed revisionFeed = client.getFeed(revisionFeedUrl, RevisionFeed.class); for (BaseContentEntry<?> entry : revisionFeed.getEntries()){ System.out.println(entry.getTitle().getPlainText()); System.out.println(" updated: " + entry.getUpdated().toUiString() + " by " + entry.getAuthors().get(0).getEmail()); System.out.println(" revision #: " + entry.getRevision().getValue()); } }
ध्यान दें: इस फ़ीड को ऐक्सेस करने के लिए, यह ज़रूरी है कि आप साइट के सहयोगी या मालिक हों. आपके क्लाइंट को AuthSub, OAuth या ClientLogin टोकन का इस्तेमाल करके पुष्टि करनी होगी. Sites की सेवा के लिए पुष्टि करना देखें.
कॉन्टेंट फ़ीड
कॉन्टेंट फ़ीड को फिर से वापस पाना
कॉन्टेंट फ़ीड में, साइट का नया कॉन्टेंट दिखता है. इसे कॉन्टेंट फ़ीड के यूआरएल पर एचटीटीपी GET
भेजकर ऐक्सेस किया जा सकता है:
https://sites.google.com/feeds/content/site/siteName
फ़ीड पैरामीटर | ब्यौरा |
---|---|
site | "site " या G Suite से होस्ट किए जा रहे आपके डोमेन का डोमेन नेम (उदाहरण के लिए, example.com ). |
siteName | आपकी साइट का वेबस्पेस नाम. यह साइट के यूआरएल (जैसे, mySite ) में दिखता है. |
कॉन्टेंट फ़ीड को फ़ेच करने का उदाहरण:
public String buildContentFeedUrl() { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) String siteName = "mySite"; return "https://sites.google.com/feeds/content/" + domain + "/" + siteName + "/"; } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl()), ContentFeed.class);
इससे मिलने वाला contentFeed
, एक ContentFeed
ऑब्जेक्ट होता है, जिसमें सर्वर से मिला रिस्पॉन्स होता है. contentFeed
की हर एंट्री, उपयोगकर्ता की साइट में किसी अलग पेज या आइटम को दिखाती है. ContentFeed
में अलग-अलग तरह के ऑब्जेक्ट होंगे. ये सभी ऑब्जेक्ट, BaseContentEntry
से इनहेरिट किए गए हैं: ListItemEntry
, ListPageEntry
, AttachmentEntry
, WebAttachmentEntry
,
FileCabinetPageEntry
, AnnouncementsPageEntry
, AnnouncementEntry
, WebPageEntry
, CommentEntry
.
यहां एक ContentFeed
में अलग-अलग तरह की एंट्री की सूची दी गई है.
हर तरह की एंट्री में अलग-अलग प्रॉपर्टी होती हैं, लेकिन सभी को यहां नहीं दिखाया जाता.
public String getContentBlob(BaseContentEntry<?> entry) { return ((XhtmlTextConstruct) entry.getTextContent().getContent()).getXhtml().getBlob(); } // Extracts an entry's numeric ID. private String getEntryId(String selfLink) { return selfLink.substring(selfLink.lastIndexOf("/") + 1); } public void printContentEntries(ContentFeed contentFeed) { System.out.println("Listing all WebPageEntry:"); for (WebPageEntry entry : contentFeed.getEntries(WebPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } System.out.println(" author: " + entry.getAuthors().get(0).getEmail()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all ListPageEntry:"); for (ListPageEntry entry : contentFeed.getEntries(ListPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); for (Column col : entry.getData().getColumns()) { System.out.print(" [" + col.getIndex() + "] " + col.getName() + "\t"); } } for (ListItemEntry entry : contentFeed.getEntries(ListItemEntry.class)) { for (Field field : entry.getFields()) { System.out.print(" [" + field.getIndex() + "] " + field.getValue() + "\t"); } System.out.println("\n"); } System.out.println("Listing all FileCabinetPageEntry:"); for (FileCabinetPageEntry entry : contentFeed.getEntries(FileCabinetPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all CommentEntry:"); for (CommentEntry entry : contentFeed.getEntries(CommentEntry.class)) { System.out.println(" in-reply-to: " + entry.getInReplyTo().toString()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AnnouncementsPageEntry:"); for (AnnouncementsPageEntry entry : contentFeed.getEntries(AnnouncementsPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AnnouncementEntry:"); for (AnnouncementEntry entry : contentFeed.getEntries(AnnouncementEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } System.out.println(" draft?: " + entry.isDraft()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AttachmentEntry:"); for (AttachmentEntry entry : contentFeed.getEntries(AttachmentEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } if (entry.getSummary() != null) { System.out.println(" description: " + entry.getSummary().getPlainText()); } System.out.println(" revision: " + entry.getRevision().getValue()); MediaContent content = (MediaContent) entry.getContent(); System.out.println(" src: " + content.getUri()); System.out.println(" content type: " + content.getMimeType().getMediaType()); } System.out.println("Listing all WebAttachmentEntry:"); for (WebAttachmentEntry entry : contentFeed.getEntries(WebAttachmentEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } if (entry.getSummary() != null) { System.out.println(" description: " + entry.getSummary().getPlainText()); } System.out.println(" src: " + ((MediaContent) entry.getContent()).getUri()); } }
ध्यान दें: साइट की शेयर करने की अनुमतियों के आधार पर, हो सकता है कि इस फ़ीड के लिए पुष्टि करने की ज़रूरत पड़े या न पड़े. अगर साइट गैर-सार्वजनिक है, तो आपके क्लाइंट को AuthSub, OAuth या ClientLogin टोकन का इस्तेमाल करके प्रमाणित करना होगा. Sites की सेवा की पुष्टि करना देखें.
कॉन्टेंट फ़ीड से जुड़ी क्वेरी के उदाहरण
Google Data API के स्टैंडर्ड क्वेरी पैरामीटर और Sites API के क्लासिक वर्शन के लिए खास तौर पर बनाए गए पैरामीटर का इस्तेमाल करके, कॉन्टेंट फ़ीड को खोजा जा सकता है. ज़्यादा जानकारी और इस्तेमाल किए जा सकने वाले पैरामीटर की पूरी सूची के लिए, रेफ़रंस गाइड देखें.
ध्यान दें: इस सेक्शन में दिए गए उदाहरणों के लिए, कॉन्टेंट फ़ीड को फिर से पाने में buildContentFeedUrl()
तरीके का इस्तेमाल किया गया है.
खास एंट्री टाइप को फिर से पाना
किसी खास तरह की एंट्री को फ़ेच करने के लिए, kind
पैरामीटर का इस्तेमाल करें. यह उदाहरण सिर्फ़ attachment
एंट्री दिखाता है:
ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl())); query.setKind("webpage"); ContentFeed contentFeed = client.getFeed(query, ContentFeed.class); for (AttachmentEntry entry : contentFeed.getEntries(AttachmentEntry.class)) { System.out.println(entry.getTitle().getPlainText()); }
एक से ज़्यादा एंट्री टाइप दिखाने के लिए, हर kind
को ',' से अलग करें. इस उदाहरण में, filecabinet
और
listpage
एंट्री दिखती हैं:
URL url = new URL(buildContentFeedUrl() + "?kind=filecabinet,listpage"); ContentFeed contentFeed = client.getFeed(url, ContentFeed.class); for (FileCabinetPageEntry entry : contentFeed.getEntries(FileCabinetPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); } for (ListPageEntry entry : contentFeed.getEntries(ListPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); }
पाथ के हिसाब से पेज को वापस लाना
अगर आपको Google साइट में किसी पेज का रिलेटिव पाथ पता है, तो उस खास पेज को फ़ेच करने के लिए, path
पैरामीटर का इस्तेमाल किया जा सकता है.
इस उदाहरण में, http://sites.google.com/site/siteName/path/to/the/page
पर मौजूद पेज दिखेगा:
ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl())); query.setPath("/path/to/the/page"); ContentFeed contentFeed = client.getFeed(query, ContentFeed.class); for (BaseContentEntry<?> entry : contentFeed.getEntries()) { System.out.println(" title: " + entry.getTitle().getPlainText()); }
किसी पेरंट पेज के तहत मौजूद सभी एंट्री को वापस पाना
अगर आपको किसी पेज का कॉन्टेंट एंट्री आईडी (जैसे, नीचे दिए गए उदाहरण में "1234567890") पता है, तो उसकी सभी चाइल्ड एंट्री (अगर कोई है) फ़ेच करने के लिए, parent
पैरामीटर का इस्तेमाल किया जा सकता है:
ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl())); query.setParent("1234567890"); ContentFeed contentFeed = client.getFeed(query, ContentFeed.class);
अन्य पैरामीटर के लिए, रेफ़रंस गाइड देखें.
कॉन्टेंट बनाना
ध्यान दें: किसी साइट के लिए कॉन्टेंट बनाने से पहले, पक्का करें कि आपने क्लाइंट में अपनी साइट सेट कर ली हो.client.site = "siteName";
कॉन्टेंट फ़ीड पर एचटीटीपी POST
भेजकर, नया कॉन्टेंट (वेबपेज, लिस्टपेज, फ़ाइल कैबिनेट पेज, सूचना वाले पेज वगैरह) बनाया जा सकता है:
https://sites.google.com/feeds/content/site/siteName
सहायता नोड के टाइप की सूची देखने के लिए, रेफ़रंस गाइड में kind
पैरामीटर देखें.
नए आइटम / पेज बनाना
इस उदाहरण में, साइट के टॉप-लेवल के नीचे एक नया webpage
बनाया गया है. इसमें पेज के मुख्य हिस्से के लिए कुछ एक्सएमएलटी शामिल है और हेडिंग का टाइटल 'नया वेबपेज टाइटल' पर सेट किया गया है:
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());
सर्वर, पेज के यूआरएल पाथ को नाम देने के लिए, प्राथमिकता के इन नियमों का इस्तेमाल करता है:
<sites:pageName>
, अगर मौजूद है.a-z, A-Z, 0-9, -, _
के सभी नियमों का पालन करना ज़रूरी है.<atom:title>
, अगर pageName मौजूद नहीं है, तो इसकी वैल्यू शून्य नहीं होनी चाहिए. सामान्य बनाने का मतलब है, स्पेशल वर्ण हटाना और स्पेशल वर्ण के बीच के खाली स्थान को '-' में बदलना. साथ ही,a-z, A-Z, 0-9, -, _
से मेल न खाने वाले वर्ण हटाना.
सबपेज बनाए जा रहे हैं
किसी पेज के नीचे सबपेज (चाइल्ड पेज) बनाने के लिए, आपको एंट्री में पैरंट पेज का लिंक सेट करना होगा. पैरंट नोड के सेल्फ़ लिंक का लिंक href
एट्रिब्यूट.
public AnnouncementEntry postAnnouncement(String title, String content, AnnouncementsPageEntry parentPage) throws MalformedURLException, IOException, ServiceException { AnnouncementEntry entry = new AnnouncementEntry(); entry.setTitle(new PlainTextConstruct(title)); setContentBlob(entry, content); // Entry's HTML content // Set the entry's parent link to create the announcement under that page. entry.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, parentPage.getSelfLink().getHref()); return client.insert(new URL(buildContentFeedUrl()), entry); } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=announcementspage"), ContentFeed.class); AnnouncementEntry createdEntry = postAnnouncement("Party!!", "My place, this weekend", contentFeed.getEntries().get(0)); System.out.println("New post by " + createdEntry.getAuthors().get(0).getName());
ऊपर दिए गए उदाहरण में, उपयोगकर्ता के कॉन्टेंट फ़ीड में मौजूद, सूचनाओं के पहले पेज के नीचे एक नया announcement
बनाया गया है. सूचना का टाइटल "पार्टी!!" और कॉन्टेंट "इस वीकेंड, मेरे घर पर" पर सेट है.
पेज टेंप्लेट
पेज टेंप्लेट बनाना
पेज टेंप्लेट बनाने की प्रोसेस, नए आइटम/पेज बनाने और सबपेज बनाने की प्रोसेस जैसी ही है. अंतर यह है कि इसमें category
को टर्म और लेबल के साथ जोड़ा जाता है, जो क्रमशः 'http://schemas.google.com/g/2005#template' और 'टेंप्लेट' पर सेट होता है.
इस उदाहरण में, नया 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>
की जानकारी देने के बावजूद, अपनी एंट्री में एक <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
में मौजूद किसी फ़ोल्डर में अटैचमेंट अपलोड करने के लिए, उस फ़ोल्डर के नाम पर सेट किए गए 'टर्म' एट्रिब्यूट के साथ कैटगरी शामिल करें.
उदाहरण के लिए, 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
के मेटाडेटा (टाइटल, pageName वगैरह) और पेज के कॉन्टेंट में बदलाव करने के लिए, एंट्री के update()
तरीके का इस्तेमाल किया जा सकता है. इससे, एंट्री के edit
लिंक पर एचटीटीपी PUT
अनुरोध भेजा जाएगा.
यहां ListPageEntry
को इन बदलावों के साथ अपडेट करने का उदाहरण दिया गया है:
- टाइटल को बदलकर 'अपडेट किया गया टाइटल' कर दिया गया है
- पेज के एचटीएमएल कॉन्टेंट को '<p>अपडेट किया गया एचटीएमएल कॉन्टेंट</p>' में अपडेट कर दिया गया है
- सूची के पहले कॉलम का शीर्षक बदलकर "मालिक" कर दिया गया है
ContentFeed contentFeed = client.getFeed( new URL(buildContentFeedUrl() + "?kind=listpage"), ContentFeed.class); ListPageEntry listPage = contentFeed.getEntries(ListPageEntry.class).get(0); // Update first list page found // Update title listPage.setTitle(new PlainTextConstruct("Updated Title")); // Update HTML content XmlBlob xml = new XmlBlob(); xml.setBlob("<p>Updated HTML Content</p>"); listPage.setContent(new XhtmlTextConstruct(xml)); // Change first column's heading listPage.getData().getColumns().get(0).setName("Owner"); // listPage.setPageName(new PageName("new-page-path")); // You can also change the page's URL path ListPageEntry updatedEntry = listPage.update(); System.out.println("ListPage updated!");
अटैचमेंट की फ़ाइल का कॉन्टेंट अपडेट करना
AttachmentEntry
के लिए, एंट्री की MediaSource
सेट करके और फिर
एंट्री के updateMedia(boolean)
तरीके का इस्तेमाल करके भी कॉन्टेंट को अपडेट किया जा सकता है.
यह उदाहरण मौजूदा अटैचमेंट के कॉन्टेंट को अपडेट कर देगा:
public AttachmentEntry updateFile(AttachmentEntry entry, File newFile) throws IOException, ServiceException { // See Uploading Attachments for the definition of mediaTypes. entry.setMediaSource(new MediaFileSource(newFile, mediaTypes.getContentType(newFile))); return entry.updateMedia(false); }
उदाहरण में, एंट्री के edit-media
लिंक पर एचटीटीपी PUT
अनुरोध भेजा गया है. लौटाए गए AttachmentEntry
में अपडेट किया गया कॉन्टेंट शामिल होगा.
अटैचमेंट का मेटाडेटा और कॉन्टेंट अपडेट करना
updateMedia()
तरीके का इस्तेमाल करके, एक ही कॉल में अटैचमेंट का मेटाडेटा और उसका कॉन्टेंट अपडेट किया जा सकता है.
अगर आप सिर्फ़ फ़ाइल के कॉन्टेंट, मेटाडेटा या दोनों को अपडेट कर सकते हैं.
इस उदाहरण में, अटैचमेंट का टाइटल 'नया टाइटल' में बदला गया है. साथ ही, इसके ब्यौरे को अपडेट किया गया है और फ़ाइल के कॉन्टेंट को नई .zip फ़ाइल से बदला गया है.
अनुरोध में नई फ़ाइल का कॉन्टेंट शामिल है, इसलिए AttachmentEntry
के updateMedia()
का इस्तेमाल किया जाता है.
public AttachmentEntry updateAttachment(AttachmentEntry entry, File newFile, String newTitle, String newDescription) throws IOException, ServiceException { // See Uploading Attachments for the definition of mediaTypes. entry.setMediaSource(new MediaFileSource(newFile, mediaTypes.getContentType(newFile))); entry.setTitle(new PlainTextConstruct(newTitle)); entry.setSummary(new PlainTextConstruct(newDescription)); return entry.updateMedia(true); } ContentFeed contentFeed = client.getFeed( new URL(buildContentFeedUrl() + "?kind=attachment&max-results=1"), ContentFeed.class); AttachmentEntry attachment = contentFeed.getEntries(AttachmentEntry.class).get(0); // Update first attachment found AttachmentEntry updatedAttachment = updateAttachment(attachment, new File("/path/to/file.zip"), "New Title", "better stuff");
कॉन्टेंट मिटाया जा रहा है
Google साइट से कोई पेज या आइटम हटाने के लिए, सबसे पहले कॉन्टेंट की एंट्री फिर से पाएं. इसके बाद, एंट्री के delete()
पर कॉल करें.
entry.delete();
एंट्री के edit
लिंक और ETag वैल्यू को पास करके भी सर्विस क्लास के delete()
तरीके का इस्तेमाल किया जा सकता है:
client.delete(entry.getEditLink().getHref(), "*"); // Note: using "*" may overwrite another client's changes.
अगर एंट्री मिट जाती है, तो सर्वर एचटीटीपी 200 OK
के साथ जवाब देता है.
अटैचमेंट डाउनलोड करना
AttachmentEntry
को डाउनलोड करने के लिए, एंट्री के कॉन्टेंट सोर्स लिंक पर एक एचटीटीपी GET
अनुरोध भेजें.
इस उदाहरण में, उपयोगकर्ता के कॉन्टेंट फ़ीड में मिला पहला AttachmentEntry
, "/path/to/save/file/" डायरेक्ट्री में डाउनलोड किया जाता है:
private void downloadFile(String downloadUrl, String fullFilePath) throws IOException, ServiceException { System.out.println("Downloading file from: " + downloadUrl); MediaContent mc = new MediaContent(); mc.setUri(downloadUrl); MediaSource ms = service.getMedia(mc); InputStream inStream = null; FileOutputStream outStream = null; try { inStream = ms.getInputStream(); outStream = new FileOutputStream(fullFilePath); int c; while ((c = inStream.read()) != -1) { outStream.write(c); } } finally { if (inStream != null) { inStream.close(); } if (outStream != null) { outStream.flush(); outStream.close(); } } } public void downloadAttachment(AttachmentEntry entry, String directory) throws IOException, ServiceException { String url = ((OutOfLineContent) entry.getContent()).getUri(); downloadFile(url, directory + entry.getTitle().getPlainText()); // Use entry's title for the save filename } ContentFeed contentFeed = client.getFeed( new URL(buildContentFeedUrl() + "?kind=attachment&max-results=1"), ContentFeed.class); downloadAttachment(contentFeed.getEntries(AttachmentEntry.class).get(0), "/path/to/save/file/"); System.out.println("Downloaded.");
ACL फ़ीड
शेयर करने की अनुमतियों (एसीएल) के बारे में खास जानकारी
ACL फ़ीड की हर ACL एंट्री किसी खास इकाई की ऐक्सेस भूमिका दिखाती है. इसमें उपयोगकर्ता, उपयोगकर्ताओं का ग्रुप, डोमेन या डिफ़ॉल्ट ऐक्सेस (जो एक सार्वजनिक साइट है) शामिल है. एंट्री सिर्फ़ उन इकाइयों के लिए दिखाई जाएंगी जिनके पास साफ़ तौर पर ऐक्सेस है. हर ई-मेल पते के लिए, Google Sites के यूज़र इंटरफ़ेस (यूआई) की शेयरिंग स्क्रीन में "ऐक्सेस वाले लोग" पैनल में एक एंट्री दिखेगी. इसलिए, डोमेन एडमिन नहीं दिखाए जाएंगे, भले ही उनके पास किसी साइट का इंप्लिसिट ऐक्सेस हो.
भूमिकाएं
भूमिका एलिमेंट, किसी इकाई के ऐक्सेस लेवल को दिखाता है. gAcl:role
एलिमेंट की चार वैल्यू हो सकती हैं:
- रीडर — दर्शक (रीड-ओनली ऐक्सेस के बराबर).
- लेखक — एक सहयोगी (पढ़ने/लिखने का ऐक्सेस) के बराबर है.
- मालिक — आम तौर पर, साइट का एडमिन (पढ़ने/लिखने के ऐक्सेस के बराबर).
स्कोप
स्कोप एलिमेंट, उस इकाई के बारे में बताता है जिसके पास यह ऐक्सेस लेवल है. gAcl:scope
एलिमेंट चार तरह के हो सकते हैं:
- user — ईमेल पते की वैल्यू, जैसे कि "user@gmail.com".
- group — Google ग्रुप का ईमेल पता, जैसे कि "group@domain.com".
- domain — G Suite डोमेन नेम, जैसे कि "domain.com".
- डिफ़ॉल्ट — "डिफ़ॉल्ट" टाइप का सिर्फ़ एक स्कोप हो सकता है, जिसकी कोई वैल्यू नहीं होती (उदाहरण के लिए,
<gAcl:scope type="default">
). यह स्कोप, किसी सार्वजनिक साइट पर डिफ़ॉल्ट रूप से किसी भी उपयोगकर्ता के पास मौजूद ऐक्सेस को कंट्रोल करता है.
ध्यान दें: डोमेन के लिए gAcl:role
वैल्यू, "मालिक" ऐक्सेस पर सेट नहीं की जा सकती. डोमेन के लिए सिर्फ़ रीडर या लेखक ऐक्सेस सेट किया जा सकता है.
ACL फ़ीड फिर से प्राप्त की जा रही है
AclFeed
और AclEntry
क्लास का इस्तेमाल, किसी साइट की शेयर करने की अनुमतियों को कंट्रोल करने के लिए किया जा सकता है. साथ ही, इन्हें सेवा क्लास के getFeed()
तरीके का इस्तेमाल करके फ़ेच किया जा सकता है.
इस उदाहरण में, किसी साइट के लिए एसीएल फ़ीड फ़ेच किया गया है और हर AclEntry
की अनुमतियां प्रिंट की गई हैं:
public String getAclFeedUrl(String siteName) { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) return "https://sites.google.com/feeds/acl/site/" + domain + "/" + siteName + "/"; } public void getAclFeed(String siteName) throws IOException, ServiceException { AclFeed aclFeed = client.getFeed(new URL(getAclFeedUrl(siteName)), AclFeed.class); for (AclEntry entry : aclFeed.getEntries()) { System.out.println(entry.getScope().getValue() + " (" + entry.getScope().getType() + ") : " + entry.getRole().getValue()); } } getAclFeed('my-site-name');
अगर SiteFeed में एंट्री इस्तेमाल की जा रही हैं, तो हर SiteEntry
में अपने ACL फ़ीड का लिंक होता है.
उदाहरण के लिए, यह स्निपेट किसी SiteEntry
के acl फ़ीड को फ़ेच करता है:
String aclLink = siteEntry.getLink(SitesAclFeedLink.Rel.ACCESS_CONTROL_LIST, Link.Type.ATOM).getHref(); AclFeed aclFeed = client.getFeed(new URL(aclLink), AclFeed.class);
साइट शेयर करना
ध्यान दें: शेयर करने के लिए कुछ एसीएल सिर्फ़ तब लागू हो सकते हैं, जब डोमेन को ऐसी अनुमतियों की अनुमति देने के लिए कॉन्फ़िगर किया गया हो. उदाहरण के लिए, अगर G Suite डोमेन के लिए, डोमेन से बाहर शेयर करने की सुविधा चालू है वगैरह.
एपीआई का इस्तेमाल करके Google साइट शेयर करने के लिए, आपके क्लाइंट को एक नया AclEntry
बनाना होगा और उसे सर्वर पर POST
करना होगा.
यहां एक उदाहरण दिया गया है, जिसमें 'user@example.com' को साइट पर reader
के तौर पर जोड़ा गया है:
AclRole role = new AclRole("reader"); AclScope scope = new AclScope(AclScope.Type.USER, "user@example.com"); AclEntry aclEntry = addAclRole(role, scope, entry); public AclEntry addAclRole(AclRole role, AclScope scope, SiteEntry siteEntry) throws IOException, MalformedURLException, ServiceException { AclEntry aclEntry = new AclEntry(); aclEntry.setRole(role); aclEntry.setScope(scope); Link aclLink = siteEntry.getLink(SitesAclFeedLink.Rel.ACCESS_CONTROL_LIST, Link.Type.ATOM); return client.insert(new URL(aclLink.getHref()), aclEntry); }
संभावित AclScope
और AclRoles
वैल्यू के लिए, ACL फ़ीड की खास जानकारी सेक्शन देखें.
ग्रुप और डोमेन लेवल पर शेयर करना
किसी एक उपयोगकर्ता के साथ साइट शेयर करने की तरह ही, किसी Google ग्रुप या G Suite डोमेन के साथ भी साइट शेयर की जा सकती है.
किसी ग्रुप के ईमेल पते पर शेयर करने के लिए:
AclScope scope = new AclScope(AclScope.Type.GROUP, "group_name@example.com");
पूरे डोमेन के साथ शेयर करने के लिए:
AclScope scope = new AclScope(AclScope.Type.DOMAIN, "example.com");
डोमेन स्तर पर शेयर करना सिर्फ़ G Suite डोमेन के लिए काम करता है और सिर्फ़ उस डोमेन के लिए काम करता है जिस पर साइट होस्ट की गई है. उदाहरण के लिए, http://sites.google.com/a/domain1.com/siteA, पूरी साइट को सिर्फ़ domain1.com के साथ शेयर कर सकता है, domain2.com के साथ नहीं. G Suite डोमेन पर होस्ट नहीं की गई साइटें (जैसे, http://sites.google.com/site/siteB), डोमेन को न्योता नहीं दे सकतीं.
शेयर करने की अनुमतियों में बदलाव करना
किसी साइट पर शेयर करने की मौजूदा अनुमति के लिए, पहले उस AclEntry
को फ़ेच करें जिसकी अनुमति में बदलाव करना है. इसके बाद, अपनी पसंद के मुताबिक अनुमति में बदलाव करें. इसके बाद, सर्वर पर एसीएल में बदलाव करने के लिए, AclEntry
के update()
तरीके को कॉल करें.
इस उदाहरण में, साइट शेयर करना सेक्शन के हमारे पिछले aclEntry
उदाहरण में बदलाव किया गया है. इसके लिए, 'user@example.com' को writer
(सहयोगी) के तौर पर अपडेट किया गया है:
aclEntry.setRole(new AclRole("writer")); AclEntry updatedAclEntry = aclEntry.update(); // Could also use the client's update method // client.update(new URL(aclEntry.getEditLink().getHref()), aclEntry);
ईटीएग के बारे में ज़्यादा जानकारी के लिए, Google Data API की रेफ़रंस गाइड देखें.
शेयर करने की अनुमतियां हटाना
शेयर करने की अनुमति हटाने के लिए, पहले AclEntry
को फिर से पाएं. इसके बाद, इससे delete()
तरीके का इस्तेमाल करें:
aclEntry.delete(); // Could also use the client's delete method // client.delete(new URL(aclEntry.getEditLink().getHref()), aclEntry);
ईटीएग के बारे में ज़्यादा जानकारी के लिए, Google Data API की रेफ़रंस गाइड देखें.
खास विषय
किसी फ़ीड या एंट्री को फिर से खोजना
अगर आपको पहले से मौजूद किसी फ़ीड या एंट्री को फिर से फ़ेच करना है, तो सर्वर को सिर्फ़ तब सूची या एंट्री भेजने के लिए कहें, जब पिछली बार फ़ेच करने के बाद उसमें बदलाव हुआ हो. इससे आपकी प्रोसेसिंग बेहतर हो सकती है.
इस तरह की कंडिशनल रिकवरी के लिए, getFeed()
और getEntry()
, दोनों तरीकों में एक अतिरिक्त आर्ग्युमेंट दिया जाता है. इसमें, If-Modified-Since
हेडर के लिए ETag वैल्यू या DateTime
ऑब्जेक्ट स्वीकार किया जाता है.
entry.getEtag()
से एंट्री के ईटैग को ऐक्सेस किया जा सकता है.
इस उदाहरण में, कॉन्टेंट वाले वेबपेज की एंट्री को शर्तों के हिसाब से वापस लाया जाता है:
String feedUrl = "https://sites.google.com/feeds/content/site/siteName/123456789"; WebPageEntry entry = client.getEntry(new URL(feedUrl), WebPageEntry.class, "\"GVQHSARDQyp7ImBq\"");
जब सर्वर को यह अनुरोध मिलता है, तो वह यह जांच करता है कि आपने जिस आइटम का अनुरोध किया है उसका ETag, आपके दिए गए ETag से मेल खाता है या नहीं. अगर ETag मैच करते हैं, तो इसका मतलब है कि आइटम में कोई बदलाव नहीं हुआ है. साथ ही, सर्वर से HTTP 304 NotModifiedException
अपवाद मिलेगा.
अगर ई-टैग मेल नहीं खाता है, तो इसका मतलब है कि पिछली बार आपके अनुरोध करने के बाद, आइटम में बदलाव किए गए हैं. साथ ही, सर्वर उस आइटम को दिखाता है.
ईटीएग के बारे में ज़्यादा जानकारी के लिए, Google Data API की रेफ़रंस गाइड देखें.