গুরুত্বপূর্ণ: এই ডকুমেন্টটি ২০১২ সালের আগে লেখা হয়েছিল। এই ডকুমেন্টে বর্ণিত প্রমাণীকরণ বিকল্পগুলি (OAuth 1.0, AuthSub, এবং ClientLogin) ২০ এপ্রিল, ২০১২ তারিখ থেকে আনুষ্ঠানিকভাবে বন্ধ করে দেওয়া হয়েছে এবং এখন আর উপলব্ধ নেই। আমরা আপনাকে যত তাড়াতাড়ি সম্ভব OAuth 2.0 এ স্থানান্তরিত করার জন্য উৎসাহিত করছি।
Google Sites Data API ক্লায়েন্ট অ্যাপ্লিকেশনগুলিকে Google Site এর মধ্যে কন্টেন্ট অ্যাক্সেস, প্রকাশ এবং সংশোধন করার অনুমতি দেয়। আপনার ক্লায়েন্ট অ্যাপ্লিকেশন সাম্প্রতিক কার্যকলাপের একটি তালিকা, পুনর্বিবেচনার ইতিহাস আনা এবং সংযুক্তি ডাউনলোড করার জন্য অনুরোধ করতে পারে।
সাইটস ডেটা এপিআই-এর ক্ষমতা সম্পর্কে কিছু পটভূমি প্রদানের পাশাপাশি, এই নির্দেশিকাটি জাভা ক্লায়েন্ট লাইব্রেরি ব্যবহার করে এপিআই-এর সাথে ইন্টারঅ্যাক্ট করার উদাহরণ প্রদান করে। ক্লায়েন্ট লাইব্রেরি সেট আপ করতে সাহায্যের জন্য, গুগল ডেটা জাভা ক্লায়েন্ট লাইব্রেরি দিয়ে শুরু করা দেখুন। আপনি যদি ক্লাসিক সাইটস এপিআই-এর সাথে ইন্টারঅ্যাক্ট করার জন্য জাভা ক্লায়েন্ট লাইব্রেরি দ্বারা ব্যবহৃত অন্তর্নিহিত প্রোটোকল সম্পর্কে আরও বুঝতে আগ্রহী হন, তাহলে অনুগ্রহ করে প্রোটোকল গাইডটি দেখুন।
পাঠকবর্গ
এই ডকুমেন্টটি সেইসব ডেভেলপারদের জন্য তৈরি যারা গুগল ডেটা জাভা ক্লায়েন্ট লাইব্রেরি ব্যবহার করে গুগল সাইটের সাথে ইন্টারঅ্যাক্ট করে এমন ক্লায়েন্ট অ্যাপ্লিকেশন লিখতে চান।
শুরু করা
গুগল সাইটস প্রমাণীকরণের জন্য গুগল অ্যাকাউন্ট বা জি স্যুট অ্যাকাউন্ট ব্যবহার করে। যদি আপনার ইতিমধ্যেই একটি অ্যাকাউন্ট থাকে, তাহলে আপনি সম্পূর্ণ প্রস্তুত। অন্যথায়, আপনি একটি নতুন অ্যাকাউন্ট তৈরি করতে পারেন।
লাইব্রেরি ইনস্টল করা হচ্ছে
ক্লায়েন্ট লাইব্রেরি সেট আপ এবং ইনস্টল করার জন্য সাহায্যের জন্য, "গুগল ডেটা জাভা ক্লায়েন্ট লাইব্রেরি দিয়ে শুরু করা" দেখুন। আপনি যদি Eclipse ব্যবহার করেন, তাহলে সেই নিবন্ধটি Google ডেটা APIs Eclipse প্লাগইন ব্যবহার করে আপনার প্রকল্পটি কীভাবে সেটআপ করবেন তাও ব্যাখ্যা করে। শুরু করার জন্য আপনার যা প্রয়োজন তা এখানে দেওয়া হল:
- জাভা ১.৫ বা তার উচ্চতর সংস্করণ ইনস্টল করুন
- ক্লায়েন্ট লাইব্রেরি ডাউনলোড করুন (
gdata-src.java.zipএর সর্বশেষ সংস্করণ) - নির্ভরতার তালিকা ডাউনলোড করুন
- নমুনা অ্যাপ্লিকেশনগুলি ডাউনলোড করুন (
gdata-samples.java.zipএর সর্বশেষ সংস্করণ)
.jars ইনস্টল করার পরে, আপনার প্রকল্পে নিম্নলিখিতগুলি অন্তর্ভুক্ত করতে হবে:
-
java/lib/gdata-sites-2.0.jar- এখানে সংস্করণ 2.0 ক্লাসিক সাইটস 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 সাবডিরেক্টরিতে অবস্থিত। উৎসটি /trunk/java/sample/sites/ তে SVN রিপোজিটরিতেও পাওয়া যায় যা Source ট্যাব থেকে অ্যাক্সেসযোগ্য। 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-তে প্রমাণীকরণ করা হচ্ছে
জাভা ক্লায়েন্ট লাইব্রেরিটি পাবলিক বা প্রাইভেট ফিডের সাথে কাজ করার জন্য ব্যবহার করা যেতে পারে। সাইট ডেটা API সাইটের অনুমতি এবং আপনি যে ক্রিয়াকলাপটি সম্পাদন করার চেষ্টা করছেন তার উপর নির্ভর করে ব্যক্তিগত এবং পাবলিক ফিডগুলিতে অ্যাক্সেস সরবরাহ করে। উদাহরণস্বরূপ, আপনি একটি পাবলিক সাইটের কন্টেন্ট ফিড পড়তে সক্ষম হতে পারেন কিন্তু এতে আপডেট করতে পারবেন না - এমন কিছু যা একটি প্রমাণিত ক্লায়েন্টের প্রয়োজন হবে। এটি ClientLogin ব্যবহারকারীর নাম/পাসওয়ার্ড প্রমাণীকরণ, AuthSub , অথবা OAuth এর মাধ্যমে করা যেতে পারে।
AuthSub, OAuth, এবং ClientLogin সম্পর্কে আরও তথ্যের জন্য অনুগ্রহ করে Google ডেটা API প্রমাণীকরণ ওভারভিউ দেখুন।
টিপস : API SSL (HTTPS) সমর্থন করে। আপনি যদি AuthSub/OAuth ব্যবহার করেন, তাহলে SSL এর মাধ্যমে ফিডের অনুরোধ করার জন্য http s ://sites.google.com/feeds/ এর একটি স্কোপ নির্দিষ্ট করতে ভুলবেন না। এছাড়াও মনে রাখবেন যে G Suite ডোমেনের জন্য, প্রশাসনিক নিয়ন্ত্রণ প্যানেলে 'SSL প্রয়োজন' সেটিং API দ্বারা সম্মানিত হয়। আপনি client.useSsl(); কল করে সমস্ত API অনুরোধ HTTPS এর মাধ্যমে বাধ্য করতে পারেন।
ওয়েব অ্যাপ্লিকেশনের জন্য AuthSub
ওয়েব অ্যাপ্লিকেশনের জন্য AuthSub প্রমাণীকরণ সেই ক্লায়েন্ট অ্যাপ্লিকেশনগুলিতে ব্যবহার করা উচিত যাদের তাদের ব্যবহারকারীদের Google অ্যাকাউন্টে প্রমাণীকরণ করতে হবে। অপারেটরের Google Sites ব্যবহারকারীর জন্য ব্যবহারকারীর নাম এবং পাসওয়ার্ড অ্যাক্সেসের প্রয়োজন নেই - শুধুমাত্র একটি AuthSub টোকেন প্রয়োজন।
আপনার ওয়েব অ্যাপ্লিকেশনে AuthSub অন্তর্ভুক্ত করার নির্দেশাবলী দেখুন
একটি একক-ব্যবহারের টোকেনের অনুরোধ করুন
যখন ব্যবহারকারী প্রথম আপনার অ্যাপ্লিকেশনটি দেখেন, তখন তাদের প্রমাণীকরণ করতে হয়। সাধারণত, ডেভেলপাররা কিছু টেক্সট এবং একটি লিঙ্ক প্রিন্ট করে যা ব্যবহারকারীকে AuthSub অনুমোদন পৃষ্ঠায় নিয়ে যায় যাতে ব্যবহারকারীকে প্রমাণীকরণ করা যায় এবং তাদের নথিতে অ্যাক্সেসের অনুরোধ করা যায়। Google Data Java ক্লায়েন্ট লাইব্রেরি এই URL তৈরি করার জন্য একটি ফাংশন প্রদান করে। নীচের কোডটি AuthSubRequest পৃষ্ঠার একটি লিঙ্ক সেট আপ করে।
import com.google.gdata.client.*; String nextUrl = "http://www.example.com/welcome.jsp"; String scope = "https://sites.google.com/feeds/"; boolean secure = true; boolean session = true; String authSubUrl = AuthSubUtil.getRequestUrl(nextUrl, scope, secure, session);
আপনার G Suite হোস্ট করা ডোমেনের ব্যবহারকারীদের প্রমাণীকরণ করতে চাইলে:
import com.google.gdata.client.*; String hostedDomain = "example.com"; String nextUrl = "http://www.example.com/welcome.jsp"; String scope = "https://sites.google.com/feeds/"; // SSL is also supported boolean secure = true; boolean session = true; String authSubUrl = AuthSubUtil.getRequestUrl(hostedDomain, nextUrl, scope, secure, session);
getRequestUrl() পদ্ধতিটি বেশ কয়েকটি প্যারামিটার নেয় ( AuthSubRequest হ্যান্ডলার দ্বারা ব্যবহৃত কোয়েরি প্যারামিটারের সাথে সঙ্গতিপূর্ণ):
- পরবর্তী URL — ব্যবহারকারীর অ্যাকাউন্টে লগ ইন করার পরে এবং অ্যাক্সেস দেওয়ার পরে Google যে URL-এ পুনঃনির্দেশিত করবে; উপরের উদাহরণে
http://www.example.com/welcome.jsp - উপরের উদাহরণে স্কোপ —
https://sites.google.com/feeds/ - টোকেনটি নিবন্ধিত মোডে ব্যবহার করা হবে কিনা তা নির্দেশ করার জন্য একটি বুলিয়ান; উপরের উদাহরণে
false - টোকেনটি পরবর্তীতে একটি সেশন টোকেনের সাথে বিনিময় করা হবে কিনা তা নির্দেশ করার জন্য একটি দ্বিতীয় বুলিয়ান; উপরের উদাহরণে
true
একটি সেশন টোকেনে আপগ্রেড করা হচ্ছে
Google ডেটা API ক্লায়েন্ট লাইব্রেরিগুলির সাথে AuthSub ব্যবহার দেখুন।
একটি সেশন টোকেন সম্পর্কে তথ্য পুনরুদ্ধার করা হচ্ছে
Google ডেটা API ক্লায়েন্ট লাইব্রেরিগুলির সাথে AuthSub ব্যবহার দেখুন।
একটি সেশন টোকেন প্রত্যাহার করা হচ্ছে
Google ডেটা API ক্লায়েন্ট লাইব্রেরিগুলির সাথে AuthSub ব্যবহার দেখুন।
ওয়েব বা ইনস্টল করা/মোবাইল অ্যাপ্লিকেশনের জন্য OAuth
OAuth AuthSub এর বিকল্প হিসেবে ব্যবহার করা যেতে পারে এবং এটি ওয়েব অ্যাপ্লিকেশনের জন্য তৈরি। OAuth AuthSub এর সুরক্ষিত এবং নিবন্ধিত মোড ব্যবহারের অনুরূপ, যেখানে সমস্ত ডেটা অনুরোধ ডিজিটালি স্বাক্ষরিত হতে হবে এবং আপনাকে অবশ্যই আপনার ডোমেন নিবন্ধন করতে হবে।
আপনার ইনস্টল করা অ্যাপ্লিকেশনে OAuth অন্তর্ভুক্ত করার নির্দেশাবলী দেখুন
একটি অনুরোধ টোকেন আনা হচ্ছে
Google ডেটা API ক্লায়েন্ট লাইব্রেরিগুলির সাথে OAuth ব্যবহার দেখুন।
একটি অনুরোধ টোকেন অনুমোদন করা হচ্ছে
Google ডেটা API ক্লায়েন্ট লাইব্রেরিগুলির সাথে OAuth ব্যবহার দেখুন।
একটি অ্যাক্সেস টোকেনে আপগ্রেড করা হচ্ছে
Google ডেটা API ক্লায়েন্ট লাইব্রেরিগুলির সাথে OAuth ব্যবহার দেখুন।
ইনস্টলড/মোবাইল অ্যাপ্লিকেশনের জন্য ক্লায়েন্টলগইন
ClientLogin ইনস্টল করা অথবা মোবাইল অ্যাপ্লিকেশন ব্যবহার করা উচিত যাদের ব্যবহারকারীদের Google অ্যাকাউন্টে প্রমাণীকরণ করতে হবে। প্রথমবার চালানোর সময়, আপনার অ্যাপ্লিকেশন ব্যবহারকারীকে তাদের ব্যবহারকারীর নাম/পাসওয়ার্ডের জন্য অনুরোধ করবে। পরবর্তী অনুরোধগুলিতে, একটি প্রমাণীকরণ টোকেন উল্লেখ করা হবে।
আপনার ইনস্টল করা অ্যাপ্লিকেশনে ClientLogin অন্তর্ভুক্ত করার নির্দেশাবলী দেখুন।
ClientLogin ব্যবহার করতে, SitesService অবজেক্টের setUserCredentials() পদ্ধতিটি ব্যবহার করুন, যা GoogleService থেকে উত্তরাধিকারসূত্রে পাওয়া যায়। আপনার ক্লায়েন্ট যার পক্ষ থেকে অনুরোধ করছেন তার ইমেল ঠিকানা এবং পাসওয়ার্ড উল্লেখ করুন। উদাহরণস্বরূপ:
SitesService client = new SitesService("yourCo-yourAppName-v1"); client.setUserCredentials("example@gmail.com", "pa$$word");
টিপস : আপনার অ্যাপ্লিকেশনটি প্রথমবারের জন্য ব্যবহারকারীকে সফলভাবে প্রমাণীকরণ করার পরে, পরবর্তী ব্যবহারের জন্য প্রত্যাহার করার জন্য আপনার ডাটাবেসে auth টোকেনটি সংরক্ষণ করুন। আপনার অ্যাপ্লিকেশনের প্রতিটি রানে ব্যবহারকারীকে তাদের পাসওয়ার্ড জিজ্ঞাসা করার প্রয়োজন নেই। আরও তথ্যের জন্য প্রত্যাহার একটি auth টোকেন দেখুন।
আপনার জাভা অ্যাপ্লিকেশনগুলিতে ClientLogin ব্যবহার সম্পর্কে আরও তথ্যের জন্য, Google Data API Client Libraries এর সাথে ClientLogin ব্যবহার দেখুন।
সাইট ফিড
সাইট ফিডটি ব্যবহারকারীর মালিকানাধীন বা দেখার অনুমতিপ্রাপ্ত Google সাইটগুলির তালিকা তৈরি করতে ব্যবহার করা যেতে পারে। এটি একটি বিদ্যমান সাইটের নাম পরিবর্তন করতেও ব্যবহার করা যেতে পারে। G Suite ডোমেনের জন্য, এটি একটি সম্পূর্ণ সাইট তৈরি এবং/অথবা কপি করতেও ব্যবহার করা যেতে পারে।
তালিকাভুক্ত সাইটগুলি
সাইট ফিড জিজ্ঞাসা করতে, সাইট ফিড URL-এ একটি HTTP GET পাঠান:
https://sites.google.com/feeds/site/site/ জাভা ক্লায়েন্টে, সাইট ফিডের সাথে কাজ করার জন্য আপনি SiteFeed এবং SiteEntry ক্লাস ব্যবহার করতে পারেন:
public String getSiteFeedUrl() { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) return "https://sites.google.com/feeds/site/" + domain + "/"; } public void getSiteFeed() throws IOException, ServiceException { SiteFeed siteFeed = client.getFeed(new URL(getSiteFeedUrl()), SiteFeed.class); for (SiteEntry entry : siteFeed.getEntries()){ System.out.println("title: " + entry.getTitle().getPlainText()); System.out.println("site name: " + entry.getSiteName().getValue()); System.out.println("theme: " + entry.getTheme().getValue()); System.out.println(""); } }
উপরের স্নিপেটটি সাইটের শিরোনাম, সাইটের নাম এবং সাইটের থিম প্রিন্ট করে। ফিডে অতিরিক্ত বৈশিষ্ট্য অ্যাক্সেস করার জন্য অন্যান্য গ্রাহকরা উপলব্ধ।
নতুন সাইট তৈরি করা হচ্ছে
দ্রষ্টব্য : এই বৈশিষ্ট্যটি শুধুমাত্র G Suite ডোমেনের জন্য উপলব্ধ।
নতুন SiteEntry তৈরি করে এবং সাইট ফিডে ক্লায়েন্টের insert() পদ্ধতি কল করে নতুন সাইট তৈরি করা যেতে পারে।
এই উদাহরণটি 'স্লেট' থিম (ঐচ্ছিক সেটিং) সহ একটি একেবারে নতুন সাইট তৈরি করে এবং সাইটের নাম (প্রয়োজনীয়) এবং বিবরণ (ঐচ্ছিক) প্রদান করে:
public String getSiteFeedUrl() { String domain = "example.com"; return "https://sites.google.com/feeds/site/" + domain + "/"; } public SiteEntry createSite(String title, String summary, String theme, String tag) throws MalformedURLException, IOException, ServiceException { SiteEntry entry = new SiteEntry(); entry.setTitle(new PlainTextConstruct(title)); entry.setSummary(new PlainTextConstruct(summary)); Theme tt = new Theme(); tt.setValue(theme); entry.setTheme(tt); entry.getCategories().add(new Category(TagCategory.Scheme.TAG, tag, null)); return client.insert(new URL(getSiteFeedUrl()), entry); } SiteEntry newSiteEntry = createSite("My Site Title", "summary for site", "slate", "tag");
উপরের অনুরোধটি G Suite ডোমেন example.com এর অধীনে একটি নতুন সাইট তৈরি করবে। সুতরাং, সাইটের URL হবে https://sites.google.com/a/example.com/my-site-title।
যদি সাইটটি সফলভাবে তৈরি করা হয়, তাহলে সার্ভারটি একটি SiteEntry অবজেক্টের সাথে প্রতিক্রিয়া জানাবে, যা সার্ভার দ্বারা যুক্ত উপাদানগুলি দিয়ে পূর্ণ হবে: সাইটের একটি লিঙ্ক, সাইটের acl ফিডের একটি লিঙ্ক, সাইটের নাম, শিরোনাম, সারাংশ এবং আরও অনেক কিছু।
একটি সাইট কপি করা
দ্রষ্টব্য : এই বৈশিষ্ট্যটি শুধুমাত্র G Suite ডোমেনের জন্য উপলব্ধ।
একটি সাইট কপি করা একটি নতুন সাইট তৈরি করার মতোই। পার্থক্য হল আপনার নতুন SiteEntry তে একটি লিঙ্ক সেট করতে হবে যাতে ডুপ্লিকেট করার জন্য সাইটের নিজস্ব লিঙ্ক অন্তর্ভুক্ত থাকে। নতুন সাইট তৈরি করা বিভাগে তৈরি সাইটটি ডুপ্লিকেট করার একটি উদাহরণ এখানে দেওয়া হল:
public SiteEntry copySite(String title, String summary, String sourceHref) throws MalformedURLException, IOException, ServiceException { SiteEntry entry = new SiteEntry(); entry.setTitle(new PlainTextConstruct(title)); entry.setSummary(new PlainTextConstruct(summary)); entry.addLink(SitesLink.Rel.SOURCE, Link.Type.ATOM, sourceHref); return client.insert(new URL(getSiteFeedUrl()), entry); } String sourceHref = newSiteEntry.getLink(SitesLink.Rel.SOURCE, Link.Type.ATOM).getHref(); SiteEntry myTwin = copySite("Duplicate Site", "A copy", sourceHref);
গুরুত্বপূর্ণ বিষয়:
- শুধুমাত্র অনুমোদিত ব্যবহারকারীর মালিকানাধীন সাইট এবং সাইট টেমপ্লেটগুলি অনুলিপি করা যেতে পারে।
- একটি সাইট টেমপ্লেটও কপি করা যেতে পারে। Google Sites সেটিংস পৃষ্ঠায় "এই সাইটটিকে একটি টেমপ্লেট হিসেবে প্রকাশ করুন" সেটিংটি চেক করা থাকলে একটি সাইট একটি টেমপ্লেট।
- আপনি অন্য ডোমেন থেকে একটি সাইট কপি করতে পারেন, যতক্ষণ না আপনি সোর্স সাইটে মালিক হিসেবে তালিকাভুক্ত হন।
একটি সাইটের মেটাডেটা আপডেট করা হচ্ছে
কোনও সাইটের নাম পরিবর্তন করতে, তার থিম, ক্যাটাগরি ট্যাগ বা সারাংশ পরিবর্তন করতে, আপনাকে প্রথমে প্রশ্নবিদ্ধ সাইটটি ধারণকারী SiteEntry আনতে হবে, এক বা একাধিক বৈশিষ্ট্য পরিবর্তন করতে হবে এবং তারপর SiteEntry এর update() পদ্ধতিটি কল করতে হবে। এই উদাহরণটি পূর্ববর্তী সাইটের থিম পরিবর্তন করে সাইটের নাম পরিবর্তন করে:
myTwin.setTitle(new PlainTextConstruct("better-title")); Theme theme = myTwin.getTheme(); theme.setValue('iceberg'); myTwin.setTheme(theme); myTwin.getCategories().add(new Category(TagCategory.Scheme.TAG, "newTag", null)); SiteEntry updatedSiteEntry = myTwin.update(); System.out.println(updatedSiteEntry.getTitle().getPlainText();
ওয়েব ঠিকানা ম্যাপিং
ওয়েব অ্যাড্রেস ম্যাপিং সাইট ব্যবহারকারীদের তাদের নিজস্ব ডোমেনগুলিকে একটি Google সাইটে ম্যাপ করতে সক্ষম করে। উদাহরণস্বরূপ, http://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 s রয়েছে যা http://sites.google.com/site/ myOtherTestSite সাইটের দিকে নির্দেশ করে।
ওয়েব ঠিকানা ম্যাপিং পরিবর্তন করা হচ্ছে
দ্রষ্টব্য : ওয়েব অ্যাড্রেস ম্যাপিং নিয়ে কাজ করার সময় সমস্ত GET/POST/PUT অপারেশনে with-mappings=true প্যারামিটারটি নির্দিষ্ট করা উচিত। যদি প্যারামিটারটি অনুপস্থিত থাকে, তাহলে webAddressMapping s সাইট এন্ট্রিতে (GET) ফেরত পাঠানো হবে না বা কোনও এন্ট্রি থেকে (PUT) ম্যাপিং আপডেট/অপসারণের সময় বিবেচনা করা হবে না।
কোনও ম্যাপিং যোগ করতে, আপডেট করতে বা মুছে ফেলতে, নতুন সাইট তৈরি করার সময় বা কোনও সাইটের মেটাডেটা আপডেট করার সময় কেবল এই ধরণের লিঙ্কটি নির্দিষ্ট করুন, পরিবর্তন করুন বা সরান। with-mappings=true প্যারামিটারটি সাইট ফিড URI-তে অন্তর্ভুক্ত করতে হবে। দ্রষ্টব্য: ঠিকানা ম্যাপিং আপডেট করার জন্য, আপনাকে একজন সাইট অ্যাডমিন হতে হবে, অথবা G Suite হোস্ট করা সাইটের ক্ষেত্রে একজন ডোমেন অ্যাডমিন হতে হবে।
উদাহরণস্বরূপ, নীচের অনুরোধটি http://www.mysitemapping.com ম্যাপিংকে http://www.my-new-sitemapping.com এ আপডেট করে এবং http://www.mysitemapping2.com লিঙ্কটি এন্ট্রি থেকে বাদ দিয়ে সরিয়ে দেয়:
SiteEntry entry = client.getEntry(new URL("https://sites.google.com/feeds/site/site/siteName?with-mappings=true"), SiteEntry.class); // Modify mappings (remove all mappings, add some of them again, add modified mappings) entry.removeLinks(SitesLink.Rel.WEBADDRESSMAPPING, Link.Type.HTML); entry.addLink(SitesLink.Rel.WEBADDRESSMAPPING, Link.Type.HTML, "http://www.my-new-sitemapping.com"); // Update the entry with the mappings. entry.update();
মনে রাখবেন, কোনও সাইট তৈরি/অনুলিপি করার সময় ওয়েব ঠিকানা ম্যাপিংও নির্দিষ্ট করা যেতে পারে।
অ্যাক্টিভিটি ফিড
আপনি অ্যাক্টিভিটি ফিড এনে একটি সাইটের সাম্প্রতিক অ্যাক্টিভিটি (পরিবর্তন) আনতে পারেন। অ্যাক্টিভিটি ফিডের প্রতিটি এন্ট্রিতে সাইটে করা পরিবর্তনের তথ্য থাকে।
অ্যাক্টিভিটি ফিডটি জিজ্ঞাসা করতে, অ্যাক্টিভিটি ফিড URL-এ একটি HTTP GET পাঠান:
https://sites.google.com/feeds/activity/site/siteName
জাভা ক্লায়েন্টে, ActivityFeed ক্লাস ব্যবহার করে ActivityEntry অবজেক্টগুলি ফেরত দিন:
public String buildActivityFeedUrl() { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) String siteName = "mySite"; return "https://sites.google.com/feeds/activity/" + domain + "/" + siteName + "/"; } public void getActivityFeed() throws IOException, ServiceException { ActivityFeed activityFeed = client.getFeed(new URL(buildActivityFeedUrl()), ActivityFeed.class); for (BaseActivityEntry<?> entry : activityFeed.getEntries()){ System.out.println(entry.getSummary().getPlainText()); System.out.println(" revisions link: " + entry.getRevisionLink().getHref()); } }
দ্রষ্টব্য : এই ফিডে অ্যাক্সেস পেতে আপনাকে সাইটের একজন সহযোগী বা মালিক হতে হবে। আপনার ক্লায়েন্টকে AuthSub, OAuth, অথবা ClientLogin টোকেন ব্যবহার করে প্রমাণীকরণ করতে হবে। সাইট পরিষেবায় প্রমাণীকরণ দেখুন।
রিভিশন ফিড
যেকোনো কন্টেন্ট এন্ট্রির রিভিশন ইতিহাস আনতে, এন্ট্রির রিভিশন লিঙ্কে একটি HTTP GET পাঠান:
https://sites.google.com/feeds/revision/site/siteName/CONTENT_ENTRY_ID
এই উদাহরণটি কন্টেন্ট ফিডকে জিজ্ঞাসা করে এবং তারপর প্রথম কন্টেন্ট এন্ট্রির জন্য রিভিশন ফিড আনে:
ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl()), ContentFeed.class); URL revisionFeedUrl = new URL(contentFeed.getEntries().get(0).getRevisionLink().getHref()); // use first entry public void getRevisionFeed(String revisionFeedUrl) throws IOException, ServiceException { RevisionFeed revisionFeed = client.getFeed(revisionFeedUrl, RevisionFeed.class); for (BaseContentEntry<?> entry : revisionFeed.getEntries()){ System.out.println(entry.getTitle().getPlainText()); System.out.println(" updated: " + entry.getUpdated().toUiString() + " by " + entry.getAuthors().get(0).getEmail()); System.out.println(" revision #: " + entry.getRevision().getValue()); } }
দ্রষ্টব্য: এই ফিডে অ্যাক্সেস পেতে আপনাকে সাইটের একজন সহযোগী বা মালিক হতে হবে। আপনার ক্লায়েন্টকে AuthSub, OAuth, অথবা ClientLogin টোকেন ব্যবহার করে প্রমাণীকরণ করতে হবে। সাইট পরিষেবায় প্রমাণীকরণ দেখুন।
কন্টেন্ট ফিড
কন্টেন্ট ফিড পুনরুদ্ধার করা হচ্ছে
কন্টেন্ট ফিডে একটি সাইটের সর্বশেষ কন্টেন্ট তালিকাভুক্ত করা হয়। কন্টেন্ট ফিড URL-এ একটি HTTP GET পাঠিয়ে এটি অ্যাক্সেস করা যেতে পারে:
https://sites.google.com/feeds/content/site/siteName
| ফিড প্যারামিটার | বিবরণ |
|---|---|
site | " site " অথবা আপনার G Suite হোস্ট করা ডোমেনের ডোমেন (যেমন example.com )। |
siteName | আপনার সাইটের ওয়েবস্পেসের নাম; যা সাইটের URL-এ পাওয়া যায় (যেমন mySite )। |
কন্টেন্ট ফিড আনার উদাহরণ:
public String buildContentFeedUrl() { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) String siteName = "mySite"; return "https://sites.google.com/feeds/content/" + domain + "/" + siteName + "/"; } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl()), ContentFeed.class);
ফলে আসা contentFeed হল একটি ContentFeed অবজেক্ট যার মধ্যে সার্ভার থেকে আসা প্রতিক্রিয়া রয়েছে। contentFeed এর প্রতিটি এন্ট্রি ব্যবহারকারীর সাইটের মধ্যে একটি ভিন্ন পৃষ্ঠা বা আইটেম উপস্থাপন করে। ContentFeed বিভিন্ন ধরণের অবজেক্ট থাকবে, যা BaseContentEntry থেকে উত্তরাধিকারসূত্রে পাওয়া যাবে: ListItemEntry , ListPageEntry , AttachmentEntry , WebAttachmentEntry , FileCabinetPageEntry , AnnouncementsPageEntry , AnnouncementEntry , WebPageEntry , CommentEntry ।
এখানে একটি ContentFeed এ বিভিন্ন ধরণের এন্ট্রি তালিকাভুক্ত করার একটি উদাহরণ দেওয়া হল। প্রতিটি ধরণের এন্ট্রিতে বিভিন্ন বৈশিষ্ট্য থাকে, কিন্তু এখানে সবগুলি মুদ্রিত হয় না।
public String getContentBlob(BaseContentEntry<?> entry) { return ((XhtmlTextConstruct) entry.getTextContent().getContent()).getXhtml().getBlob(); } // Extracts an entry's numeric ID. private String getEntryId(String selfLink) { return selfLink.substring(selfLink.lastIndexOf("/") + 1); } public void printContentEntries(ContentFeed contentFeed) { System.out.println("Listing all WebPageEntry:"); for (WebPageEntry entry : contentFeed.getEntries(WebPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } System.out.println(" author: " + entry.getAuthors().get(0).getEmail()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all ListPageEntry:"); for (ListPageEntry entry : contentFeed.getEntries(ListPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); for (Column col : entry.getData().getColumns()) { System.out.print(" [" + col.getIndex() + "] " + col.getName() + "\t"); } } for (ListItemEntry entry : contentFeed.getEntries(ListItemEntry.class)) { for (Field field : entry.getFields()) { System.out.print(" [" + field.getIndex() + "] " + field.getValue() + "\t"); } System.out.println("\n"); } System.out.println("Listing all FileCabinetPageEntry:"); for (FileCabinetPageEntry entry : contentFeed.getEntries(FileCabinetPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all CommentEntry:"); for (CommentEntry entry : contentFeed.getEntries(CommentEntry.class)) { System.out.println(" in-reply-to: " + entry.getInReplyTo().toString()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AnnouncementsPageEntry:"); for (AnnouncementsPageEntry entry : contentFeed.getEntries(AnnouncementsPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AnnouncementEntry:"); for (AnnouncementEntry entry : contentFeed.getEntries(AnnouncementEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } System.out.println(" draft?: " + entry.isDraft()); System.out.println(" content: " + getContentBlob(entry)); } System.out.println("Listing all AttachmentEntry:"); for (AttachmentEntry entry : contentFeed.getEntries(AttachmentEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } if (entry.getSummary() != null) { System.out.println(" description: " + entry.getSummary().getPlainText()); } System.out.println(" revision: " + entry.getRevision().getValue()); MediaContent content = (MediaContent) entry.getContent(); System.out.println(" src: " + content.getUri()); System.out.println(" content type: " + content.getMimeType().getMediaType()); } System.out.println("Listing all WebAttachmentEntry:"); for (WebAttachmentEntry entry : contentFeed.getEntries(WebAttachmentEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); System.out.println(" id: " + getEntryId(entry)); if (entry.getParentLink() != null) { System.out.println(" parent id: " + getEntryId(entry.getParentLink().getHref())); } if (entry.getSummary() != null) { System.out.println(" description: " + entry.getSummary().getPlainText()); } System.out.println(" src: " + ((MediaContent) entry.getContent()).getUri()); } }
দ্রষ্টব্য: এই ফিডের প্রমাণীকরণের প্রয়োজন হতে পারে বা নাও হতে পারে; এটি সাইটের শেয়ারিং অনুমতির উপর নির্ভর করে। যদি সাইটটি অ-সর্বজনীন হয়, তাহলে আপনার ক্লায়েন্টকে AuthSub, OAuth, অথবা ClientLogin টোকেন ব্যবহার করে প্রমাণীকরণ করতে হবে। সাইট পরিষেবাতে প্রমাণীকরণ দেখুন।
কন্টেন্ট ফিড কোয়েরির উদাহরণ
আপনি কিছু স্ট্যান্ডার্ড Google Data API কোয়েরি প্যারামিটার এবং ক্লাসিক Sites API-এর জন্য নির্দিষ্ট প্যারামিটার ব্যবহার করে কন্টেন্ট ফিড অনুসন্ধান করতে পারেন। আরও বিস্তারিত তথ্য এবং সমর্থিত প্যারামিটারগুলির সম্পূর্ণ তালিকার জন্য, রেফারেন্স গাইড দেখুন।
দ্রষ্টব্য : এই বিভাগের উদাহরণগুলিতে কন্টেন্ট ফিড পুনরুদ্ধারের ক্ষেত্রে buildContentFeedUrl() পদ্ধতি ব্যবহার করা হয়েছে।
নির্দিষ্ট ধরণের এন্ট্রি পুনরুদ্ধার করা হচ্ছে
শুধুমাত্র একটি নির্দিষ্ট ধরণের এন্ট্রি আনতে, kind প্যারামিটারটি ব্যবহার করুন। এই উদাহরণটি কেবল attachment এন্ট্রিগুলি ফেরত দেয়:
ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl())); query.setKind("webpage"); ContentFeed contentFeed = client.getFeed(query, ContentFeed.class); for (AttachmentEntry entry : contentFeed.getEntries(AttachmentEntry.class)) { System.out.println(entry.getTitle().getPlainText()); }
একাধিক এন্ট্রি টাইপ ফেরত দিতে, প্রতিটি kind ',' দিয়ে আলাদা করুন। এই উদাহরণটি filecabinet এবং listpage এন্ট্রি ফেরত দেয়:
URL url = new URL(buildContentFeedUrl() + "?kind=filecabinet,listpage"); ContentFeed contentFeed = client.getFeed(url, ContentFeed.class); for (FileCabinetPageEntry entry : contentFeed.getEntries(FileCabinetPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); } for (ListPageEntry entry : contentFeed.getEntries(ListPageEntry.class)) { System.out.println(" title: " + entry.getTitle().getPlainText()); }
পথ অনুসারে একটি পৃষ্ঠা পুনরুদ্ধার করা হচ্ছে
যদি আপনি গুগল সাইটের মধ্যে কোনও পৃষ্ঠার আপেক্ষিক পথ জানেন, তাহলে আপনি সেই নির্দিষ্ট পৃষ্ঠাটি আনতে path প্যারামিটার ব্যবহার করতে পারেন। এই উদাহরণটি http://sites.google.com/ site / siteName /path/to/the/page এ অবস্থিত পৃষ্ঠাটি ফিরিয়ে দেবে:
ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl())); query.setPath("/path/to/the/page"); ContentFeed contentFeed = client.getFeed(query, ContentFeed.class); for (BaseContentEntry<?> entry : contentFeed.getEntries()) { System.out.println(" title: " + entry.getTitle().getPlainText()); }
একটি মূল পৃষ্ঠার অধীনে সমস্ত এন্ট্রি পুনরুদ্ধার করা হচ্ছে
যদি আপনি কোনও পৃষ্ঠার কন্টেন্ট এন্ট্রি আইডি জানেন (যেমন নীচের উদাহরণে "1234567890"), তাহলে আপনি parent প্যারামিটার ব্যবহার করে এর সমস্ত চাইল্ড এন্ট্রি (যদি থাকে) আনতে পারেন:
ContentQuery query = new ContentQuery(new URL(buildContentFeedUrl())); query.setParent("1234567890"); ContentFeed contentFeed = client.getFeed(query, ContentFeed.class);
অতিরিক্ত প্যারামিটারের জন্য, রেফারেন্স গাইড দেখুন।
কন্টেন্ট তৈরি করা
দ্রষ্টব্য: কোনও সাইটের জন্য কন্টেন্ট তৈরি করার আগে, নিশ্চিত করুন যে আপনি আপনার সাইটটি ক্লায়েন্টে সেট করেছেন। client.site = "siteName";
নতুন কন্টেন্ট (ওয়েবপেজ, লিস্টপেজ, ফাইলক্যাবিনেট পেজ, ঘোষণা পেজ ইত্যাদি) কন্টেন্ট ফিডে একটি HTTP POST পাঠিয়ে তৈরি করা যেতে পারে:
https://sites.google.com/feeds/content/site/siteName
সাপোর্ট নোডের ধরণের তালিকার জন্য, রেফারেন্স গাইডে kind প্যারামিটারটি দেখুন।
নতুন আইটেম / পৃষ্ঠা তৈরি করা
এই উদাহরণটি সাইটের শীর্ষ-স্তরের অধীনে একটি নতুন webpage তৈরি করে, পৃষ্ঠার মূল অংশের জন্য কিছু XHTML অন্তর্ভুক্ত করে এবং শিরোনামের শিরোনাম 'নতুন ওয়েবপৃষ্ঠা শিরোনাম' এ সেট করে:
private void setContentBlob(BaseContentEntry<?> entry, String pageContent) { XmlBlob xml = new XmlBlob(); xml.setBlob(pageContent); entry.setContent(new XhtmlTextConstruct(xml)); } public WebPageEntry createWebPage(String title, String content) throws MalformedURLException, IOException, ServiceException { WebPageEntry entry = new WebPageEntry(); entry.setTitle(new PlainTextConstruct(title)); setContentBlob(entry, content); // Entry's HTML content return client.insert(new URL(buildContentFeedUrl()), entry); } WebPageEntry createdEntry = createWebPage("New Webpage Title", "<b>HTML content</b>"); System.out.println("Created! View at " + createdEntry.getHtmlLink().getHref());
যদি অনুরোধটি সফল হয়, তাহলে createdEntry তে সার্ভারে তৈরি করা এন্ট্রির একটি কপি থাকবে।
কাস্টম URL পাথের অধীনে আইটেম/পৃষ্ঠা তৈরি করা
ডিফল্টরূপে, পূর্ববর্তী উদাহরণটি http://sites.google.com/ site / siteName /new-webpage-title URL এর অধীনে তৈরি করা হবে এবং 'নতুন ওয়েবপেজ শিরোনাম' এর একটি পৃষ্ঠা শিরোনাম থাকবে। অর্থাৎ, URL এর জন্য <atom:title> কে new-webpage-title এ স্বাভাবিক করা হবে। একটি পৃষ্ঠার URL পাথ কাস্টমাইজ করতে, আপনি <sites:pageName> উপাদানটি সেট করতে পারেন।
এই উদাহরণে 'ফাইল স্টোরেজ' শিরোনাম সহ একটি নতুন filecabinet পৃষ্ঠা তৈরি করা হয়েছে, কিন্তু <sites:pageName> উপাদানটি নির্দিষ্ট করে http://sites.google.com/ site / siteName /files ( http://sites.google.com/ site / siteName /file-storage এর পরিবর্তে) URL এর অধীনে পৃষ্ঠাটি তৈরি করা হয়েছে।
public FileCabinetPageEntry createFileCabinetPage(String title, String content, String customPageName) throws MalformedURLException, IOException, ServiceException { FileCabinetPageEntry entry = new FileCabinetPageEntry(); entry.setTitle(new PlainTextConstruct(title)); setContentBlob(entry, content); // Entry's HTML content entry.setPageName(new PageName(customPageName)); // Upload to a custom page path return client.insert(new URL(buildContentFeedUrl()), entry); } FileCabinetPageEntry createdEntry = createFileCabinetPage("File Storage", "<b>HTML content</b>", "files"); System.out.println("Created! View at " + createdEntry.getHtmlLink().getHref());
একটি পৃষ্ঠার URL পাথের নামকরণের জন্য সার্ভার নিম্নলিখিত অগ্রাধিকার নিয়ম ব্যবহার করে:
-
<sites:pageName>, যদি থাকে। অবশ্যইaz, AZ, 0-9, -, _পূরণ করতে হবে। -
<atom:title>, যদি pageName উপস্থিত না থাকে তাহলে অবশ্যই null হওয়া উচিত নয়। স্বাভাবিকীকরণ হল '-' এ হোয়াইটস্পেস ট্রিম + কোলাপস করা এবংaz, AZ, 0-9, -, _সাথে মেলে না এমন অক্ষরগুলি সরিয়ে ফেলা।
উপপৃষ্ঠা তৈরি করা হচ্ছে
একটি প্যারেন্ট পেজের অধীনে সাবপেজ (শিশু) তৈরি করতে, আপনাকে এন্ট্রিতে প্যারেন্ট লিঙ্ক সেট করতে হবে। লিঙ্কের href অ্যাট্রিবিউটটি প্যারেন্ট নোডের সেলফ লিঙ্কের সাথে।
public AnnouncementEntry postAnnouncement(String title, String content, AnnouncementsPageEntry parentPage) throws MalformedURLException, IOException, ServiceException { AnnouncementEntry entry = new AnnouncementEntry(); entry.setTitle(new PlainTextConstruct(title)); setContentBlob(entry, content); // Entry's HTML content // Set the entry's parent link to create the announcement under that page. entry.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, parentPage.getSelfLink().getHref()); return client.insert(new URL(buildContentFeedUrl()), entry); } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=announcementspage"), ContentFeed.class); AnnouncementEntry createdEntry = postAnnouncement("Party!!", "My place, this weekend", contentFeed.getEntries().get(0)); System.out.println("New post by " + createdEntry.getAuthors().get(0).getName());
উপরের উদাহরণটি ব্যবহারকারীর কন্টেন্ট ফিডে পাওয়া প্রথম ঘোষণা পৃষ্ঠার নীচে একটি নতুন announcement তৈরি করে। ঘোষণার শিরোনাম "পার্টি!!" এবং কন্টেন্ট "আমার জায়গা, এই সপ্তাহান্তে" সেট করা আছে।
পৃষ্ঠা টেমপ্লেট
পৃষ্ঠা টেমপ্লেট তৈরি করা হচ্ছে
একটি পৃষ্ঠা টেমপ্লেট তৈরির প্রক্রিয়া নতুন আইটেম/পৃষ্ঠা তৈরি এবং উপ-পৃষ্ঠা তৈরি করার মতোই। পার্থক্য হল category যোগ করার সময় শব্দ এবং লেবেল যথাক্রমে 'http://schemas.google.com/g/2005#template' এবং 'template' এ সেট করা হয়।
এই উদাহরণটি একটি নতুন webpage টেমপ্লেট তৈরি করে।
// The template webpage entry. WebPageEntry entry = new WebPageEntry(); // Set title and content. entry.setTitle(new PlainTextConstruct("Page template title")); XmlBlob xml = new XmlBlob(); xml.setBlob("Content for page template"); entry.setContent(new XhtmlTextConstruct(xml)); // Set the template category Category TEMPLATE_CATEGORY = new Category(TemplateCategory.Scheme.LABELS, TemplateCategory.Term.TEMPLATE, TemplateCategory.Label.TEMPLATE); entry.getCategories().add(TEMPLATE_CATEGORY); // Insert the template webpage entry. WebPageEntry createdEntry = client.insert(new URL("https://sites.google.com/feeds/content/site/siteName"), entry);
একটি টেমপ্লেট থেকে পৃষ্ঠা তৈরি করা
পৃষ্ঠা টেমপ্লেট তৈরির মতো, আপনি একটি টেমপ্লেট থেকে একটি নতুন পৃষ্ঠা তৈরি করতে পারেন, rel='http://schemas.google.com/sites/2008#template' সহ একটি <link> অন্তর্ভুক্ত করে যা একটি পৃষ্ঠা টেমপ্লেটের স্ব-লিঙ্কের দিকে নির্দেশ করে।
এই উদাহরণটি একটি নতুন filecabinet টেমপ্লেট তৈরি করে এবং তারপর সেই টেমপ্লেট থেকে একটি নতুন filecabinet পৃষ্ঠা তৈরি করে।
URL feedUrl = new URL("https://sites.google.com/feeds/content/site/siteName"); // 1. Create file cabinet page template FileCabinetPageEntry inputTemplateEntry = new FileCabinetPageEntry(); inputTemplateEntry.setTitle(new PlainTextConstruct("File cabinet page template title")); XmlBlob xml = new XmlBlob(); xml.setBlob("Content for page template"); inputTemplateEntry.setContent(new XhtmlTextConstruct(xml)); // Set the template category Category TEMPLATE_CATEGORY = new Category(TemplateCategory.Scheme.LABELS, TemplateCategory.Term.TEMPLATE, TemplateCategory.Label.TEMPLATE); inputTemplateEntry.getCategories().add(TEMPLATE_CATEGORY); // 2. Create file cabinet page template instance FileCabinetPageEntry templateEntry = client.insert(feedUrl, inputTemplateEntry); // Specify link to the page template FileCabinetPageEntry templateInstanceEntry = new FileCabinetPageEntry(); templateInstanceEntry.setTitle(new PlainTextConstruct("File cabinet template instance")); templateInstanceEntry.addLink(new Link(SitesLink.Rel.TEMPLATE, Link.Type.ATOM, templateEntry.getSelfLink().getHref())); FileCabinetPageEntry createdFileCabinetFromTemplate = client.insert(feedUrl, templateInstanceEntry);
দ্রষ্টব্য : <category> সংজ্ঞায়িত একটি টেমপ্লেট থাকা সত্ত্বেও, আপনার এন্ট্রিতে একটি অন্তর্ভুক্ত করা এখনও প্রয়োজন। এছাড়াও মনে রাখবেন, যদি আপনি একটি <content> উপাদান অন্তর্ভুক্ত করেন, সার্ভার এটি প্রত্যাখ্যান করবে।
ফাইল আপলোড করা হচ্ছে
ঠিক যেমন গুগল সাইটে, API ফাইল ক্যাবিনেট পৃষ্ঠা বা প্যারেন্ট পৃষ্ঠায় সংযুক্তি আপলোড সমর্থন করে।
অভিভাবকের কাছে একটি অ্যাটাচমেন্ট আপলোড করতে, কন্টেন্ট ফিড URL-এ একটি HTTP POST অনুরোধ পাঠান:
https://sites.google.com/feeds/content/site/siteName
সকল সংযুক্তির ধরণ অবশ্যই একটি মূল পৃষ্ঠায় আপলোড করতে হবে। অতএব, আপনি যে AttachmentEntry বা WebAttachmentEntry অবজেক্টটি আপলোড করার চেষ্টা করছেন তাতে একটি মূল লিঙ্ক সেট করুন। আরও তথ্যের জন্য সাবপেজ তৈরি করা দেখুন।
সংযুক্তি আপলোড করা হচ্ছে
এই উদাহরণটি ব্যবহারকারীর কন্টেন্ট ফিডে পাওয়া প্রথম FileCabinetPageEntry তে একটি PDF ফাইল আপলোড করে। সংযুক্তিটি 'শুরু করা' শিরোনাম এবং 'HR প্যাকেট' (ঐচ্ছিক) বর্ণনা সহ তৈরি করা হয়েছে।
MimetypesFileTypeMap mediaTypes = new MimetypesFileTypeMap(); mediaTypes.addMimeTypes("application/msword doc"); mediaTypes.addMimeTypes("application/vnd.ms-excel xls"); mediaTypes.addMimeTypes("application/pdf pdf"); mediaTypes.addMimeTypes("text/richtext rtx"); // ... See a more complete list of mime types in the SitesHelper.java public AttachmentEntry uploadAttachment(File file, BasePageEntry<?> parentPage, String title, String description) throws IOException, ServiceException { AttachmentEntry newAttachment = new AttachmentEntry(); newAttachment.setMediaSource(new MediaFileSource(file, mediaTypes.getContentType(file))); newAttachment.setTitle(new PlainTextConstruct(title)); newAttachment.setSummary(new PlainTextConstruct(description)); newAttachment.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, parentPage.getSelfLink().getHref()); return client.insert(new URL(buildContentFeedUrl()), newAttachment); } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=filecabinet"), ContentFeed.class); FileCabinetPageEntry parentPage = contentFeed.getEntries(FileCabinetPageEntry.class).get(0); AttachmentEntry attachment = uploadAttachment( new File("/path/to/your/file.pdf"), parentPage, "Getting Started", "HR packet"); System.out.println("Uploaded!");
আপলোড সফল হলে, attachment তৈরি সংযুক্তি এন্ট্রির একটি অনুলিপি থাকবে।
একটি ফোল্ডারে একটি সংযুক্তি আপলোড করা হচ্ছে
FileCabinetPageEntry এর একটি বিদ্যমান ফোল্ডারে একটি সংযুক্তি আপলোড করতে, ফোল্ডারের নামের সাথে 'term' বৈশিষ্ট্য সেট করে একটি বিভাগ অন্তর্ভুক্ত করুন। উদাহরণস্বরূপ, uploadAttachment() এ এই লাইনটি যোগ করুন:
newAttachment.getCategories().add(new Category("http://schemas.google.com/sites/2008#folder", "FolderName"));
ওয়েব সংযুক্তি
ওয়েব অ্যাটাচমেন্ট হল বিশেষ ধরণের অ্যাটাচমেন্ট। মূলত, এগুলি ওয়েবে থাকা অন্যান্য ফাইলের লিঙ্ক যা আপনি আপনার ফাইল ক্যাবিনেট তালিকায় যোগ করতে পারেন। এই বৈশিষ্ট্যটি Google Sites UI-তে 'URL দ্বারা ফাইল যোগ করুন' আপলোড পদ্ধতির অনুরূপ।
দ্রষ্টব্য : ওয়েব সংযুক্তিগুলি কেবল একটি ফাইল ক্যাবিনেটের নীচে তৈরি করা যেতে পারে। এগুলি অন্য ধরণের পৃষ্ঠায় আপলোড করা যাবে না।
এই উদাহরণটি ব্যবহারকারীর কন্টেন্ট ফিডে পাওয়া প্রথম FileCabinetPageEntry অধীনে একটি WebAttachmentEntry তৈরি করে। এর শিরোনাম এবং (ঐচ্ছিক) বিবরণ যথাক্রমে 'GoogleLogo' এবং 'চমৎকার রঙ'-এ সেট করা আছে।
public WebAttachmentEntry uploadWebAttachment(String contentUrl, FileCabinetPageEntry filecabinet, String title, String description) throws MalformedURLException, IOException, ServiceException { MediaContent content = new MediaContent(); content.setUri(contentUrl); WebAttachmentEntry webAttachment = new WebAttachmentEntry(); webAttachment.setTitle(new PlainTextConstruct(title)); webAttachment.setSummary(new PlainTextConstruct(description)); webAttachment.setContent(content); webAttachment.addLink(SitesLink.Rel.PARENT, Link.Type.ATOM, filecabinet.getSelfLink().getHref()); return client.insert(new URL(buildContentFeedUrl()), webAttachment); } ContentFeed contentFeed = client.getFeed(new URL(buildContentFeedUrl() + "?kind=filecabinet"), ContentFeed.class); FileCabinetPageEntry parentPage = contentFeed.getEntries(FileCabinetPageEntry.class).get(0); WebAttachmentEntry webAttachment = uploadWebAttachment("http://www.google.com/images/logo.gif", parentPage, "Google's Logo", "nice colors"); System.out.println("Web attachment created!");
POST ব্যবহারকারীর ফাইল ক্যাবিনেটে 'http://www.google.com/images/logo.gif' এ থাকা ছবিটির দিকে নির্দেশ করে একটি লিঙ্ক তৈরি করে।
কন্টেন্ট আপডেট করা হচ্ছে
একটি পৃষ্ঠার মেটাডেটা এবং/অথবা HTML কন্টেন্ট আপডেট করা
যেকোনো BaseContentEntry ধরণের মেটাডেটা (শিরোনাম, পৃষ্ঠার নাম, ইত্যাদি) এবং পৃষ্ঠার বিষয়বস্তু এন্ট্রির update() পদ্ধতি ব্যবহার করে সম্পাদনা করা যেতে পারে। এটি এন্ট্রির edit লিঙ্কে একটি HTTP PUT অনুরোধ পাঠাবে।
নীচে নিম্নলিখিত পরিবর্তনগুলি সহ একটি ListPageEntry আপডেট করার একটি উদাহরণ দেওয়া হল:
- শিরোনামটি 'আপডেট করা শিরোনাম'-এ পরিবর্তিত হয়েছে।
- পৃষ্ঠার HTML কন্টেন্ট '<p>আপডেট করা HTML কন্টেন্ট</p>' এ আপডেট করা হয়েছে।
- তালিকার প্রথম কলামের শিরোনাম "মালিক" তে পরিবর্তন করা হয়েছে।
ContentFeed contentFeed = client.getFeed( new URL(buildContentFeedUrl() + "?kind=listpage"), ContentFeed.class); ListPageEntry listPage = contentFeed.getEntries(ListPageEntry.class).get(0); // Update first list page found // Update title listPage.setTitle(new PlainTextConstruct("Updated Title")); // Update HTML content XmlBlob xml = new XmlBlob(); xml.setBlob("<p>Updated HTML Content</p>"); listPage.setContent(new XhtmlTextConstruct(xml)); // Change first column's heading listPage.getData().getColumns().get(0).setName("Owner"); // listPage.setPageName(new PageName("new-page-path")); // You can also change the page's URL path ListPageEntry updatedEntry = listPage.update(); System.out.println("ListPage updated!");
সংযুক্তি ফাইলের বিষয়বস্তু আপডেট করা হচ্ছে
AttachmentEntry এর জন্য, আপনি এন্ট্রির MediaSource সেট করে এবং তারপর এন্ট্রির updateMedia(boolean) পদ্ধতি ব্যবহার করে বিষয়বস্তু আপডেট করতে পারেন।
এই উদাহরণটি একটি বিদ্যমান সংযুক্তির বিষয়বস্তু আপডেট করবে:
public AttachmentEntry updateFile(AttachmentEntry entry, File newFile) throws IOException, ServiceException { // See Uploading Attachments for the definition of mediaTypes. entry.setMediaSource(new MediaFileSource(newFile, mediaTypes.getContentType(newFile))); return entry.updateMedia(false); }
উদাহরণটি এন্ট্রির edit-media লিঙ্কে একটি HTTP 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");
কন্টেন্ট মুছে ফেলা হচ্ছে
গুগল সাইট থেকে কোনও পৃষ্ঠা বা আইটেম সরাতে, প্রথমে কন্টেন্ট এন্ট্রিটি পুনরুদ্ধার করুন, তারপর এন্ট্রির delete() কল করুন।
entry.delete();
আপনি সার্ভিস ক্লাসের delete() পদ্ধতিটি এন্ট্রির edit লিঙ্ক এবং ETag মানটি পাস করেও ব্যবহার করতে পারেন:
client.delete(entry.getEditLink().getHref(), "*"); // Note: using "*" may overwrite another client's changes.
যদি এন্ট্রিটি সফলভাবে মুছে ফেলা হয়, তাহলে সার্ভারটি HTTP 200 OK দিয়ে সাড়া দেয়।
সংযুক্তি ডাউনলোড করা হচ্ছে
একটি AttachmentEntry ডাউনলোড করতে, এন্ট্রির কন্টেন্ট src লিঙ্কে একটি HTTP 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 ফিড
শেয়ারিং পারমিশন (ACLs) এর সংক্ষিপ্তসার
ACL ফিডে প্রতিটি ACL এন্ট্রি একটি নির্দিষ্ট সত্তার অ্যাক্সেস ভূমিকা উপস্থাপন করে, হয় একজন ব্যবহারকারী, ব্যবহারকারীদের একটি গোষ্ঠী, একটি ডোমেন, অথবা ডিফল্ট অ্যাক্সেস (যা একটি পাবলিক সাইট)। এন্ট্রিগুলি শুধুমাত্র স্পষ্ট অ্যাক্সেস সহ সত্তার জন্য দেখানো হবে - Google Sites UI এর শেয়ারিং স্ক্রিনে "অ্যাক্সেস সহ ব্যক্তি" প্যানেলে প্রতিটি ই-মেইল ঠিকানার জন্য একটি এন্ট্রি দেখানো হবে। সুতরাং, ডোমেন অ্যাডমিনদের দেখানো হবে না, যদিও তাদের কোনও সাইটে অন্তর্নিহিত অ্যাক্সেস রয়েছে।
ভূমিকা
ভূমিকা উপাদানটি একটি সত্তার অ্যাক্সেস স্তরের প্রতিনিধিত্ব করে। gAcl:role উপাদানের চারটি সম্ভাব্য মান রয়েছে:
- পাঠক — একজন দর্শক (শুধুমাত্র পঠনযোগ্য অ্যাক্সেসের সমতুল্য)।
- লেখক — একজন সহযোগী (পড়া/লেখার অ্যাক্সেসের সমতুল্য)।
- মালিক — সাধারণত সাইট অ্যাডমিন (পড়া/লেখার অ্যাক্সেসের সমতুল্য)।
সুযোগ
স্কোপ এলিমেন্টটি সেই এন্টিটিকে প্রতিনিধিত্ব করে যার এই অ্যাক্সেস লেভেল রয়েছে। gAcl:scope এলিমেন্টের সম্ভাব্য চারটি প্রকার রয়েছে:
- ব্যবহারকারী — একটি ই-মেইল ঠিকানার মান, যেমন "user@gmail.com"।
- গ্রুপ — একটি গুগল গ্রুপ ই-মেইল ঠিকানা, যেমন "group@domain.com"।
- ডোমেইন — একটি G Suite ডোমেইন নাম, যেমন "domain.com"।
- ডিফল্ট — "default" ধরণের শুধুমাত্র একটি সম্ভাব্য স্কোপ আছে, যার কোনও মান নেই (যেমন
<gAcl:scope type="default">)। এই নির্দিষ্ট স্কোপটি কোনও পাবলিক সাইটে ডিফল্টরূপে যেকোনো ব্যবহারকারীর অ্যাক্সেস নিয়ন্ত্রণ করে।
দ্রষ্টব্য : ডোমেনগুলিতে "মালিক" অ্যাক্সেসে gAcl:role মান সেট করা যাবে না, তারা কেবল পাঠক বা লেখক হতে পারবে।
ACL ফিড পুনরুদ্ধার করা হচ্ছে
AclFeed এবং AclEntry ক্লাসগুলি একটি সাইটের শেয়ারিং অনুমতি নিয়ন্ত্রণ করতে ব্যবহার করা যেতে পারে এবং পরিষেবা ক্লাসের getFeed() পদ্ধতি ব্যবহার করে এগুলি আনা যেতে পারে।
নিম্নলিখিত উদাহরণটি একটি নির্দিষ্ট সাইটের জন্য ACL ফিড আনে এবং প্রতিটি AclEntry এর অনুমতি প্রিন্ট করে:
public String getAclFeedUrl(String siteName) { String domain = "site"; // OR if the Site is hosted on G Suite, your domain (e.g. example.com) return "https://sites.google.com/feeds/acl/site/" + domain + "/" + siteName + "/"; } public void getAclFeed(String siteName) throws IOException, ServiceException { AclFeed aclFeed = client.getFeed(new URL(getAclFeedUrl(siteName)), AclFeed.class); for (AclEntry entry : aclFeed.getEntries()) { System.out.println(entry.getScope().getValue() + " (" + entry.getScope().getType() + ") : " + entry.getRole().getValue()); } } getAclFeed('my-site-name');
যদি আপনি SiteFeed এ এন্ট্রি নিয়ে কাজ করেন, তাহলে প্রতিটি SiteEntry এর ACL ফিডের একটি লিঙ্ক থাকবে। উদাহরণস্বরূপ, এই স্নিপেটটি একটি SiteEntry এর acl ফিড আনে:
String aclLink = siteEntry.getLink(SitesAclFeedLink.Rel.ACCESS_CONTROL_LIST, Link.Type.ATOM).getHref(); AclFeed aclFeed = client.getFeed(new URL(aclLink), AclFeed.class);
একটি সাইট শেয়ার করা
দ্রষ্টব্য : কিছু শেয়ারিং ACL শুধুমাত্র তখনই সম্ভব হতে পারে যদি ডোমেনটি এই ধরনের অনুমতি দেওয়ার জন্য কনফিগার করা থাকে (যেমন যদি G Suite ডোমেনের জন্য ডোমেনের বাইরে শেয়ারিং সক্ষম করা থাকে, ইত্যাদি)।
API ব্যবহার করে একটি 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 টি আনুন, ইচ্ছামত অনুমতিটি পরিবর্তন করুন, এবং তারপর সার্ভারে ACL পরিবর্তন করতে AclEntry এর update() পদ্ধতিটি কল করুন।
এই উদাহরণটি 'Sharing a site' বিভাগ থেকে আমাদের পূর্ববর্তী 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);
ETags সম্পর্কে আরও তথ্যের জন্য, Google Data APIs রেফারেন্স গাইড দেখুন।
শেয়ার করার অনুমতিগুলি সরানো হচ্ছে
শেয়ারিং পারমিশন অপসারণ করতে, প্রথমে AclEntry পুনরুদ্ধার করুন, তারপর এর delete() পদ্ধতিটি কল করুন:
aclEntry.delete(); // Could also use the client's delete method // client.delete(new URL(aclEntry.getEditLink().getHref()), aclEntry);
ETags সম্পর্কে আরও তথ্যের জন্য, Google Data APIs রেফারেন্স গাইড দেখুন।
বিশেষ বিষয়
আবার একটি ফিড বা এন্ট্রি পুনরুদ্ধার করা হচ্ছে
যদি আপনি এমন কোনও ফিড বা এন্ট্রি পুনরুদ্ধার করতে চান যা আপনি আগে পুনরুদ্ধার করেছেন, তাহলে সার্ভারকে তালিকা বা এন্ট্রিটি শুধুমাত্র তখনই পাঠাতে বলার মাধ্যমে দক্ষতা উন্নত করতে পারেন যদি আপনি শেষবার পুনরুদ্ধার করার পর থেকে এটি পরিবর্তিত হয়ে থাকে।
এই ধরণের শর্তসাপেক্ষ পুনরুদ্ধার করার জন্য, getFeed() এবং getEntry() উভয় পদ্ধতিই একটি অতিরিক্ত আর্গুমেন্ট প্রদান করে যা If-Modified-Since হেডারের জন্য একটি ETag মান বা একটি DateTime অবজেক্ট গ্রহণ করে। আপনি entry.getEtag() থেকে একটি এন্ট্রির etag অ্যাক্সেস করতে পারেন।
এই উদাহরণটি একটি কন্টেন্ট ওয়েবপেজ এন্ট্রির জন্য একটি শর্তসাপেক্ষ পুনরুদ্ধার করে:
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 ব্যতিক্রম প্রদান করবে।
যদি ETag গুলি মিল না করে, তাহলে শেষবার অনুরোধ করার পর থেকে আইটেমটি পরিবর্তন করা হয়েছে এবং সার্ভার আইটেমটি ফেরত দেবে।
ETags সম্পর্কে আরও তথ্যের জন্য, Google Data APIs রেফারেন্স গাইড দেখুন।