জাভা ভাষা সংক্রান্ত নির্দেশিকা

গুরুত্বপূর্ণ: এই ডকুমেন্টটি ২০১২ সালের আগে লেখা হয়েছে। এই ডকুমেন্টে বর্ণিত অথেন্টিকেশন বিকল্পগুলি (OAuth 1.0, AuthSub এবং ClientLogin) ২০ এপ্রিল, ২০১২ থেকে অফিসিয়ালি বাতিল করা হয়েছে এবং আর উপলভ্য নেই। আমরা আপনাকে যত তাড়াতাড়ি সম্ভব OAuth 2.0-এ মাইগ্রেট করার জন্য উৎসাহিত করি।

Google Sites Data API, ক্লায়েন্ট অ্যাপ্লিকেশনকে Google সাইটের মধ্যে কন্টেন্ট অ্যাক্সেস, প্রকাশ ও পরিবর্তন করতে দেয়। এছাড়াও, আপনার ক্লায়েন্ট অ্যাপ্লিকেশন সাম্প্রতিক অ্যাক্টিভিটির একটি তালিকা অনুরোধ করতে, রিভিশন ইতিহাস ফেচ করতে এবং অ্যাটাচমেন্ট ডাউনলোড করতে পারে।

Sites Data API-এর ক্ষমতা সম্পর্কে কিছু ব্যাকগ্রাউন্ড তথ্য প্রদান করা ছাড়াও, এই নির্দেশিকা Java ক্লায়েন্ট লাইব্রেরি ব্যবহার করে API-এর সাথে ইন্টার‍্যাক্ট করার উদাহরণ প্রদান করে। ক্লায়েন্ট লাইব্রেরি সেট-আপ করার ব্যাপারে সাহায্য পেতে, Google Data Java ক্লায়েন্ট লাইব্রেরির সাথে শুরু করা দেখুন। ক্লাসিক Sites API-এর সাথে ইন্টার‍্যাক্ট করার জন্য Java ক্লায়েন্ট লাইব্রেরির ব্যবহৃত অন্তর্নিহিত প্রোটোকল সম্পর্কে আরও জানতে চাইলে, প্রোটোকল গাইড দেখুন।

দর্শক

এই ডকুমেন্ট সেইসব ডেভেলপারদের জন্য যারা Google Data Java ক্লায়েন্ট লাইব্রেরি ব্যবহার করে Google Sites-এর সাথে ইন্টার‍্যাক্ট করে এমন ক্লায়েন্ট অ্যাপ্লিকেশন লিখতে চান।

শুরু করা

Google Sites যাচাইকরণের জন্য Google অ্যাকাউন্ট বা G Suite অ্যাকাউন্ট ব্যবহার করে। আপনার আগে থেকেই অ্যাকাউন্ট থাকলে, আপনি একদম রেডি। অন্যথায়, আপনি নতুন অ্যাকাউন্ট তৈরি করতে পারবেন।

লাইব্রেরি ইনস্টল করা

ক্লায়েন্ট লাইব্রেরি সেট-আপ ও ইনস্টল করার ব্যাপারে সাহায্য পেতে, Google Data Java ক্লায়েন্ট লাইব্রেরি ব্যবহার শুরু করা দেখুন। আপনি Eclipse ব্যবহার করলে, সেই নিবন্ধে আরও ব্যাখ্যা করা হয়েছে যে Google Data APIs Eclipse প্লাগ-ইন ব্যবহার করে কীভাবে আপনার প্রোজেক্ট সেট-আপ করবেন। শুরু করার জন্য আপনার যা যা প্রয়োজন:

  1. Java 1.5 বা তার পরের যেকোনও ভার্সন ইনস্টল করুন
  2. ক্লায়েন্ট লাইব্রেরি ডাউনলোড করুন (gdata-src.java.zip-এর লেটেস্ট ভার্সন)
  3. ডিপেন্ডেন্সির তালিকা ডাউনলোড করুন
  4. স্যাম্পেল অ্যাপ্লিকেশন (gdata-samples.java.zip-এর লেটেস্ট ভার্সন) ডাউনলোড করুন

.jars ইনস্টল করার পরে, আপনাকে নিজের প্রোজেক্টে নিম্নলিখিত বিষয়গুলি যোগ করতে হবে:

  1. java/lib/gdata-sites-2.0.jar - এখানে ভার্সন ২.০ বলতে ক্লাসিক Sites API-এর ভার্সন ১.৪ বোঝানো হয়েছে।
  2. java/lib/gdata-core-1.0.jar
  3. java/lib/gdata-client-1.0.jar
  4. java/lib/gdata-spreadsheet-3.0.jar (তালিকা পৃষ্ঠা / তালিকার আইটেম নিয়ে কাজ করলে)

এছাড়াও, নিশ্চিত করুন যে আপনি ডিপেন্ডেন্সি জার (gdata-media-1.0.jar, mail.jar এবং google-collect....jar) অন্তর্ভুক্ত করেছেন।

স্যাম্পেল অ্যাপ্লিকেশন চালানো

gdata-samples.java.zip ডাউনলোডের /java/sample/sites সাবডিরেক্টরিতে একটি সম্পূর্ণ কার্যকরী স্যাম্পেল অ্যাপ্লিকেশন আছে। এছাড়াও, সোর্স ট্যাব থেকে অ্যাক্সেস করা SVN রিপোজিটরিতে /trunk/java/sample/sites/ লিঙ্কে সোর্সটি উপলভ্য। SitesDemo.java ব্যবহারকারীকে একাধিক অপারেশন পারফর্ম করার অনুমতি দেয় যা ক্লাসিক 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. লগ করার উদ্দেশ্যে এই প্যারামিটার ব্যবহার করা হয়।

মনে রাখবেন: এই নির্দেশিকার বাকি অংশে ধরে নেওয়া হয়েছে যে আপনি SitesService ভেরিয়েবলে client তৈরি করেছেন।

ক্লাসিক Sites API-তে প্রমাণীকরণ করা

পাবলিক বা ব্যক্তিগত ফিড, যেকোনওটির সাথে কাজ করার জন্য Java ক্লায়েন্ট লাইব্রেরি ব্যবহার করা যেতে পারে। Sites ডেটা API, Sites-এর অনুমতি এবং আপনি যে অপারেশন পারফর্ম করার চেষ্টা করছেন তার উপর নির্ভর করে ব্যক্তিগত ও সর্বজনীন ফিডে অ্যাক্সেস প্রদান করে। যেমন, আপনি হয়ত কোনও পাবলিক সাইটের কন্টেন্ট ফিড পড়তে পারবেন, কিন্তু তাতে আপডেট করতে পারবেন না - এর জন্য একটি যাচাই করা ক্লায়েন্ট প্রয়োজন। এটি ClientLogin ইউজারনেম/পাসওয়ার্ড যাচাইকরণ, AuthSub বা OAuth-এর মাধ্যমে করা যেতে পারে।

AuthSub, OAuth ও ClientLogin সম্পর্কে আরও জানতে Google Data API-এর প্রমাণীকরণ সংক্রান্ত ওভারভিউ দেখুন।

পরামর্শ: API, SSL (HTTPS) মেনে চলে। আপনি AuthSub/OAuth ব্যবহার করলে, SSL-এর মাধ্যমে ফিডের অনুরোধ করতে https://sites.google.com/feeds/-এর স্কোপ নির্দিষ্ট করতে ভুলবেন না। এছাড়াও, মনে রাখবেন যে G Suite ডোমেনের জন্য, API অ্যাডমিনিস্ট্রেটিভ কন্ট্রোল প্যানেলে 'SSL প্রয়োজন' সেটিং মেনে চলে। 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 Data API ক্লায়েন্ট লাইব্রেরির সাথে AuthSub ব্যবহার করা দেখুন।

সেশন টোকেন সম্পর্কে তথ্য ফিরিয়ে আনা

Google Data API ক্লায়েন্ট লাইব্রেরির সাথে AuthSub ব্যবহার করা দেখুন।

সেশন টোকেন প্রত্যাহার করা

Google Data API ক্লায়েন্ট লাইব্রেরির সাথে AuthSub ব্যবহার করা দেখুন।

ইনস্টল করা/মোবাইল অ্যাপ্লিকেশনের জন্য OAuth

AuthSub-এর বিকল্প হিসেবে OAuth ব্যবহার করা যেতে পারে এবং এটি ওয়েব অ্যাপ্লিকেশনের জন্য তৈরি করা হয়েছে। OAuth হল AuthSub-এর সুরক্ষিত ও রেজিস্টার করা মোড ব্যবহারের মতো যেখানে সমস্ত ডেটা অনুরোধ ডিজিটালভাবে সাইন করতে হবে এবং আপনাকে ডোমেন রেজিস্টার করতে হবে।

আপনার ইনস্টল করা অ্যাপ্লিকেশনে OAuth যোগ করার নির্দেশাবলী দেখুন

অনুরোধ টোকেন ফেচ করা

Google Data API ক্লায়েন্ট লাইব্রেরির সাথে OAuth ব্যবহার করা দেখুন।

অনুরোধ টোকেন অনুমোদন করা

Google Data API ক্লায়েন্ট লাইব্রেরির সাথে OAuth ব্যবহার করা দেখুন।

অ্যাক্সেস টোকেনে আপগ্রেড করা

Google Data API ক্লায়েন্ট লাইব্রেরির সাথে OAuth ব্যবহার করা দেখুন।

ইনস্টল করা/মোবাইল অ্যাপ্লিকেশনের জন্য ClientLogin

ইনস্টল করা বা মোবাইল অ্যাপ্লিকেশনকে ClientLogin ব্যবহার করতে হবে, যেগুলিকে Google অ্যাকাউন্টে ব্যবহারকারীদের যাচাই করতে হবে। প্রথমবার চালানোর সময়, আপনার অ্যাপ্লিকেশন ব্যবহারকারীকে তার ইউজারনেম/পাসওয়ার্ড দেওয়ার জন্য প্রম্পট করে। পরবর্তী অনুরোধে, যাচাইকরণ টোকেন রেফারেন্স করা হয়।

আপনার ইনস্টল করা অ্যাপ্লিকেশনে ClientLogin যোগ করার নির্দেশাবলী দেখুন

ClientLogin ব্যবহার করতে, SitesService অবজেক্টের setUserCredentials() মেথড ইনভোক করুন, যা GoogleService থেকে ইনহেরিট করা হয়েছে। আপনার ক্লায়েন্ট যে ব্যবহারকারীর হয়ে অনুরোধ করছে তার ইমেল আইডি ও পাসওয়ার্ড উল্লেখ করুন। যেমন:

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

পরামর্শ: আপনার অ্যাপ্লিকেশন প্রথমবার ব্যবহারকারীকে সফলভাবে যাচাই করার পরে, আপনার ডেটাবেসে যাচাইকরণ টোকেন সেভ করুন যাতে পরে ব্যবহার করা যায়। আপনার অ্যাপ্লিকেশন যতবার রান করানো হবে, ততবার ব্যবহারকারীকে তার পাসওয়ার্ড দেওয়ার জন্য প্রম্পট করার প্রয়োজন নেই। আরও তথ্যের জন্য কোনও অনুমোদন টোকেন রিকল করা দেখুন।

আপনার Java অ্যাপ্লিকেশনে ClientLogin ব্যবহার করা সম্পর্কে আরও তথ্যের জন্য, Google Data API ক্লায়েন্ট লাইব্রেরির সাথে ClientLogin ব্যবহার করা দেখুন।

স্ক্রিনের উপরে ফিরুন

সাইট ফিড

সাইট ফিড ব্যবহার করে ব্যবহারকারীর মালিকানাধীন বা দেখার অনুমতি আছে এমন Google Sites-এর তালিকা তৈরি করা যেতে পারে। এছাড়াও, আগে থেকে থাকা সাইটের নাম পরিবর্তন করতে এটি ব্যবহার করা যেতে পারে। এছাড়াও, G Suite ডোমেনের ক্ষেত্রে, এটি সম্পূর্ণ সাইট তৈরি এবং/অথবা কপি করতে ব্যবহার করা যেতে পারে।

তালিকাভুক্ত করার সাইট

সাইট ফিড কোয়েরি করতে, সাইট ফিড URL-এ একটি HTTP 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-এর অধীনে একটি নতুন সাইট তৈরি করবে। তাই, সাইটের 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();

ওয়েব অ্যাড্রেস ম্যাপিং

ওয়েব অ্যাড্রেস ম্যাপিংয়ের মাধ্যমে 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());
  }
}

আগে থেকে থাকা ম্যাপিং links হিসেবে rel='webAddressMapping' সহ দেখানো হবে। যেমন, উপরের উদাহরণে সাইটের দিকে নির্দেশ করে এমন তিনটি webAddressMappings আছে http://sites.google.com/site/myOtherTestSite।

ওয়েব অ্যাড্রেস ম্যাপিং পরিবর্তন করা

মনে রাখবেন: ওয়েব অ্যাড্রেস ম্যাপিংয়ের সাথে কাজ করার সময় সব GET/POST/PUT অপারেশনকে with-mappings=true প্যারামিটার নির্দিষ্ট করতে হবে। প্যারামিটার না থাকলে, সাইট এন্ট্রি (GET) থেকে webAddressMappings রিটার্ন করা হবে না অথবা কোনও এন্ট্রি থেকে ম্যাপিং আপডেট/সরানোর (PUT) সময় বিবেচনা করা হবে না।

ম্যাপিং যোগ করতে, আপডেট করতে বা মুছে দিতে, নতুন সাইট তৈরি করার সময় বা সাইটের মেটাডেটা আপডেট করার সময় এই ধরনের লিঙ্ক নির্দিষ্ট করুন, পরিবর্তন করুন বা সরিয়ে দিন। সাইট ফিড URI-তে 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();

মনে রাখবেন, সাইট তৈরি/কপি করার সময়ও ওয়েব অ্যাড্রেস ম্যাপিং নির্দিষ্ট করা যেতে পারে।

স্ক্রিনের উপরে ফিরুন

অ্যাক্টিভিটি ফিড

অ্যাক্টিভিটি ফিড ফেচ করে আপনি কোনও সাইটের সাম্প্রতিক অ্যাক্টিভিটি (পরিবর্তন) ফেচ করতে পারবেন। অ্যাক্টিভিটি ফিডের প্রতিটি এন্ট্রি সাইটে করা পরিবর্তন সংক্রান্ত তথ্য দেখায়।

অ্যাক্টিভিটি ফিড কোয়েরি করতে, অ্যাক্টিভিটি ফিড URL-এ একটি HTTP 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 পরিষেবায় যাচাইকরণ দেখুন।

স্ক্রিনের উপরে ফিরুন

রিভিশন ফিড

যেকোনও কন্টেন্ট এন্ট্রির জন্য রিভিশন ইতিহাস পেতে, এন্ট্রির রিভিশন লিঙ্কে একটি 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 টোকেন ব্যবহার করে যাচাই করতে হবে। Sites পরিষেবায় যাচাইকরণ দেখুন।

স্ক্রিনের উপরে ফিরুন

কন্টেন্ট ফিড

কন্টেন্ট ফিড ফিরিয়ে আনা

কন্টেন্ট ফিডে কোনও সাইটের লেটেস্ট কন্টেন্ট তালিকাভুক্ত থাকে। HTTP GET পাঠিয়ে কন্টেন্ট ফিডের URL অ্যাক্সেস করা যেতে পারে:

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

পাথ ব্যবহার করে পৃষ্ঠা ফিরিয়ে আনা

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

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 পাথের অধীনে আইটেম/পৃষ্ঠা তৈরি করা

ডিফল্ট হিসেবে, আগের উদাহরণটি URL http://sites.google.com/site/siteName/new-webpage-title-এর অধীনে তৈরি করা হবে এবং এটির পৃষ্ঠার শিরোনাম হবে 'নতুন ওয়েবপেজের নাম'। অর্থাৎ, URL-এর জন্য <atom:title>-কে new-webpage-title-এ নর্মালাইজ করা হয়। কোনও পৃষ্ঠার URL পাথ কাস্টমাইজ করতে, আপনি <sites:pageName> এলিমেন্ট সেট করতে পারবেন।

এই উদাহরণে, 'ফাইল স্টোরেজ' শিরোনাম সহ একটি নতুন filecabinet পৃষ্ঠা তৈরি করা হয়েছে, কিন্তু <sites:pageName> এলিমেন্ট নির্দিষ্ট করার মাধ্যমে http://sites.google.com/site/siteName/files URL-এর অধীনে পৃষ্ঠাটি তৈরি করা হয়েছে (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());

কোনও পৃষ্ঠার URL পাথের নাম দেওয়ার জন্য সার্ভার নিম্নলিখিত অগ্রাধিকার সংক্রান্ত নিয়ম ব্যবহার করে:

  1. <sites:pageName>, যদি থাকে। a-z, A-Z, 0-9, -, _ শর্ত পূরণ করতে হবে।
  2. <atom:title>, pageName না থাকলে এটি শূন্য হলে চলবে না। '-' এবং এর জন্য হোয়াইটস্পেস ট্রিম ও কোলাপ্স করা এবং a-z, A-Z, 0-9, -, _-এর সাথে ম্যাচ না করা অক্ষর সরিয়ে দেওয়া হল নরমালাইজেশন।

সাবপেজ তৈরি করা

মূল পৃষ্ঠার অধীনে উপপৃষ্ঠা (চাইল্ড) তৈরি করতে, আপনাকে অবশ্যই এন্ট্রিতে মূল পৃষ্ঠার লিঙ্ক সেট করতে হবে। লিঙ্কের href অ্যাট্রিবিউটটি প্যারেন্ট নোডের সেল্ফ লিঙ্কে।

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

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

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

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

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

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

উপরের উদাহরণটি ব্যবহারকারীর কন্টেন্ট ফিডে পাওয়া প্রথম ঘোষণা পৃষ্ঠার অধীনে একটি নতুন announcement তৈরি করে। ঘোষণার শীর্ষক "পার্টি!!" এবং কন্টেন্ট "আমার বাড়িতে, এই উইকেন্ডে" হিসেবে সেট করা আছে।

পৃষ্ঠার টেমপ্লেট

পৃষ্ঠার টেমপ্লেট তৈরি করা

নতুন আইটেম/পৃষ্ঠা তৈরি করা এবং সাবপেজ তৈরি করার প্রসেস একই। পার্থক্য হল, category-এর সাথে 'http://schemas.google.com/g/2005#template' এবং 'template' শব্দ ও লেবেল যোগ করা হয়েছে যা যথাক্রমে সেট করা আছে।

এই উদাহরণে একটি নতুন webpage টেমপ্লেট তৈরি করা হয়েছে।

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

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

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

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

টেমপ্লেট থেকে পৃষ্ঠা তৈরি করা

পেজ টেমপ্লেট তৈরি করার মতোই, আপনি কোনও টেমপ্লেট থেকে নতুন পেজ ইনস্ট্যানশিয়েট করতে পারেন। এর জন্য, পেজ টেমপ্লেটের সেল্ফ লিঙ্কের দিকে পয়েন্ট করা <link>-এর মধ্যে rel='http://schemas.google.com/sites/2008#template' যোগ করুন।

এই উদাহরণে একটি নতুন filecabinet টেমপ্লেট তৈরি করা হয়েছে এবং তারপরে সেই টেমপ্লেট থেকে একটি নতুন filecabinet পৃষ্ঠা ইনস্ট্যানশিয়েট করা হয়েছে।

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

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

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

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

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

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

মনে রাখবেন: টেমপ্লেটে <category> উল্লেখ করা থাকলেও, আপনার এন্ট্রিতে এটি যোগ করতে হবে। এছাড়াও, মনে রাখবেন, আপনি <content> এলিমেন্ট যোগ করলে, সার্ভার সেটি বাতিল করে দেবে।

ফাইল আপলোড করা হচ্ছে

Google Sites-এর মতোই, API ফাইল ক্যাবিনেট পৃষ্ঠা বা প্যারেন্ট পৃষ্ঠায় অ্যাটাচমেন্ট আপলোড করার সুবিধা দেয়।

অভিভাবকের কাছে অ্যাটাচমেন্ট আপলোড করতে, কন্টেন্ট ফিড URL-এ HTTP POST অনুরোধ পাঠান:

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

সব ধরনের অ্যাটাচমেন্টকে মূল পৃষ্ঠায় আপলোড করতে হবে। তাই, আপনি যে AttachmentEntry বা WebAttachmentEntry অবজেক্ট আপলোড করার চেষ্টা করছেন সেটিতে একটি প্যারেন্ট লিঙ্ক সেট করুন। আরও তথ্যের জন্য সাবপেজ তৈরি করা দেখুন।

অ্যাটাচমেন্ট আপলোড করা হচ্ছে

এই উদাহরণে, ব্যবহারকারীর কন্টেন্ট ফিডে পাওয়া প্রথম FileCabinetPageEntry-এ একটি PDF ফাইল আপলোড করা হয়েছে। 'শুরু করা যাক' শীর্ষক এবং 'এইচআর প্যাকেট' (ঐচ্ছিক) বিবরণ সহ অ্যাটাচমেন্ট তৈরি করা হয়।

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

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

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

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

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

আপলোড সফল হলে, attachment-এ তৈরি করা অ্যাটাচমেন্ট এন্ট্রির একটি কপি থাকবে।

ফোল্ডারে অ্যাটাচমেন্ট আপলোড করা

FileCabinetPageEntry-এ আগে থেকে থাকা ফোল্ডারে অ্যাটাচমেন্ট আপলোড করতে, ফোল্ডারের নামে সেট করা 'term' অ্যাট্রিবিউট সহ একটি বিভাগ যোগ করুন। যেমন, uploadAttachment()-এ এই লাইনটি যোগ করুন:

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

ওয়েব অ্যাটাচমেন্ট

ওয়েব অ্যাটাচমেন্ট হল বিশেষ ধরনের অ্যাটাচমেন্ট। মূলত, এগুলি হল ওয়েবে থাকা অন্যান্য ফাইলের লিঙ্ক যেগুলি আপনি নিজের ফাইলক্যাবিনেট লিস্টে যোগ করতে পারেন। এই ফিচারটি Google Sites UI-তে 'URL-এর মাধ্যমে ফাইল যোগ করুন' আপলোড পদ্ধতির মতো।

মনে রাখবেন: ওয়েব অ্যাটাচমেন্ট শুধুমাত্র ফাইল ক্যাবিনেটের অধীনে তৈরি করা যায়। এগুলি অন্য ধরনের পৃষ্ঠায় আপলোড করা যায় না।

এই উদাহরণ ব্যবহারকারীর কন্টেন্ট ফিডে পাওয়া প্রথম 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'-এ থাকা ছবিটির দিকে নির্দেশ করে।

স্ক্রিনের উপরে ফিরুন



কন্টেন্ট আপডেট করা

কোনও পৃষ্ঠার মেটাডেটা এবং/অথবা HTML কন্টেন্ট আপডেট করা

BaseContentEntry ধরনের যেকোনও মেটাডেটা (নাম, pageName ইত্যাদি) ও পৃষ্ঠার কন্টেন্ট এন্ট্রি update() পদ্ধতি ব্যবহার করে এডিট করা যেতে পারে। এর ফলে এন্ট্রির edit লিঙ্কে একটি HTTP PUT অনুরোধ পাঠানো হবে।

নিচে, নিম্নলিখিত পরিবর্তন সহ ListPageEntry আপডেট করার একটি উদাহরণ দেওয়া হল:

  • নাম পরিবর্তন করে 'আপডেট করা নাম' করা হয়েছে
  • পৃষ্ঠার HTML কন্টেন্ট আপডেট করে '<p>Updated HTML Content</p>' করা হয়েছে
  • তালিকার প্রথম কলামের শিরোনাম পরিবর্তন করে "মালিক" করা হয়েছে
ContentFeed contentFeed = client.getFeed(
    new URL(buildContentFeedUrl() + "?kind=listpage"), ContentFeed.class);
ListPageEntry listPage = contentFeed.getEntries(ListPageEntry.class).get(0); // Update first list page found

// Update title
listPage.setTitle(new PlainTextConstruct("Updated Title"));

// Update HTML content
XmlBlob xml = new XmlBlob();
xml.setBlob("<p>Updated HTML Content</p>");
listPage.setContent(new XhtmlTextConstruct(xml));

// Change first column's heading
listPage.getData().getColumns().get(0).setName("Owner");

// listPage.setPageName(new PageName("new-page-path"));  // You can also change the page's URL path

ListPageEntry updatedEntry = listPage.update();

System.out.println("ListPage updated!");

অ্যাটাচমেন্ট ফাইলের কন্টেন্ট আপডেট করা

AttachmentEntry-এর জন্য, আপনি এন্ট্রি MediaSource সেট করে এবং তারপরে এন্ট্রির updateMedia(boolean) পদ্ধতি ব্যবহার করে কন্টেন্ট আপডেট করতে পারেন।

এই উদাহরণটি আগে থেকে থাকা অ্যাটাচমেন্টের কন্টেন্ট আপডেট করবে:

public AttachmentEntry updateFile(AttachmentEntry entry, File newFile)
    throws IOException, ServiceException {
  // See Uploading Attachments for the definition of mediaTypes.
  entry.setMediaSource(new MediaFileSource(newFile, mediaTypes.getContentType(newFile)));
  return entry.updateMedia(false);
}

এই উদাহরণটি এন্ট্রির edit-media লিঙ্কে একটি 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");

স্ক্রিনের উপরে ফিরুন



কন্টেন্ট মুছে দেওয়া

Google Site থেকে কোনও পৃষ্ঠা বা আইটেম সরাতে, প্রথমে কন্টেন্ট এন্ট্রি রিট্রিভ করুন, তারপর এন্ট্রির delete() কল করুন।

entry.delete();

এছাড়াও, আপনি এন্ট্রির edit লিঙ্ক ও ETag ভ্যালু পাস করে পরিষেবা ক্লাসের delete() পদ্ধতি ব্যবহার করতে পারবেন:

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 ফিড

শেয়ারিং অনুমতি (ACL) সম্পর্কে এক ঝলকে

ACL ফিডে প্রতিটি ACL এন্ট্রি কোনও নির্দিষ্ট এন্টিটির অ্যাক্সেস রোলকে দেখায়, সেটি কোনও ব্যবহারকারী, ব্যবহারকারীর গ্রুপ, ডোমেন বা ডিফল্ট অ্যাক্সেস (যা হল একটি পাবলিক সাইট) হতে পারে। শুধুমাত্র স্পষ্ট অ্যাক্সেস থাকা এন্টিটির জন্য এন্ট্রি দেখানো হবে - Google Sites UI-এর শেয়ারিং স্ক্রিনে "অ্যাক্সেস থাকা লোকজন" প্যানেলে প্রতিটি ইমেল আইডির জন্য একটি করে এন্ট্রি দেখানো হবে। তাই, ডোমেন অ্যাডমিনদের দেখানো হবে না, এমনকি তাদের কাছে কোনও সাইটের ইমপ্লিসিট অ্যাক্সেস থাকলেও।

ভূমিকা

কোনও এন্টিটি যে অ্যাক্সেস লেভেল পেতে পারে, রোল এলিমেন্ট তা বোঝায়। gAcl:role এলিমেন্টের চারটি সম্ভাব্য ভ্যালু আছে:

  • পাঠক — একজন দর্শক (শুধুমাত্র পড়ার অ্যাক্সেসের সমতুল্য)।
  • লেখক — একজন সহযোগী (পড়া/লেখার অ্যাক্সেসের সমতুল্য)।
  • মালিক — সাধারণত সাইট অ্যাডমিন (পড়া/লেখার অ্যাক্সেসের সমতুল্য)।

দূরবীন

স্কোপ এলিমেন্ট সেই এন্টিটিকে বোঝায় যার এই অ্যাক্সেস লেভেল আছে। gAcl:scope এলিমেন্টের চারটি সম্ভাব্য ধরন আছে:

  • user — ইমেল আইডি ভ্যালু, যেমন "user@gmail.com"।
  • গ্রুপ — Google Group ইমেল আইডি, যেমন "group@domain.com"।
  • domain — একটি G Suite ডোমেন নাম, যেমন "domain.com"।
  • default — "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 Site শেয়ার করতে, আপনার ক্লায়েন্টকে একটি নতুন 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() পদ্ধতি কল করুন।

এই উদাহরণটি সাইট শেয়ার করা বিভাগ থেকে আমাদের আগের 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 API রেফারেন্স গাইড দেখুন।

শেয়ার করার অনুমতি সরানো

শেয়ারিং অনুমতি সরাতে, প্রথমে AclEntry রিট্রিভ করুন, তারপর এর delete() মেথড কল করুন:

aclEntry.delete();

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

ETags সম্পর্কে আরও তথ্য পেতে, 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 রিটার্ন করে অথবা একটি ব্যতিক্রম তৈরি হয়।

ETag না মিললে, আপনি শেষবার অনুরোধ করার পর আইটেমটি পরিবর্তন করা হয়েছে এবং সার্ভার আইটেমটি রিটার্ন করে।

ETag সম্পর্কে আরও জানতে, Google Data API রেফারেন্স গাইড দেখুন।

স্ক্রিনের উপরে ফিরুন