Python গাইড

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

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

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

দর্শক

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

শুরু করা

Python ক্লায়েন্ট লাইব্রেরি ব্যবহার করতে, আপনার Python 2.2+ এবং DependencyModules উইকি পৃষ্ঠায় তালিকাভুক্ত মডিউল লাগবে। ক্লায়েন্ট লাইব্রেরি ডাউনলোড করার পরে, ক্লায়েন্ট ইনস্টল ও ব্যবহার করার ব্যাপারে সাহায্য পেতে Google Data Python লাইব্রেরি ব্যবহার শুরু করা দেখুন।

স্যাম্পেল চালানো হচ্ছে

সম্পূর্ণ কার্যকর স্যাম্পেলটি প্রোজেক্টের Mercurial রিপোজিটরির samples/sites সাবডিরেক্টরিতে আছে (/samples/sites/sites_example.py)।

নিচে উল্লেখ করা পদ্ধতিতে উদাহরণটি রান করান:

python sites_example.py
# or
python sites_example.py --site [sitename] --domain [domain or "site"] --debug [prints debug info if set]

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

এই নির্দেশিকায় দেওয়া উদাহরণগুলি আপনার কোডে যোগ করতে, নিম্নলিখিত import বিবৃতিগুলি প্রয়োজন:

import atom.data
import gdata.sites.client
import gdata.sites.data

এছাড়াও, আপনাকে একটি SitesClient অবজেক্ট সেট-আপ করতে হবে, যা ক্লাসিক Sites API-এর সাথে ক্লায়েন্ট কানেকশনকে উপস্থাপন করে। আপনার অ্যাপ্লিকেশনের নাম এবং সাইটের ওয়েবস্পেসের নাম (এর URL থেকে) পাস করান:

client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1', site='yourSiteName')

G Suite ডোমেনে হোস্ট করা কোনও সাইটের সাথে কাজ করতে, domain প্যারামিটার ব্যবহার করে ডোমেন সেট করুন:

client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1', site='yourSiteName', domain='example.com')

উপরের স্নিপেটে, source আর্গুমেন্টটি ঐচ্ছিক হলেও লগ করার উদ্দেশ্যে এটি ব্যবহার করার জন্য সাজেস্ট করা হয়। এটি এই ফর্ম্যাট মেনে চলবে: company-applicationname-version

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

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

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

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

ওয়েব অ্যাপ্লিকেশনের জন্য AuthSub

যেসব ক্লায়েন্ট অ্যাপ্লিকেশনকে Google বা G Suite অ্যাকাউন্টে ব্যবহারকারীদের যাচাই করতে হয়, সেগুলিকে ওয়েব অ্যাপ্লিকেশনের জন্য AuthSub যাচাইকরণ ব্যবহার করতে হবে। Google Sites ব্যবহারকারীর ইউজারনেম ও পাসওয়ার্ডে অপারেটরের অ্যাক্সেস থাকার প্রয়োজন নেই - শুধু একটি AuthSub টোকেন প্রয়োজন।

আপনার ওয়েব অ্যাপ্লিকেশনে AuthSub যোগ করার নির্দেশাবলী দেখুন

একবার ব্যবহার করা যায় এমন টোকেনের জন্য অনুরোধ করা

ব্যবহারকারী প্রথমবার আপনার অ্যাপ্লিকেশন ভিজিট করলে, তাকে যাচাইকরণ করতে হবে। সাধারণত, ডেভেলপাররা কিছু টেক্সট ও একটি লিঙ্ক প্রিন্ট করেন যা ব্যবহারকারীকে AuthSub অনুমোদন পৃষ্ঠায় নিয়ে যায়। এর মাধ্যমে ব্যবহারকারীকে যাচাই করা হয় এবং তার ডকুমেন্ট অ্যাক্সেস করার অনুরোধ করা হয়। Google Data Python ক্লায়েন্ট লাইব্রেরি এই URL জেনারেট করার জন্য, generate_auth_sub_url() একটি ফাংশন প্রদান করে। নিচের কোডটি AuthSubRequest পৃষ্ঠায় একটি লিঙ্ক সেট-আপ করে।

import gdata.gauth

def GetAuthSubUrl():
  next = 'http://www.example.com/myapp.py'
  scopes = ['https://sites.google.com/feeds/']
  secure = True
  session = True
  return gdata.gauth.generate_auth_sub_url(next, scopes, secure=secure, session=session)

print '<a href="%s">Login to your Google account</a>' % GetAuthSubUrl()

আপনি যদি G Suite-এ হোস্ট করা ডোমেনে ব্যবহারকারীদের যাচাই করতে চান, তাহলে generate_auth_sub_url()-এ ডোমেনের নাম দিন:

def GetAuthSubUrl():
  domain = 'example.com'
  next = 'http://www.example.com/myapp.py'
  scopes = ['https://sites.google.com/feeds/']
  secure = True
  session = True
  return gdata.gauth.generate_auth_sub_url(next, scopes, secure=secure, session=session, domain=domain)

generate_auth_sub_url() পদ্ধতিতে একাধিক প্যারামিটার (যা AuthSubRequest হ্যান্ডলারের ব্যবহৃত কোয়েরি প্যারামিটারের সাথে সম্পর্কিত) ব্যবহার করা হয়:

  • পরবর্তী URL — ব্যবহারকারী তার অ্যাকাউন্টে লগ-ইন করে অ্যাক্সেস দেওয়ার পরে Google যে URL-এ রিডাইরেক্ট করবে http://www.example.com/myapp.py উপরের উদাহরণে
  • স্কোপ — https://sites.google.com/feeds/
  • secure, টোকেনটি নিরাপদ ও রেজিস্টার করা মোডে ব্যবহার করা হবে কিনা তা নির্দেশ করে এমন একটি বুলিয়ান; True উপরের উদাহরণে
  • সেশন, একটি দ্বিতীয় বুলিয়ান যা নির্দেশ করে যে সিঙ্গেল-ইউজ টোকেন পরে সেশন টোকেনের সাথে এক্সচেঞ্জ করা হবে কিনা; True উপরের উদাহরণে

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

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

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

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

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

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

পরামর্শ: আপনার অ্যাপ্লিকেশন সফলভাবে দীর্ঘমেয়াদী সেশন টোকেন পেয়ে গেলে, পরে ব্যবহারের জন্য আপনার ডেটাবেসে সেই টোকেনটি সেভ করে রাখুন। আপনার অ্যাপ্লিকেশন প্রতিবার চালানোর সময় ব্যবহারকারীকে AuthSub-এ ফেরত পাঠানোর প্রয়োজন নেই। ক্লায়েন্টে আগে থেকে থাকা টোকেন সেট করতে client.auth_token = gdata.gauth.AuthSubToken(TOKEN_STR) ব্যবহার করুন।

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

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

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

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

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

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

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

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

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

পরামর্শ: আপনার অ্যাপ্লিকেশন OAuth অ্যাক্সেস টোকেন পেয়ে গেলে, সেটি আপনার ডেটাবেসে সেভ করে রাখুন যাতে পরে ব্যবহার করা যায়। আপনার অ্যাপ্লিকেশন প্রতিবার চালানোর সময় ব্যবহারকারীকে OAuth-এর মাধ্যমে ফিরিয়ে আনার প্রয়োজন নেই। ক্লায়েন্টে আগে থেকে থাকা টোকেন সেট করতে client.auth_token = gdata.oauth.OAuthToken(TOKEN_STR, TOKEN_SECRET) ব্যবহার করুন।

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

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

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

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

client = gdata.sites.client.SitesClient(source='yourCo-yourAppName-v1')
client.ClientLogin('user@gmail.com', 'pa$$word', client.source);

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

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

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

সাইট ফিড

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

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

কোনও ব্যবহারকারীর অ্যাক্সেস আছে এমন সাইটের তালিকা তৈরি করতে, ক্লায়েন্টের GetSiteFeed() পদ্ধতি ব্যবহার করুন। এই পদ্ধতিতে একটি ঐচ্ছিক আর্গুমেন্ট, uri, ব্যবহার করা হয় যা আপনি বিকল্প সাইট ফিড URI নির্দিষ্ট করতে ব্যবহার করতে পারেন। সাধারণত, GetSiteFeed() ক্লায়েন্ট অবজেক্টে সেট করা সাইটের নাম ও ডোমেন ব্যবহার করে। আপনার ক্লায়েন্ট অবজেক্টে এইসব ভ্যালু সেট করা সম্পর্কে আরও তথ্য পেতে, শুরু করা বিভাগটি দেখুন।

এখানে যাচাই করা ব্যবহারকারীর সাইটের তালিকা পাওয়ার একটি উদাহরণ দেওয়া হল:

feed = client.GetSiteFeed()

for entry in feed.entry:
  print '%s (%s)' % (entry.title.text, entry.site_name.text)
  if entry.summary.text:
    print 'description: ' + entry.summary.text
  if entry.FindSourceLink():
    print 'this site was copied from site: ' + entry.FindSourceLink()
  print 'acl feed: %s\n' % entry.FindAclLink()
  print 'theme: ' + entry.theme.text

উপরের স্নিপেটটি সাইটের নাম, সাইটের নাম, যে সাইট থেকে এটি কপি করা হয়েছে এবং এর acl ফিড URI প্রিন্ট করে।

নতুন সাইট তৈরি করা

মনে রাখবেন: এই ফিচার শুধুমাত্র G Suite ডোমেনে উপলভ্য।

লাইব্রেরির CreateSite() মেথড কল করে নতুন সাইট প্রোভিশন করা যেতে পারে। GetSiteFeed() সহায়ক টুলের মতো, CreateSite()-ও একটি ঐচ্ছিক আর্গুমেন্ট, uri গ্রহণ করে, যা আপনি বিকল্প সাইট ফিড URI নির্দিষ্ট করতে ব্যবহার করতে পারেন (আপনার SitesClient অবজেক্টে সেট করা ডোমেন ছাড়া অন্য কোনও ডোমেনের অধীনে সাইট তৈরি করার ক্ষেত্রে)।

'স্লেট' থিম সহ একটি নতুন সাইট তৈরি করা এবং একটি নাম ও (ঐচ্ছিক) বিবরণ দেওয়ার উদাহরণ এখানে দেওয়া হল:

client.domain = 'example2.com'  # demonstrates creating a site under a different domain.

entry = client.CreateSite('Title For My Site', description='Site to hold precious memories', theme='slate')
print 'Site created! View it at: ' + entry.GetAlternateLink().href

উপরের অনুরোধটি G Suite ডোমেন example2.com-এর অধীনে একটি নতুন সাইট তৈরি করবে। তাই, সাইটের URL হবে https://sites.google.com/a/example2.com/title-for-my-site.

সাইট সফলভাবে তৈরি করা হলে, সার্ভার gdata.sites.data.SiteEntry একটি অবজেক্ট সহ উত্তর দেবে, যা সার্ভারের যোগ করা এলিমেন্ট দিয়ে পূরণ করা হবে: সাইটের লিঙ্ক, সাইটের ACL ফিডের লিঙ্ক, সাইটের নাম, শীর্ষক, সারসংক্ষেপ এবং আরও অনেক কিছু।

সাইট কপি করা

মনে রাখবেন: এই ফিচার শুধুমাত্র G Suite ডোমেনে উপলভ্য।

CreateSite() আগে থেকে থাকা সাইট কপি করার জন্যও ব্যবহার করা যেতে পারে। এটি করতে, source_site কীওয়ার্ড আর্গুমেন্ট পাস করুন। কপি করা যেকোনও সাইটে এই লিঙ্ক থাকবে, যা entry.FindSourceLink()-এর মাধ্যমে অ্যাক্সেস করা যাবে। নতুন সাইট তৈরি করা বিভাগে তৈরি করা সাইট ডুপ্লিকেট করার একটি উদাহরণ এখানে দেওয়া হল:

copied_site = client.CreateSite('Copy of Title For My Site', description='My Copy', source_site=entry.FindSourceLink())
print 'Site copied! View it at: ' + copied_site.GetAlternateLink().href

গুরুত্বপূর্ণ বিষয়:

  • যাচাই করা ব্যবহারকারী মালিকানাধীন শুধুমাত্র সেইসব সাইট ও সাইট টেমপ্লেট কপি করা যাবে।
  • এছাড়াও, সাইট টেমপ্লেট কপি করা যেতে পারে। Google Sites সেটিংস পৃষ্ঠায় "এই সাইটকে টেমপ্লেট হিসেবে প্রকাশ করুন" সেটিংয়ে টিকচিহ্ন দেওয়া থাকলে, সাইটটি একটি টেমপ্লেট।
  • আপনি অন্য ডোমেন থেকে কোনও সাইট কপি করতে পারবেন, তবে আপনাকে সোর্স সাইটে মালিক হিসেবে তালিকাভুক্ত থাকতে হবে।

সাইটের মেটাডেটা আপডেট করা

কোনও সাইটের শীর্ষক বা সারসংক্ষেপ আপডেট করতে, আপনার এমন একটি SiteEntry প্রয়োজন হবে যেখানে সেই সাইটটি আছে। এই উদাহরণে, প্রথমে SiteEntry ফেচ করার জন্য GetEntry() পদ্ধতি ব্যবহার করা হয়েছে, তারপর সেটির নাম, বিবরণ ও বিভাগ ট্যাগ পরিবর্তন করা হয়েছে:

uri = 'https://sites.google.com/feeds/site/example2.com/title-for-my-site'
site_entry = client.GetEntry(uri, desired_class=gdata.sites.data.SiteEntry)

site_entry.title.text = 'Better Title'
site_entry.summary.text = 'Better Description'
category_name = 'My Category'
category = atom.data.Category(
    scheme=gdata.sites.data.TAG_KIND_TERM,
    term=category_name)
site_entry.category.append(category)
updated_site_entry = client.Update(site_entry)

# To force the update, even if you do not have the latest changes to the entry:
# updated_site_entry = client.Update(site_entry, force=True)

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

অ্যাক্টিভিটি ফিড ফেচ করা

মনে রাখবেন: এই ফিড অ্যাক্সেস করতে হলে আপনাকে সাইটের মালিক বা কোল্যাবরেটর হতে হবে। আপনার ক্লায়েন্টকে অবশ্যই AuthSub, OAuth বা ClientLogin টোকেন ব্যবহার করে যাচাই করতে হবে। Sites পরিষেবায় যাচাইকরণ দেখুন।

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

print "Fetching activity feed of '%s'...\n" % client.site
feed = client.GetActivityFeed()

for entry in feed.entry:
  print '%s [%s on %s]' % (entry.title.text, entry.Kind(), entry.updated.text)

GetActivityFeed() কল করলে, gdata.sites.data.ActivityFeed অবজেক্ট রিটার্ন করে, যার মধ্যে gdata.sites.data.ActivityEntry-এর তালিকা থাকে। প্রতিটি অ্যাক্টিভিটি এন্ট্রিতে সাইটে করা পরিবর্তন সংক্রান্ত তথ্য থাকে।

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

পরিবর্তনের ইতিহাস ফেচ করা হচ্ছে

মনে রাখবেন: এই ফিড অ্যাক্সেস করতে হলে আপনাকে সাইটের মালিক বা কোল্যাবরেটর হতে হবে। আপনার ক্লায়েন্টকে অবশ্যই AuthSub, OAuth বা ClientLogin টোকেন ব্যবহার করে যাচাই করতে হবে। Sites পরিষেবায় যাচাইকরণ দেখুন।

কোনও কন্টেন্ট এন্ট্রির জন্য রিভিশন ফিড রিভিশন ইতিহাস সম্পর্কিত তথ্য প্রদান করে। কোনও নির্দিষ্ট কন্টেন্ট এন্ট্রির জন্য রিভিশন পেতে GetRevisionFeed() মেথড ব্যবহার করা যেতে পারে। এই পদ্ধতিতে একটি ঐচ্ছিক uri প্যারামিটার ব্যবহার করা হয় যা gdata.sites.data.ContentEntry, কন্টেন্ট এন্ট্রির সম্পূর্ণ URI বা কন্টেন্ট এন্ট্রি আইডি গ্রহণ করে।

এই উদাহরণটি কন্টেন্ট ফিড কোয়েরি করে এবং প্রথম কন্টেন্ট এন্ট্রির জন্য রিভিশন ফিড ফেচ করে:

print "Fetching content feed of '%s'...\n" % client.site
content_feed = client.GetContentFeed()
content_entry = content_feed.entry[0]

print "Fetching revision feed of '%s'...\n" % content_entry.title.text
revision_feed = client.GetRevisionFeed(content_entry)

for entry in revision_feed.entry:
  print entry.title.text
  print ' new version on:\t%s' % entry.updated.text
  print ' view changes:\t%s' % entry.GetAlternateLink().href
  print ' current version:\t%s...\n' % str(entry.content.html)[0:100]

GetRevisionFeed() কল করলে, gdata.sites.data.RevisionFeed অবজেক্ট রিটার্ন করে, যার মধ্যে gdata.sites.data.RevisionEntry-এর তালিকা থাকে। প্রতিটি রিভিশন এন্ট্রিতে সেই রিভিশনের কন্টেন্ট, ভার্সন নম্বর এবং নতুন ভার্সন কবে তৈরি করা হয়েছে, এই ধরনের তথ্য থাকে।

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

কন্টেন্ট ফিড

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

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

কন্টেন্ট ফিড সাইটের লেটেস্ট কন্টেন্ট রিটার্ন করে। এটি lib-এর GetContentFeed() মেথড কল করে অ্যাক্সেস করা যেতে পারে, যা কাস্টমাইজ করা কোয়েরি পাস করার জন্য ঐচ্ছিক uri স্ট্রিং প্যারামিটার নেয়।

সম্পূর্ণ কন্টেন্ট ফিচ করা এবং কিছু আকর্ষণীয় এলিমেন্ট প্রিন্ট করার একটি উদাহরণ এখানে দেওয়া হল:

print "Fetching content feed of '%s'...\n" % client.site
feed = client.GetContentFeed()

for entry in feed.entry:
  print '%s [%s]' % (entry.title.text, entry.Kind())

  # Common properties of all entry kinds.
  print ' content entry id: ' + entry.GetNodeId()
  print ' revision:\t%s' % entry.revision.text
  print ' updated:\t%s' % entry.updated.text

  if entry.page_name:
    print ' page name:\t%s' % entry.page_name.text

  if entry.content:
    print ' content\t%s...' % str(entry.content.html)[0:100]

  # Subpages/items will have a parent link.
  parent_link = entry.FindParentLink()
  if parent_link:
    print ' parent link:\t%s' % parent_link

  # The alternate link is the URL pointing to Google Sites.
  if entry.GetAlternateLink():
    print ' view in Sites:\t%s' % entry.GetAlternateLink().href

  # If this entry is a filecabinet, announcementpage, etc., it will have a feed of children.
  if entry.feed_link:
    print ' feed of items:\t%s' % entry.feed_link.href

  print

পরামর্শ: কোনও এন্ট্রির ধরন নির্ধারণ করতে entry.Kind() ব্যবহার করা যেতে পারে।

ফলাফল হিসেবে প্রাপ্ত feed অবজেক্ট হল একটি gdata.sites.data.ContentFeed যার মধ্যে gdata.sites.data.ContentEntry-এর একটি তালিকা থাকে। প্রতিটি এন্ট্রি ব্যবহারকারীর সাইটের মধ্যে একটি আলাদা পৃষ্ঠা/আইটেমকে উপস্থাপন করে এবং এটি যে ধরনের এন্ট্রি তার জন্য নির্দিষ্ট এলিমেন্ট থাকে। প্রতিটি এন্ট্রি ধরনের মধ্যে উপলভ্য কিছু প্রপার্টির আরও ভাল আইডিয়া পেতে স্যাম্পেল অ্যাপ্লিকেশন দেখুন।

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

কন্টেন্ট ফিড কোয়েরির উদাহরণ

আপনি স্ট্যান্ডার্ড Google Data API কোয়েরি প্যারামিটার এবং ক্লাসিক Sites API-এর জন্য নির্দিষ্ট প্যারামিটার ব্যবহার করে কন্টেন্ট ফিড সার্চ করতে পারবেন। আরও বিস্তারিত তথ্য ও কাজ করে এমন প্যারামিটারের সম্পূর্ণ তালিকা পেতে, রেফারেন্স গাইড দেখুন।

মনে রাখবেন: এই বিভাগে দেওয়া উদাহরণে কন্টেন্ট ফিডের বেস URI তৈরি করার জন্য gdata.sites.client.MakeContentFeedUri() হেল্পার পদ্ধতি ব্যবহার করা হয়েছে।

নির্দিষ্ট ধরনের এন্ট্রি রিট্রিভ করা

শুধুমাত্র নির্দিষ্ট ধরনের এন্ট্রি ফেচ করতে, kind প্যারামিটার ব্যবহার করুন। উদাহরণস্বরূপ, এই স্নিপেটটি শুধুমাত্র attachment এন্ট্রি রিটার্ন করে:

kind = 'webpage'

print 'Fetching only %s entries' % kind
uri = '%s?kind=%s' % (client.MakeContentFeedUri(), kind)
feed = client.GetContentFeed(uri=uri)

একাধিক ধরনের ডেটা রিটার্ন করতে, প্রতিটি kind কমা দিয়ে আলাদা করুন। যেমন, এই স্নিপেট filecabinet এবং listpage এন্ট্রি রিটার্ন করে:

kind = ','.join(['filecabinet', 'listpage'])

print 'Fetching only %s entries' % kind
uri = '%s?kind=%s' % (client.MakeContentFeedUri(), kind)
feed = client.GetContentFeed(uri=uri)

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

Google সাইটের মধ্যে কোনও পৃষ্ঠার আপেক্ষিক পাথ জানা থাকলে, সেই নির্দিষ্ট পৃষ্ঠাটি পেতে আপনি path প্যারামিটার ব্যবহার করতে পারবেন। এই উদাহরণটি http://sites.google.com/domainName/siteName/path/to/the/page-এ থাকা পৃষ্ঠাটি রিটার্ন করবে:

path = '/path/to/the/page'

print 'Fetching page by its path: ' + path
uri = '%s?path=%s' % (client.MakeContentFeedUri(), path)
feed = client.GetContentFeed(uri=uri)

মূল পৃষ্ঠার অধীনে থাকা সব এন্ট্রি রিট্রিভ করা

আপনি যদি কোনও পৃষ্ঠার কন্টেন্ট এন্ট্রি আইডি (যেমন, নিচের উদাহরণে "1234567890") জানেন, তাহলে আপনি এর সমস্ত চাইল্ড এন্ট্রি (যদি থাকে) পেতে parent প্যারামিটার ব্যবহার করতে পারেন:

parent = '1234567890'

print 'Fetching all children of parent entry: ' + parent
uri = '%s?parent=%s' % (client.MakeContentFeedUri(), parent)
feed = client.GetContentFeed(uri=uri)

অতিরিক্ত প্যারামিটারের জন্য, রেফারেন্স গাইড দেখুন।

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



কন্টেন্ট তৈরি করা

মনে রাখবেন: কোনও সাইটের জন্য কন্টেন্ট তৈরি করার আগে, নিশ্চিত করুন যে আপনি ক্লায়েন্টে নিজের সাইট সেট করেছেন।
client.site = "siteName"

CreatePage() ব্যবহার করে নতুন কন্টেন্ট (ওয়েবপেজ, লিস্টপেজ, ফাইলক্যাবিনেট, অ্যানাউন্সমেন্টপেজ ইত্যাদি) তৈরি করা যেতে পারে। এই পদ্ধতির প্রথম আর্গুমেন্টটি হল, কোন ধরনের পৃষ্ঠা তৈরি করতে হবে, তারপরে শিরোনাম এবং এর HTML কন্টেন্ট।

কাজ করে এমন নোড ধরনের তালিকা পেতে, রেফারেন্স গাইডে kind প্যারামিটার দেখুন।

নতুন আইটেম / পৃষ্ঠা তৈরি করা

এই উদাহরণটি টপ-লেভেলের অধীনে একটি নতুন webpage তৈরি করে, পৃষ্ঠার বডির জন্য কিছু XHTML অন্তর্ভুক্ত করে এবং 'নতুন ওয়েবপেজের শীর্ষক' হিসেবে শিরোনামের শীর্ষক সেট করে:

entry = client.CreatePage('webpage', 'New WebPage Title', html='<b>HTML content</b>')
print 'Created. View it at: %s' % entry.GetAlternateLink().href

অনুরোধ সফল হলে, entry-এ সার্ভারে তৈরি করা এন্ট্রির একটি কপি থাকবে, যা gdata.sites.gdata.ContentEntry হিসেবে দেখানো হবে।

তৈরি করার সময় পপুলেট করা হয় এমন আরও জটিল এন্ট্রি ধরনের (যেমন, কলামের শিরোনাম সহ listpage) ক্ষেত্রে, আপনাকে gdata.sites.data.ContentEntry ম্যানুয়ালি তৈরি করতে হবে, আগ্রহের প্রপার্টি পূরণ করতে হবে এবং client.Post() কল করতে হবে।

কাস্টম URL পাথের অধীনে আইটেম/পৃষ্ঠা তৈরি করা

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

এই উদাহরণে, 'ফাইল স্টোরেজ' শিরোনাম সহ একটি নতুন filecabinet পৃষ্ঠা তৈরি করা হয়েছে, কিন্তু page_name প্রপার্টি নির্দিষ্ট করার মাধ্যমে http://sites.google.com/domainName/siteName/files URL-এর অধীনে পৃষ্ঠাটি তৈরি করা হয়েছে (http://sites.google.com/domainName/siteName/file-storage-এর পরিবর্তে) ।

entry = client.CreatePage('filecabinet', 'File Storage', html='<b>HTML content</b>', page_name='files')
print 'Created. View it at: ' + entry.GetAlternateLink().href

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

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

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

প্যারেন্ট পৃষ্ঠার অধীনে সাবপেজ (চাইল্ড) তৈরি করতে, CreatePage()-এর parent কীওয়ার্ড আর্গুমেন্ট ব্যবহার করুন। parent হয় gdata.sites.gdata.ContentEntry হতে পারে অথবা কন্টেন্টের এন্ট্রি'র সম্পূর্ণ সেল্ফ আইডি প্রতিনিধিত্বকারী স্ট্রিং হতে পারে।

এই উদাহরণে announcementpage-এর জন্য কন্টেন্ট ফিড কোয়েরি করা হয়েছে এবং প্রথম যে কন্টেন্ট পাওয়া গেছে তার অধীনে একটি নতুন announcement তৈরি করা হয়েছে:

uri = '%s?kind=%s' % (client.MakeContentFeedUri(), 'announcementpage')
feed = client.GetContentFeed(uri=uri)

entry = client.CreatePage('announcement', 'Party!!', html='My place, this weekend', parent=feed.entry[0])
print 'Posted!'

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

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

ক্লায়েন্ট লাইব্রেরির UploadAttachment() মেথড অ্যাটাচমেন্ট আপলোড করার ইন্টারফেস প্রদান করে।

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

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

uri = '%s?kind=%s' % (client.MakeContentFeedUri(),'filecabinet')
feed = client.GetContentFeed(uri=uri)

attachment = client.UploadAttachment('/path/to/file.pdf', feed.entry[0], content_type='application/pdf',
                                     title='New Employee Handbook', description='HR Packet')
print 'Uploaded. View it at: %s' % attachment.GetAlternateLink().href

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

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

Google Sites-এ ফাইলক্যাবিনেট ফোল্ডারে কাজ করে। UploadAttachment() একটি অতিরিক্ত কীওয়ার্ড আর্গুমেন্ট প্রদান করে, folder_name যা আপনি filecabinet ফোল্ডারে অ্যাটাচমেন্ট আপলোড করতে ব্যবহার করতে পারেন। শুধু সেই ফোল্ডারের নাম উল্লেখ করুন:

import gdata.data

ms = gdata.data.MediaSource(file_path='/path/to/file.pdf', content_type='application/pdf')
attachment = client.UploadAttachment(ms, feed.entry[0], title='New Employee Handbook',
                                     description='HR Packet', folder_name='My Folder')

লক্ষ্য করুন, এই উদাহরণে ফাইলপাথের পরিবর্তে UploadAttachment()-এ একটি gdata.data.MediaSource অবজেক্ট পাস করা হয়েছে। এছাড়াও, এটি কন্টেন্টের ধরন পাস করে না। পরিবর্তে, MediaSource অবজেক্টে কন্টেন্টের ধরন নির্দিষ্ট করা হয়।

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

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

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

এই উদাহরণটি ব্যবহারকারীর কন্টেন্ট ফিডে পাওয়া প্রথম filecabinet-এর অধীনে একটি ওয়েব অ্যাটাচমেন্ট তৈরি করে। এর শীর্ষক ও (ঐচ্ছিক) বিবরণ যথাক্রমে 'GoogleLogo' ও 'nice colors' হিসেবে সেট করা আছে।

uri = '%s?kind=%s' % (client.MakeContentFeedUri(),'filecabinet')
feed = client.GetContentFeed(uri=uri)

parent_entry = feed.entry[0]
image_url = 'http://www.google.com/images/logo.gif'
web_attachment = client.CreateWebAttachment(image_url, 'image/gif', 'GoogleLogo',
                                            parent_entry, description='nice colors')

print 'Created!'

কলটি filecabinet-এ 'http://www.google.com/images/logo.gif' লিঙ্কের দিকে নির্দেশ করে।

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



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

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

যেকোনও ধরনের এন্ট্রির মেটাডেটা (শিরোনাম, pageName ইত্যাদি) এবং পৃষ্ঠার কন্টেন্ট ক্লায়েন্টের Update() পদ্ধতি ব্যবহার করে এডিট করা যেতে পারে।

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

  • নাম পরিবর্তন করে 'আপডেট করা নাম' করা হয়েছে
  • পৃষ্ঠার HTML কন্টেন্ট আপডেট করে 'আপডেট করা HTML কন্টেন্ট' করা হয়েছে
  • তালিকার প্রথম কলামের শিরোনাম পরিবর্তন করে "মালিক" করা হয়েছে
uri = '%s?kind=%s' % (client.MakeContentFeedUri(),'listpage')
feed = client.GetContentFeed(uri=uri)

old_entry = feed.entry[0]

# Update the listpage's title, html content, and first column's name.
old_entry.title.text = 'Updated Title'
old_entry.content.html = 'Updated HTML Content'
old_entry.data.column[0].name = 'Owner'

# You can also change the page's webspace page name on an update.
# old_entry.page_name = 'new-page-path'

updated_entry = client.Update(old_entry)
print 'List page updated!'

অ্যাটাচমেন্টের কন্টেন্ট + মেটাডেটা পরিবর্তন করা

নতুন ফাইল কন্টেন্ট সহ একটি নতুন MediaSource অবজেক্ট তৈরি করে এবং ক্লায়েন্টের Update() মেথড কল করে আপনি অ্যাটাচমেন্টের ফাইল কন্টেন্ট পরিবর্তন করতে পারবেন। এছাড়াও, অ্যাটাচমেন্টের মেটাডেটা (যেমন, শীর্ষক ও বিবরণ) আপডেট করা যেতে পারে অথবা শুধু মেটাডেটা আপডেট করা যেতে পারে। এই উদাহরণে একই সাথে ফাইল কন্টেন্ট ও মেটাডেটা আপডেট করার পদ্ধতি দেখানো হয়েছে:

import gdata.data

# Load the replacement content in a MediaSource. Also change the attachment's title and description.
ms = gdata.data.MediaSource(file_path='/path/to/replacementContent.doc', content_type='application/msword')
existing_attachment.title.text = 'Updated Document Title'
existing_attachment.summary.text = 'version 2.0'

updated_attachment = client.Update(existing_attachment, media_source=ms)
print "Attachment '%s' changed to '%s'" % (existing_attachment.title.text, updated_attachment.title.text)

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



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

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

client.Delete(content_entry)

এছাড়াও, আপনি Delete() পদ্ধতিতে কন্টেন্ট এন্ট্রির edit লিঙ্ক পাস করতে এবং/অথবা জোর করে মুছে দিতে পারেন:

# force=True sets the If-Match: * header instead of using the entry's ETag.
client.Delete(content_entry.GetEditLink().href, force=True)

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

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



অ্যাটাচমেন্ট ডাউনলোড করা

প্রতিটি attachment এন্ট্রিতে কন্টেন্ট src লিঙ্ক থাকে যা ফাইলের কন্টেন্ট ডাউনলোড করতে ব্যবহার করা যেতে পারে। এই লিঙ্ক থেকে ফাইল অ্যাক্সেস ও ডাউনলোড করার জন্য Sites ক্লায়েন্টে একটি হেল্পার পদ্ধতি আছে: DownloadAttachment(). এটি প্রথম আর্গুমেন্ট হিসেবে gdata.sites.data.ContentEntry বা ডাউনলোড URI এবং দ্বিতীয় আর্গুমেন্ট হিসেবে অ্যাটাচমেন্ট সেভ করার জন্য একটি ফাইলপাথ নেয়।

এই উদাহরণে একটি নির্দিষ্ট অ্যাটাচমেন্ট এন্ট্রি (এর self লিঙ্ক কোয়েরি করে) ফেচ করা হয় এবং নির্দিষ্ট পাথে ফাইলটি ডাউনলোড করা হয়:

uri = 'https://sites.google.com/feeds/content/site/siteName/1234567890'
attachment = client.GetEntry(uri, desired_class=gdata.sites.data.ContentEntry)

print "Downloading '%s', a %s file" % (attachment.title.text, attachment.content.type)
client.DownloadAttachment(attachment, '/path/to/save/test.pdf')

print 'Downloaded!'

অ্যাটাচমেন্টের কন্টেন্টের ধরনের জন্য উপযুক্ত ফাইল এক্সটেনশন নির্দিষ্ট করার দায়িত্ব অ্যাপ ডেভেলপারদের। কন্টেন্টের ধরন entry.content.type-এ পাওয়া যাবে।

কিছু ক্ষেত্রে আপনি ডিস্কে ফাইল ডাউনলোড করতে পারবেন না (যেমন, আপনার অ্যাপ Google App Engine-এ রান করলে)। এইসব পরিস্থিতির জন্য, ফাইল কন্টেন্ট ফেচ করতে এবং মেমরিতে স্টোর করতে _GetFileContent() ব্যবহার করুন।

এই উদাহরণে মেমরিতে অ্যাটাচমেন্ট ডাউনলোড করা হয়।

try:
  file_contents = client._GetFileContent(attachment.content.src)
  # TODO: Do something with the file contents
except gdata.client.RequestError, e:
  raise e

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

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 ফিড ফিরিয়ে আনা হচ্ছে

ACL ফিড ব্যবহার করে কোনও সাইটের শেয়ারিং অনুমতি নিয়ন্ত্রণ করা যায় এবং GetAclFeed() পদ্ধতি ব্যবহার করে এটি পাওয়া যায়।

নিচে দেওয়া উদাহরণটি SitesClient অবজেক্টে বর্তমানে সেট করা সাইটের জন্য ACL ফিড নিয়ে আসে এবং অনুমতির এন্ট্রি প্রিন্ট করে:

print "Fetching acl permissions of site '%s'...\n" % client.site

feed = client.GetAclFeed()
for entry in feed.entry:
  print '%s (%s) - %s' % (entry.scope.value, entry.scope.type, entry.role.value)

কোয়েরি সফল হলে, feed হল gdata.sites.data.AclFeed অবজেক্ট যাতে gdata.sites.data.AclEntry-এর তালিকা থাকে।

আপনি SiteFeed-এর এন্ট্রি নিয়ে কাজ করলে, প্রতিটি SiteEntry-এ সেটির ACL ফিডের লিঙ্ক থাকে। যেমন, এই স্নিপেট ব্যবহারকারীর সাইট ফিডে প্রথম সাইটটি ফেচ করে এবং এর ACL ফিড কোয়েরি করে:

feed = client.GetSiteFeed()
site_entry = feed.entry[0]

print "Fetching acl permissions of site '%s'...\n" % site_entry.site_name.text
feed = client.GetAclFeed(uri=site_entry.FindAclLink())

সাইট শেয়ার করা

মনে রাখবেন: ডোমেন কনফিগার করা থাকলে তবেই নির্দিষ্ট শেয়ারিং ACL সম্ভব হতে পারে যাতে এই ধরনের অনুমতি দেওয়া যায় (যেমন, G Suite ডোমেনের জন্য ডোমেনের বাইরে শেয়ার করার সুবিধা চালু করা থাকলে ইত্যাদি)।

API ব্যবহার করে Google Site শেয়ার করতে, পছন্দসই gdata.acl.data.AclScope এবং gdata.acl.data.AclRole ভ্যালু সহ একটি gdata.sites.gdata.AclEntry তৈরি করুন। সম্ভাব্য AclScope ও AclRoles ভ্যালুর জন্য ACL ফিডের ওভারভিউ বিভাগ দেখুন।

এই উদাহরণে, 'user@example.com' ব্যবহারকারীকে সাইট পড়ার অনুমতি দেওয়া হয়েছে:

import gdata.acl.data

scope = gdata.acl.data.AclScope(value='user@example.com', type='user')
role = gdata.acl.data.AclRole(value='reader')
acl = gdata.sites.gdata.AclEntry(scope=scope, role=role)

acl_entry = client.Post(acl, client.MakeAclFeedUri())
print "%s %s added as a %s" % (acl_entry.scope.type, acl_entry.scope.value, acl_entry.role.value)

গ্রুপ ও ডোমেন লেভেলে শেয়ার করা

কোনও সাইট একজন ব্যবহারকারীর সাথে শেয়ার করার মতো, আপনি কোনও Google গ্রুপ বা G Suite ডোমেন জুড়ে সাইট শেয়ার করতে পারবেন। প্রয়োজনীয় scope ভ্যালু নিচে তালিকাভুক্ত করা হয়েছে।

গ্রুপ ইমেল আইডিতে শেয়ার করা:

scope = gdata.acl.data.AclScope(value='group_name@example.com', type='group')

সম্পূর্ণ ডোমেনে শেয়ার করা:

scope = gdata.acl.data.AclScope(value='example.com', type='domain')

ডোমেন লেভেলে শেয়ার করার সুবিধা শুধুমাত্র G Suite ডোমেনের ক্ষেত্রে এবং শুধুমাত্র সেই ডোমেনের ক্ষেত্রে কাজ করে যেখানে সাইট হোস্ট করা হয়। যেমন, http://sites.google.com/a/domain1.com/siteA শুধুমাত্র domain1.com-এর সাথে সম্পূর্ণ সাইট শেয়ার করতে পারবে, domain2.com-এর সাথে নয়। যেসব সাইট G Suite ডোমেনে হোস্ট করা হয় না (যেমন, http://sites.google.com/site/siteB) সেগুলি ডোমেনকে আমন্ত্রণ জানাতে পারে না।

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

সাইটে আগে থেকে থাকা শেয়ারিং অনুমতিতে, প্রথমে AclEntry নিয়ে আসুন, অনুমতিতে পছন্দমতো পরিবর্তন করুন এবং তারপরে সার্ভারে ACL পরিবর্তন করতে ক্লায়েন্টের Update() মেথড কল করুন।

এই উদাহরণটি সাইট শেয়ার করা বিভাগ থেকে আমাদের আগের acl_entry-কে পরিবর্তন করে, 'user@example.com'-কে লেখক (সহযোগী) হিসেবে আপডেট করে:

acl_entry.role.value = 'writer'
updated_acl = client.Update(acl_entry)

# To force the update, even if you do not have the latest changes to the entry:
# updated_acl = client.Update(acl_entrys, force=True)

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

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

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

client.Delete(acl_entry)

এছাড়াও, আপনি Delete() পদ্ধতিতে ACL এন্ট্রির edit লিঙ্ক পাস করতে এবং/অথবা জোর করে মুছে দিতে পারবেন:

# force=True sets the If-Match: * header instead of using the entry's ETag.
client.Delete(acl_entry.GetEditLink().href, force=True)

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

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

বিশেষ বিষয়

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

আপনি আগে যে ফিড বা এন্ট্রি রিট্রিভ করেছেন সেটি আবার রিট্রিভ করতে চাইলে, সার্ভারকে বলুন যে আপনি শেষবার রিট্রিভ করার পর সেটি পরিবর্তিত হয়ে থাকলে তবেই যেন তালিকা বা এন্ট্রি পাঠানো হয়। এর মাধ্যমে আপনি দক্ষতা বাড়াতে পারবেন।

এই ধরনের কন্ডিশনাল রিট্রিভালের জন্য, GetEntry()-এ একটি ETag ভ্যালু পাস করুন। যেমন, আপনার যদি আগে থেকেই entry অবজেক্ট থাকে:

import gdata.client

try:
  entry = client.GetEntry(entry.GetSelfLink().href, desired_class=gdata.sites.data.ContentEntry, etag=entry.etag)
except gdata.client.NotModified, error:
  print 'You have the latest copy of this entry'
  print error

GetEntry() যদি gdata.client.NotModified ব্যতিক্রম ঘটায়, তাহলে এন্ট্রির ETag সার্ভারের ভার্সনের সাথে ম্যাচ করে, এর অর্থ হল আপনার কাছে সবচেয়ে আপ-টু-ডেট কপি আছে। তবে, অন্য কোনও ক্লায়েন্ট/ব্যবহারকারী পরিবর্তন করে থাকলে, নতুন এন্ট্রি entry তে ফেরত দেওয়া হবে এবং কোনও ব্যতিক্রম হবে না।

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

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