Pages

Tuesday, October 5, 2010

Google Data API

මෙම Post එකෙන් මම ලියන්න හදන්නෙ Google Data API පාවිච්චි කරල .NET වලින්  Blogger සඳහා Client application එකක් හදා ගන්නෙ කොහොමද කියලයි. Google Data API පාවිච්චි කරල අපිට පුළුවන් Google මඟින් සපයන නොයෙකුත් සේවාවන් සමඟ සම්භන්ධ වීමට Applications හදා ගන්න. ඒ කියන්නෙ Blogger, Picasa, Google calendar, Google spreadsheets, YouTube වැනි සේවාවන් සමඟ සම්භන්ධ වීමට අපේම Applications ලියා ගන්න.

මුලින්ම කරන්න ඕන Google Data API Download කරගන්න එක. මේ සඳහා මෙම ලින්ක් එක පාවිච්චි කරන්න. http://code.google.com/p/google-gdata/downloads/detail?name=Google%20Data%20API%20Setup%20%281.6.0.0%29.msi&can=2&q= මේක Download වුනයින් පස්සෙ Install කර ගන්න. මේකත් එක්ක ගොඩක් Sample codes අපට ලබා දෙනව. Blogger client එක සඳහා අවශ්‍ය වෙන codes ද මෙහිදී ලබා ගන්න පුළුවන්. මම බලාපොරොත්තු වෙන්නෙ එම Code එක සරල පැහැදිලි කිරීමක් සහිතව ඉදිරිපත් කරන්නයි. හරි දැන් අපි සූදානම් වැඩේ පටන් ගන්න. මම මේ Program එක  ලියන්න යන්නෙ VB වලින් නමුත් C# වුවද මේ සඳහා භාවිතා කල හැකියි.

ප්‍රථමයෙන්ම මම පහත රූපයෙ දැක්වෙන විදියට User interface එක design කර ගෙන තියෙනවා. මෙහිදී මම User ව Authenticate කර ගන්න User name එක හා Password එක ලබා දීමට Text boxes දෙකක් පාවිච්චි කරල තියනවා. ඒවගේම එම User ට අයිති බ්ලොග් අඩවි පෙන්වීම සඳහා Combo box එකක් පාවිච්චි කරල තියනවා. ඒවගේම Sign in Button එක මඟින් User ව Authenticate කර ගැනීම හා User ට අයිති බ්ලොග් අඩවි Combo box එකෙහි දැක්වීම සිදුකරනවා. පහල කොටසින් Combo box එක මඟින් තෝරා ඇති බ්ලොග් එක සඳහා අළුත් Post එකක් එකතු කිරීම සිදුකරනවා.


දැන් කරන්න තියෙන්නෙ අදාල Class library එක අපෙ Solution එකට සම්භන්ධ කරන එක. ඒ සඳහා Solution explorer හී අපේ Project එක මත Right click කර Add Reference යන්න තෝරා ලැබෙන Dialog box එකෙහි .NET Tab එකට ගොස් එහි ඇති ලිස්ට් එකෙන් Google Data API Core Library යන්න තෝරා OK කරන්න.

දැන් අපි බලමු කොහොමද Codes ලියාගන්නෙ කියලා. මුලින්ම Code editor එකෙහි ඉහලින්ම පහත ආකාරයෙන් ලියාගන්න

Imports Google.GData.Client

දැන් අපිට Google මඟින් අපි ලබා ගන්නා සේවාව කුමක්ද කියා සඳහන් කර ගැනීමක් අවශ්‍ය වෙනවා. ඒ කියන්නේ අපි මෙහිදී පාවිච්චි කරන්නෙ Blogger නිසා  ලබා ගන්නා සේවාව blogger යනුවෙන් සඳහන් කර ගැනීමක් අවශ්‍යයි. මේ සඳහා අපිට Service class එක පාවිච්චි කරන්න පුළුවන්. මෙහි Constructor එකට පහත ආකාරයට ලබා ගන්නා සේවාව හා අපගේ Application එකෙහි නම ලබා දිය යුතුයි. මෙය Instance variable එකක් වශයෙන් class definition එකට පහලින් Declare කරගන්න.
Private service As New Service("blogger", "Blogger Client")
දැන් අපිට Application එක පාවිච්චි කරන User ව Authenticate කර ගන්න ඕන. මේ සඳහා අපිට GDataCredentials class එක පාවිච්චි කරන්න පුළුවන්. දැන් පහත ආකාරයට Code එක ලියාගන්න.
Dim user As String = txtUser.Text
Dim password As String = txtPassword.Text
Dim credential As New GDataCredentials(user, password)
service.Credentials = credential
දැන් අපිට අවශ්‍යයි Authenticate කර ගත් User ට අයිති Blogs ටික Combo blox එකට add කර ගන්න. ඒක පහත ආකාරයෙන් කර ගන්න පුළුවන්.
Dim ServiceQuery As New FeedQuery
ServiceQuery.Uri = New Uri("http://www.blogger.com/feeds/default/blogs")
feed = service.Query(ServiceQuery)
blogs = Nothing
For Each blogs In feed.Entries
   cmbBlog.Items.Add(blogs.Title.Text)
Next 
මෙහි දැක්වූ User ව Authenticate කර ගන්නා කොටස සහ User ට අයිති Blogs ටික Combo blox එකට add කර ගන්නා කොටස් දෙක පහත ආකාරයට Sign in button එකෙහි Click event එකෙහි තිබිය යුතුයි.
Private Sub cmdSign_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSign.Click
   Dim user As String = txtUser.Text
   Dim password As String = txtPassword.Text
   Dim credential As New GDataCredentials(user, password)
   service.Credentials = credential
   Dim ServiceQuery As New FeedQuery
   ServiceQuery.Uri = New Uri("http://www.blogger.com/feeds/default/blogs")
   feed = service.Query(ServiceQuery)
   blogs = Nothing
   For Each blogs In feed.Entries
      cmbBlog.Items.Add(blogs.Title.Text)
   Next
End Sub
දැන් අපි බලමු මෙහි සිදු කර ඇත්තේ කුමක්ද කියා. ප්‍රථමයෙන් Authenticate කර ගත් User ට අදාල Feed එක සොය ගත යුතු වෙනවා. මෙම Feed එකෙහි එම User විසින් ලියන Blogs සම්භන්ධ විස්තර තියනව. මෙම Feed එක සොයා ගැනීමට FeedQuery class එක හා AtomFeed class එක පාවිච්චි කරන්න පුළුවන්. FeedQuery හී Uri Property එකට http://www.blogger.com/feeds/default/blogs නම් Feed භාවිතා කරන්නේ එම Feed එක මඟින් Authenticate කර ගත් User ට අදාල Feed එක ලබා ගත හැකි නිසයි. දැන් මෙම FeedQuery Object එක කලින් සකස් කරගත් Service Object එකෙහි Query Function එකට ලබා දීමෙන් AtomFeed Object එකක් Return වේ. මෙහි feed යනුවෙන් ඇත්තේ AtomFeed class එක පාවිච්චි කර සාදාගත් Object එකයි. මෙම Object එක මඟින් User ට අදාල Feed එක ලබා ගත හැකියි. මෙය Instance variable එකක් වශයෙන් class definition එකට පහලින් Declare කරගන්න. දැන් AtomFeed Object එකෙන් ලබා ගත් User ට අදාල Feed එකෙන් එම User විසින් ලියන බ්ලොග් අඩවි පිළිබඳ විස්තර වෙන් කර ගනිමු. මේ සඳහා AtomEntry class එක පාවිච්චි කරන්න ඕන. මෙහි blogs යනුවෙන් ඇත්තේ AtomEntry class එක පාවිච්චි කර සාදාගත් Object එකයි. මෙයද Instance variable එකක් වශයෙන් class definition එකට පහලින් Declare කරගන්න. මෙහි අවසානයේ For Each Loop එකක් භාවිතා කිරීමෙන් feed object එකෙහි ඇති entries blogs object එකට ලබා ගෙන එමගින් බ්ලොග් එකෙහි Title එක Combo box එකට add කර ගෙන ඇත.

දැන් මෙම Program එක Run කර බලන්න. දැන් ඔබගේ User name එක හා Password එක ලබා දී Sign in button එක Click කරන්න. මෙහිදී ඔබ නිවැරදි විදියට Authenticate වූවා නම් ඔබ විසින් ලියන Blogs වල Title එක Combo box එකෙහි පෙන්විය යුතුයි.

හොඳයි දැන් අපි බලමු කොහොමද අපේ Blog එකකට අළුත් Post එකක් එකතු කරන්නෙ කියල. මෙහිදී සිදු වන්නේ අපි Combo box එකෙන් අදාල Blog එක තෝරන විට එම Blog එකට අදාල Feed එක සොයා එම Feed එකට අනුව අළුත් Post එකක් එකතු වීමයි. එහෙනම් අපි මුලින්ම බලමු අපි Combo box එකෙන් Blog එකක් තෝරන විට එම Blog එකට අදාල Feed එක සොයා ගන්නේ කොහොමද කියා. මේ සඳහා Combo box එකෙහි SelectedIndexChanged Event එක භාවිතා කරන්න. දැන් මෙම Event handler එක තුල පහත Code එක ලියා ගන්න.
Dim title As String = cmbBlog.SelectedItem
For Each blogs In feed.Entries
   If blogs.Title.Text = title Then
      blogFeed = blogs.FeedUri
      Return
   End If
Next
මෙහිදී සිදු වන්නේ Combo box එකෙහි selected item එක ඒ කියන්නෙ Blog එකෙහි Title එක එම Blog එකෙහි Feed එක තුල ඇත්දැයි බලා තිබේනම් එහි URL එක blogFeed නම් String Variable එක තුලට ලබා ගැනීමයි. මෙහි blogFeed Variable එක Instance variable එකක් වශයෙන් class definition එකට පහලින් Declare කරගන්න. දැන් කල යුතු වන්නේ සොයා ගත් Feed එකට අනුව Post එක එකතු කිරීමයි. මේ සඳහා Submit Button එකෙහි Click Event එක භාවිතා කරන්න. දැන් එහි පහත ආකාරයෙන් ලියා ගන්න.
Dim post As New AtomEntry
Dim postContent As New AtomContent
Dim postfeed As New Uri(blogFeed)
post.Title.Text = txtTitle.Text
postContent.Content = txtPost.Text
post.Content = postContent
service.Insert(postfeed, post)
txtTitle.Clear()
txtPost.Clear()
මෙහිදී service object එකෙහි Insert Method එක භාවිතා කර ඇති අතර එහි Parameters වශයෙන් Blog එකෙහි Feed එක හා අදාල Post එක කුමක්ද යන්න ලබා දී ඇත. Post එක සඳහා AtomEntry Object එකක් භාවිතා කර ඇති අතර ඉන් Post එකෙහි Title එක සැකසිය හැකිය. AtomContent Object එකක් මඟින් Post එකෙහි Content ලබාදී ඇත.

දැන් නැවත Program එක Run කර බලන්න. ඔබගේ User name එක හා Password එක ලබා දී Sign in button එක Click කරන්න. දැන් Combo box එක තුලින් Post එක Publish කිරීමට අවශ්‍ය Blog එක තෝරන්න. Post කිරීමට අවශ්‍ය දෙය හා එහි Title එක පහතින් ලබා දී Submit button එක Click කරන්න. සියල්ල නිවැරදිව සිදුවාවානම් ඔබගේ Post එක ඔබ තේරූ Blog එකෙහි Publish විය යුතුය.

මෙහි සම්පූර්ණ Source code එක ලබා ගැනීමට පහත Link එක භාවිතා කරන්න.

Download

මා මෙය සකස් කර ඇත්තේ .NET Framework 2.0 භාවිතයෙන් නිසා මෙය භාවිතා කිරීමට .NET Framework 2.0 හෝ ඉහල Version එකක් අවශ්‍ය වේ.

6 comments:

CBTBlogger said...

මරුනේ,මම වැඩිය කෝඩ් ගැන දන්නෙ නෑ,නමුත් මේකටම් පොඩ්ඩක් හොයල බලන්න ඕනෙ,බොහොම ස්තුතී මේගැන දැනුවත්කලාට

Hoxpert.com said...

ඇත්තටම හොදයි එකම වගේ බ්ලොග් සයිට් ගොඩක් අස්සෙ වෙනස් විදෙහෙ තොරතුරැ දෙන තැනක් මටත් පුලුවන් වෙයි ඔයාට් උදවුවක් කරන්න මෙන්න මගේ ඊ ලිපිනය hoxpert@hotmail.com ඔයාගේ ලිපිනය එවන්නකෝ

Ranga said...

@Lasindu Nadishan
බොහොම ස්තූතියි මචං කමෙන්ට් එකට. කරල බලන්න වැඩිය අමාරුවක් නෑ. ප්‍රශ්නයක් තිබ්බොත් අහන්න.

@Hoxpert.com
බොහොම ස්තූතියි ඔයාට. මම ඊමේල් ලිපිනය එවන්නම්.

namila007 said...

මෙව්වා ගැන වැඩියනම් දන්නේ නෑ.ඒත් එල ලිපියක්..

Anonymous said...

නියමයි සහො..අපිටත් ඔනෙ මෙහෙම ලිපි තම..මරු මරු..තව ලියන්න ..මගෙන් සුබ පතුම් ඔබට

Anonymous said...

puluwannam vb.net programe ekakin gmail red karala delete karana widiha post karanda.. godak watinawa...

Post a Comment