ইভেন্ট প্রকাশ করা - Google স্প্রেডশীট, ক্যালেন্ডার এবং বেস ম্যাশ করা

রায়ান বয়েড, Google Data APIs টিম
জুন 2007
  1. ভূমিকা
  2. নকশা এবং বাস্তবায়ন
  3. ইভেন্ট প্রকাশক প্রাপ্ত করা এবং স্থাপন করা
  4. অ্যাপ্লিকেশন চলমান
  5. পরবর্তী পদক্ষেপ এবং সম্ভাব্য উন্নতি
  6. পরিশিষ্ট

ভূমিকা

আপনি কি কখনও Google স্প্রেডশীটে মিটিং, ইভেন্ট বা কনফারেন্স সম্পর্কে একগুচ্ছ তথ্য বজায় রাখতে চেয়েছেন এবং সেই তথ্যটি কি সহজে ভাগ করা এবং অনুসন্ধান করা হয়েছে? ঠিক আছে, Google-এ, আমরা আমাদের ডেভেলপারস ইভেন্ট ক্যালেন্ডারের সাথে এটি করি। ক্যালেন্ডারে যে ডেটা ফিড করা হয় তা সমগ্র কোম্পানি জুড়ে বিভিন্ন ধরনের Googlers থেকে আসে -- যাদের মধ্যে অনেকেরই একটি Google স্প্রেডশীটে সম্পাদনা করার অ্যাক্সেস রয়েছে যেখানে ডেটা সংরক্ষণ করা হয়। স্প্রেডশীটে, সু-প্রচারিত ব্যস্ততার সাথে অসমাপ্ত ঘটনা বিদ্যমান। এমনকি কখনও কখনও লোকেরা সম্ভাব্য ইভেন্টগুলিতে প্রবেশ করে -- এমনকি একটি প্রস্তাব জমা দেওয়ার আগে বা একটি সম্ভাব্য স্পনসরশিপ তদন্তের আগে। একজন "সম্পাদক" ইভেন্টগুলি প্রকাশ করার জন্য এবং স্প্রেডশীটে একটি কলামে প্রকাশিত ঘটনাগুলি রেকর্ড করার জন্য দায়ী৷

কেন আমরা সরাসরি Google ক্যালেন্ডারে এই ইভেন্টগুলি বজায় রাখি না? একটি ইভেন্ট কখন এবং কোথায় তা শনাক্ত করার জন্য ক্যালেন্ডার ঠিক আছে, কিন্তু যখন স্পিকার তালিকা, জমা দেওয়ার সময়সীমা এবং একটি স্প্রেডশীট-এর মতো অনেকগুলি কাঠামোগত তথ্য বজায় রাখার জন্য আসে তখন এটি আরও উপযুক্ত।

ইভেন্ট সহ Google স্প্রেডশীটের স্ক্রীন ক্যাপচার
উৎস Google স্প্রেডশীট ইভেন্টের তালিকা সহ

আমার একজন সহকর্মী Googler পরামর্শ দিয়েছেন যে আমরা স্প্রেডশীটে ইভেন্টগুলি বজায় রাখি কিন্তু আমাদের বাহ্যিক পাবলিক ক্যালেন্ডারে সেগুলি প্রকাশ করার ম্যানুয়াল প্রক্রিয়াটি সরিয়ে ফেলি৷ আমি ম্যাশআপ ক্যাম্পে প্রদর্শন করার জন্য একাধিক Google ডেটা API (সংক্ষেপে "GData") এর উপর ভিত্তি করে একটি আকর্ষণীয় প্রকল্পও চেয়েছিলাম, এবং এইভাবে ইভেন্ট প্রকাশকের জন্ম হয়েছিল।

ইভেন্ট প্রকাশক হল একটি দ্রুত বিকশিত, প্রুফ-অফ-কনসেপ্ট অ্যাপ্লিকেশন যা স্প্রেডশীটে ইভেন্টগুলির একটি তালিকা বজায় রাখে এবং সেগুলিকে ক্যালেন্ডার এবং Google বেস উভয়েই প্রকাশ করে৷ Google ক্যালেন্ডার ইভেন্টগুলি ভাগ করার একটি দুর্দান্ত উপায় প্রদান করে এবং লোকেদের তাদের নিজস্ব ক্যালেন্ডার দৃশ্যে ইভেন্টগুলি অন্তর্ভুক্ত করার একটি সহজ উপায় দেয়৷ যদিও ক্যালেন্ডার ইভেন্টগুলি অনুসন্ধান করার ক্ষমতা প্রদান করে, Google বেস ইভেন্টগুলিকে প্রচার করার জন্য আরও একটি স্থান প্রদান করে এবং এমনভাবে স্ট্রাকচার্ড ডেটা সঞ্চয় করে যা অনুসন্ধান করা সহজ।

স্প্রেডশীট, ক্যালেন্ডার এবং বেস প্রতিটি একটি API প্রদান করে যা সম্পূর্ণ পঠন/লেখার ক্রিয়াকলাপ সমর্থন করে। আরও ভাল, এই পরিষেবাগুলির প্রতিটি Google ডেটা API প্রোটোকল ব্যবহার করে তাদের ডেটাতে অ্যাক্সেস প্রকাশ করে!

নকশা এবং বাস্তবায়ন

এই প্রকল্পের নকশা পর্বটি বেশ সহজ ছিল: আমি জানতাম যে আমি একটি ক্যালেন্ডারে স্প্রেডশীট ডেটা প্রকাশের জন্য একটি ওয়েব অ্যাপ্লিকেশন তৈরি করতে চাই৷ যদিও দীর্ঘমেয়াদী লক্ষ্য ছিল একটি অ্যাপ্লিকেশন তৈরি করা যা ডেভেলপারস ইভেন্ট ক্যালেন্ডারের জন্য ব্যবহার করা যেতে পারে, স্বল্পমেয়াদী লক্ষ্য ছিল একটি কার্যকরী প্রমাণ-অফ-কনসেপ্ট ম্যাশআপ তৈরি করা যা ম্যাশআপ ক্যাম্পের সময় প্রদর্শিত হতে পারে। এই লক্ষ্যগুলি মাথায় রেখে, আমি জিডিটা জাভা ক্লায়েন্ট লাইব্রেরি বেছে নিয়েছি কারণ এটি আরও পরিপক্ক ক্লায়েন্ট লাইব্রেরিগুলির মধ্যে একটি, এবং আমি জাভা ওয়েব অ্যাপগুলি লেখার সাথে পরিচিত। প্রদত্ত ক্লায়েন্ট লাইব্রেরিগুলির মধ্যে একটি ব্যবহার করা আমাকে কাঁচা GData প্রোটোকল এবং XML ডেটা মডেল সম্পর্কে উদ্বিগ্ন হওয়ার থেকে মুক্তি দিয়েছে এবং পরিবর্তে ইভেন্টগুলি প্রকাশ করার জন্য প্রয়োজনীয় অপেক্ষাকৃত সহজ অ্যাপ্লিকেশন লজিক বাস্তবায়নে মনোনিবেশ করেছে।

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

একাধিক GData পরিষেবার সাথে কাজ করার সৌন্দর্য হল যে তারা তাদের ইন্টারফেস জুড়ে সামঞ্জস্যপূর্ণ এবং অনেক ক্লায়েন্ট লাইব্রেরিতে আপনার পছন্দের Google পরিষেবাগুলির জন্য পরিষেবা-নির্দিষ্ট সহায়ক ক্লাস অন্তর্ভুক্ত রয়েছে। যেহেতু ক্লায়েন্ট লাইব্রেরিতে আমি যে তিনটি পরিষেবা ব্যবহার করছি তার জন্য একই পরিষেবা, এন্ট্রি এবং ফিড ক্লাস ছিল, তাই স্প্রেডশিডস থেকে ইভেন্টগুলি পুনরুদ্ধার করতে এবং বেস এবং ক্যালেন্ডারে প্রকাশ করার জন্য আমি খুব অনুরূপ কোড ব্যবহার করতে সক্ষম হয়েছিলাম৷ তিনটি স্বতন্ত্র API-এর সাথে কাজ করার জন্য যা প্রয়োজন হবে তার তুলনায় এটি আমার বিকাশের সময়কে উল্লেখযোগ্যভাবে ছোট করেছে। আপনি বিভিন্ন পদ্ধতির মধ্যে মিল দেখতে EventPublisher- এ publishEventToCalendar() এবং publishEventToBase() পদ্ধতিগুলি পরীক্ষা করতে চাইতে পারেন৷

ইভেন্ট প্রকাশক প্রাপ্ত করা এবং স্থাপন করা

ইভেন্ট প্রকাশক অ্যাপ্লিকেশনটি Google ডেটা জাভা ক্লায়েন্ট লাইব্রেরি ডাউনলোডের একটি অংশ হিসাবে বিতরণ করা হয়৷ আপনি জাভা ক্লায়েন্ট লাইব্রেরি ডাউনলোড করার পরে, java/mashups/eventpub ডিরেক্টরিতে দেখুন। উদাহরণে প্রতিটি ফাইলের অর্থ সম্পর্কে আরও তথ্যের জন্য অনুগ্রহ করে পরিশিষ্টের প্রকল্প কাঠামো বিভাগটি দেখুন।

অ্যাপ্লিকেশনটিতে অনেকগুলি নির্ভরশীল লাইব্রেরি রয়েছে যা ইভেন্ট প্রকাশক তৈরি করার আগে ডাউনলোড করতে হবে৷ উপযুক্ত বিল্ড এবং রানটাইম বিকল্পগুলি কনফিগার করার পরে ( README.TXT ফাইলটি দেখুন), জাভা ক্লাস কম্পাইল করতে এবং একটি WAR ফাইল তৈরি করতে Ant ব্যবহার করা যেতে পারে। এই WAR ফাইলটি তারপরে আপনার প্রিয় সার্লেট ইঞ্জিনে স্থাপন করা যেতে পারে, যেমন টমক্যাট 5.5 যা আমি এই অ্যাপ্লিকেশনটি পরীক্ষা করার জন্য ব্যবহার করেছি। Tomcat, একটি ডিফল্ট কনফিগারেশনের অধীনে চলমান, শুধুমাত্র জেনারেট করা deploy/EventPublisher.war ফাইলটি তার ওয়েবঅ্যাপ ডিরেক্টরিতে অনুলিপি করা প্রয়োজন। তারপর এটি স্বয়ংক্রিয়ভাবে স্থাপন করা হবে এবং http://hostname:8080/EventPublisher এর মাধ্যমে অ্যাক্সেসযোগ্য হবে৷

অ্যাপ্লিকেশন চলমান - প্রক্রিয়া

AuthSub প্রমাণীকরণ প্রক্রিয়ার স্ক্রীন ক্যাপচার
AuthSub এর মাধ্যমে Google স্প্রেডশীট অ্যাকাউন্টে প্রমাণীকরণ করা হচ্ছে।
  • অ্যাপ্লিকেশনটি চলমান হোস্টে /EventPublisher-এ গিয়ে অ্যাপ্লিকেশনটি লোড করা হয়। আমার ক্ষেত্রে, আমি http://localhost:8080/EventPublisher এ অ্যাপ্লিকেশনটি চালাচ্ছি
  • Google স্প্রেডশীটের জন্য প্রমাণীকরণ
    • ব্যবহারকারী স্ট্যাটিক ফাংশন দ্বারা তৈরি করা "প্রমাণিত করুন" লিঙ্কটিতে ক্লিক করে: AuthSubUtil.getRequestUrl()
    • ব্যবহারকারীকে Google অ্যাকাউন্ট পরিষেবাগুলিতে পুনঃনির্দেশিত করা হয় যেখানে, ব্যবহারকারী যদি ইতিমধ্যেই Google-এ লগ ইন না করে থাকে, তাহলে তাদের শংসাপত্রের জন্য অনুরোধ করা হয়।
    • ব্যবহারকারী তাদের স্প্রেডশীট ডেটা অ্যাক্সেস করার জন্য ইভেন্ট প্রকাশককে অনুমতি দেয়।
    • ইউআরএল-এ একটি একক-ব্যবহারের AuthSub টোকেন সহ ব্যবহারকারীকে ইভেন্ট প্রকাশকের কাছে পুনঃনির্দেশিত করা হয়। ইভেন্ট প্রকাশক AuthSubSessionToken পরিষেবা ব্যবহার করে একটি AuthSub সেশন টোকেনের জন্য একক-ব্যবহারের টোকেন বিনিময় করে।
    • কোড: EventPublisherServlet .processAcceptAuthSubToken() দেখুন
    • ডকুমেন্টেশন: AuthSub ডকুমেন্টেশন দেখুন
  • স্প্রেডশীট/ওয়ার্কশীট নির্বাচন করুন
    • ব্যবহারকারীকে ইভেন্ট প্রকাশক দ্বারা অনুমোদিত ব্যবহারকারীর দ্বারা অ্যাক্সেসযোগ্য স্প্রেডশীটের একটি তালিকায় পুনঃনির্দেশিত করা হয়।
    • একটি স্প্রেডশীট নির্বাচন করার পরে যা থেকে ইভেন্ট ডেটা পুনরুদ্ধার করা উচিত, ব্যবহারকারীকে নির্বাচিত স্প্রেডশীটে উপযুক্ত ওয়ার্কশীট নির্বাচন করার জন্যও অনুরোধ করা হয়।
    • কোড: EventPublisher .getSsList() এবং EventPublisher .getWsList() দেখুন
  • ম্যাপিং ক্ষেত্রগুলির স্ক্রিন ক্যাপচারম্যাপিং ক্ষেত্রগুলির স্ক্রিন ক্যাপচার
    স্প্রেডশীট কলামে প্রয়োজনীয় ডেটা ম্যাপিং এবং ইভেন্টগুলির পূর্বরূপ প্রকাশ করা।
  • কলাম শিরোনাম পুনরুদ্ধার এবং মানচিত্র
    • অ্যাপ্লিকেশনটি তারপর স্প্রেডশীট থেকে ডেটার প্রথম সারি পুনরুদ্ধার করতে স্প্রেডশীট কোষ ফিড ব্যবহার করে -- এই প্রথম সারিটি কলাম শিরোনামগুলিকে উপস্থাপন করে৷ প্রয়োজনীয় ডেটার প্রতিটি অংশ ব্যবহারকারীর জন্য তালিকাভুক্ত করা হয় এবং তাদের ডেটার সাথে সবচেয়ে ভালো মেলে এমন কলাম হেডার নির্বাচন করতে বলা হয়। ডানদিকে স্ক্রীন ক্যাপচারে, প্রতিটি প্রয়োজনীয় ডেটা টাইপের পাশে একটি নির্বাচন বাক্স রয়েছে যেখানে আপনি সংশ্লিষ্ট কলাম হেডারটি বেছে নেবেন। সার্লেট কন্টেইনারের সেশন হ্যান্ডলিং মেকানিজম ব্যবহার করে এই ম্যাপিং ব্যবহারকারীর সেশনে সংরক্ষণ করা হয়।
    • কোড: EventPublisherServlet .processListEvents() দেখুন
  • এন্ট্রি পুনরুদ্ধার করুন এবং মটরশুটি মধ্যে দোকান
    • কলামগুলি ম্যাপ করার পরে, ইভেন্ট প্রকাশক ওয়ার্কশীটে প্রতিটি সারির জন্য একটি একক এন্ট্রি সহ স্প্রেডশীট তালিকা ফিড পুনরুদ্ধার করে। প্রতিটি সারি একটি একক ইভেন্টের প্রতিনিধিত্ব করে, এবং সারি থেকে ডেটা ইভেন্ট বিনের দৃষ্টান্তে জমা হয়। বিনের সংগ্রহ তারপর সেশনে সংরক্ষণ করা হয় এবং নিশ্চিতকরণের জন্য স্ক্রীনে আউটপুট করা হয় -- outputEventList.jsp পৃষ্ঠা ব্যবহার করে।
  • ক্যালেন্ডার এবং/অথবা বেসে এন্ট্রি প্রকাশ করুন
    • ব্যবহারকারী উপযুক্ত প্রকাশনা লক্ষ্য (ক্যালেন্ডার, বেস, বা উভয়) নির্বাচন করে এবং 'প্রকাশ করুন' বোতামে ক্লিক করে। ইভেন্টগুলিকে ব্যবহারকারীর সেশনে সংরক্ষিত ইভেন্ট বস্তুর সংগ্রহ থেকে publishEventsToBase() এবং EventPublisher-publishEventsToCalendar পদ্ধতি ব্যবহার করে উপযুক্ত পরিষেবাগুলিতে পুশ করা হয়। এই পদ্ধতিগুলি পরিষেবাগুলির জন্য উপযুক্ত ধরণের এন্ট্রি অবজেক্ট তৈরি করে: CalendarEventEntry এবং GoogleBaseEntry । এই এন্ট্রিগুলি তারপরে একটি HTTP POST মাধ্যমে পোস্ট করা হয় পরিষেবা ক্লাস CalendarService এবং GoogleBaseService দ্বারা সম্পাদিত
    • ইভেন্টগুলি প্রকাশিত হওয়ার সাথে সাথে প্রতিটি লক্ষ্য পরিষেবা দ্বারা প্রত্যাবর্তিত সম্পাদনা URLগুলি EventPublisher .updateSsEventEditUrl() পদ্ধতি ব্যবহার করে Google স্প্রেডশীটে সংরক্ষণ করা হয়। প্রকাশনা প্রক্রিয়ার ভবিষ্যতের পুনরাবৃত্তির জন্য, স্প্রেডশীটে প্রতিটি সংশ্লিষ্ট পরিষেবার জন্য একটি সম্পাদনা URL ধারণ করা ইভেন্টগুলি তৈরি না করে সম্পাদনা করা হয়। এটি সদৃশ ইভেন্ট ডেটা প্রতিরোধ করে।

পরবর্তী পদক্ষেপ এবং সম্ভাব্য উন্নতি

এই নিবন্ধে আগে উল্লিখিত হিসাবে, এই অ্যাপ্লিকেশন বর্তমানে শুধুমাত্র একটি প্রোটোটাইপ. এটা উৎপাদন-প্রস্তুত কোড হতে উদ্দেশ্য নয়. ইভেন্ট প্রকাশক উত্পাদন-প্রস্তুত করার জন্য, কিছু ত্রুটি পরিচালনা অন্তর্ভুক্ত করতে হবে৷ বর্তমানে, ত্রুটি শুধুমাত্র stderr এ পাঠানো হয়। পরিবর্তে, পুনরুদ্ধার, প্রকাশ বা অন্যান্য ক্রিয়াকলাপের সময় ঘটে যাওয়া ত্রুটিগুলি ব্যবহারকারীর ব্রাউজারে প্রদর্শিত হওয়া উচিত।

উপরন্তু, এটা উল্লেখ করা উচিত যে Google Base, তার ডেটা সেটের অখণ্ডতা বজায় রাখার জন্য, আইটেমগুলি আপডেট না করা হলে একটি নির্দিষ্ট সময়ের পরে মেয়াদ শেষ হয়ে যায়। যদি একটি ইভেন্ট ইতিমধ্যেই Google Base-এ যোগ করা হয়ে থাকে, তাহলে ইভেন্ট প্রকাশক Google স্প্রেডশীটে সংরক্ষিত সম্পাদনা URL ব্যবহার করে ইভেন্ট আপডেট করার চেষ্টা করে। যদি বেসের ইভেন্ট আইটেমটির মেয়াদ শেষ হয়ে যায়, তবে সম্পাদনা URL আর বৈধ থাকবে না এবং প্রকাশের সময় একটি 404 ত্রুটি ফিরে আসবে। একটি সমাধান হল একটি 404 প্রতিক্রিয়া প্রাপ্তির পরে ইভেন্টটি সন্নিবেশ করার চেষ্টা করা।

আরেকটি বৈশিষ্ট্য যা ইভেন্ট প্রকাশক অ্যাপ্লিকেশনে যোগ করা যেতে পারে তা হল শুধুমাত্র তারিখের বিপরীতে ইভেন্টের সঠিক সময় সংরক্ষণ এবং প্রকাশ করার ক্ষমতা। যেহেতু Google Base-এর ইভেন্টগুলির সাথে সংযুক্ত হওয়ার জন্য সময় প্রয়োজন, তাই প্রতিটি ইভেন্টের সময় সংরক্ষণ করা বেস এন্ট্রিগুলির ইভেন্টগুলির সাথে যুক্ত হওয়া থেকে স্বেচ্ছাচারী সময়গুলিকে প্রতিরোধ করবে৷ ক্যালেন্ডার উপযুক্ত সময়ে ইভেন্টগুলি উপস্থাপন করতে পারে।

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

আমি আশা করি এই নিবন্ধটি Google ডেটা API ব্যবহার করে অ্যাপ্লিকেশনগুলির জন্য কিছু দুর্দান্ত নতুন ধারণা নিয়ে আসার জন্য আপনার কল্পনাকে ট্রিগার করেছে! আপনি যদি এই অ্যাপ্লিকেশনটির উত্সটি দেখতে বা এটি তৈরি করতে এবং আপনার প্রয়োজন মেটানোর জন্য এটিকে সংশোধন করতে আগ্রহী হন তবে আপনি এটি ম্যাশআপ/ইভেন্টপাব ডিরেক্টরির অধীনে Google ডেটা APIs জাভা ক্লায়েন্ট লাইব্রেরিতে খুঁজে পেতে পারেন। এছাড়াও, আমরা Google Data APIs ডেভেলপার ফোরামে এই নিবন্ধে আপনার প্রতিক্রিয়াকে স্বাগত জানাই। একটি নির্দিষ্ট পরিষেবা সম্পর্কিত প্রশ্নের জন্য, দয়া করে সেগুলি পরিষেবা-নির্দিষ্ট আলোচনা গোষ্ঠীগুলিতে পোস্ট করুন৷

পরিশিষ্ট

অতিরিক্ত সম্পদ