Author: api.jscudder
Date: Mon Apr 30 18:11:00 2007
New Revision: 140
Added:
trunk/clients/cs/samples/blogger/ConsoleSample.cs
Log:
Added a new sample for Blogger which uses the console.
Added: trunk/clients/cs/samples/blogger/ConsoleSample.cs
==============================================================================
--- (empty file)
+++ trunk/clients/cs/samples/blogger/ConsoleSample.cs Mon Apr 30 18:11:00 2007
@@ -0,0 +1,321 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Google.GData.Client;
+using System.Net;
+using System.Xml;
+using System.Text.RegularExpressions;
+
+namespace BloggerDevSample
+{
+ class ConsoleSample
+ {
+ /** Lists the user's blogs. */
+ static void ListUserBlogs(Service service)
+ {
+ Console.WriteLine("\nRetrieving a list of blogs");
+ FeedQuery query = new FeedQuery();
+ // Retrieving a list of blogs
+ query.Uri = new Uri("http://www.blogger.com/feeds/default/blogs");
+ AtomFeed feed = null;
+ feed = service.Query(query);
+ foreach (AtomEntry entry in feed.Entries)
+ {
+ Console.WriteLine(" Blog title: " + entry.Title.Text);
+ }
+ }
+
+ /** Lists the user's blogs and returns the URI for posting new entries
+ * to the blog which the user selected.
+ */
+ static Uri SelectUserBlog(Service service)
+ {
+ Console.WriteLine("\nPlease select a blog on which to post.");
+ FeedQuery query = new FeedQuery();
+ // Retrieving a list of blogs
+ query.Uri = new Uri("http://www.blogger.com/feeds/default/blogs");
+ AtomFeed feed = service.Query(query);
+
+ // Publishing a blog post
+ Uri blogPostUri = null;
+ if (feed != null)
+ {
+ foreach (AtomEntry entry in feed.Entries)
+ {
+ // Print out the title of the Blog
+ Console.WriteLine(" Blog name: " + entry.Title.Text);
+ Console.Write(" Post to this blog? (y/n): ");
+ if (Console.ReadLine().Equals("y"))
+ {
+ // find the href in the link with a rel pointing to
the blog's feed
+ for (int i = 0; i < entry.Links.Count; i++)
+ {
+ if
(entry.Links[i].Rel.Equals("http://schemas.google.com/g/2005#post"))
+ {
+ blogPostUri = new
Uri(entry.Links[i].HRef.ToString());
+ Console.WriteLine(" Your new posts will be
sent to " + blogPostUri.AbsoluteUri.ToString());
+ }
+ }
+ return blogPostUri;
+ }
+ }
+ }
+ return blogPostUri;
+ }
+
+ /** Creates a new blog entry and sends it to the specified Uri */
+ static AtomEntry PostNewEntry(Service service, Uri blogPostUri)
+ {
+ Console.WriteLine("\nPublishing a blog post");
+ AtomEntry createdEntry = null;
+ if (blogPostUri != null)
+ {
+ // construct the new entry
+ AtomEntry newPost = new AtomEntry();
+ newPost.Title.Text = "Marriage!";
+ newPost.Content = new AtomContent();
+ newPost.Content.Content = "<div
xmlns='http://www.w3.org/1999/xhtml'>" +
+ "<p>Mr. Darcy has <em>proposed marriage</em> to me!</p>" +
+ "<p>He is the last man on earth I would ever desire to
marry.</p>" +
+ "<p>Whatever shall I do?</p>" +
+ "</div>";
+ newPost.Content.Type = "xhtml";
+ newPost.Authors.Add(new AtomPerson());
+ newPost.Authors[0].Name = "Elizabeth Bennet";
+ newPost.Authors[0].Email = "[EMAIL PROTECTED]";
+
+ createdEntry = service.Insert(blogPostUri, newPost);
+ if (createdEntry != null)
+ {
+ Console.WriteLine(" New blog post created with title: " +
createdEntry.Title.Text);
+ }
+ }
+ return createdEntry;
+ }
+
+ /** Creates a new blog entry and sends it to the specified Uri */
+ static void PostAndDeleteNewDraftEntry(Service service, Uri
blogPostUri)
+ {
+ Console.WriteLine("\nCreating a draft blog post");
+ AtomEntry draftEntry = null;
+ if (blogPostUri != null)
+ {
+ // construct the new entry
+ AtomEntry newPost = new AtomEntry();
+ newPost.Title.Text = "Marriage! (Draft)";
+ newPost.Content = new AtomContent();
+ newPost.Content.Content = "<div
xmlns='http://www.w3.org/1999/xhtml'>" +
+ "<p>Mr. Darcy has <em>proposed marriage</em> to me!</p>" +
+ "<p>He is the last man on earth I would ever desire to
marry.</p>" +
+ "<p>Whatever shall I do?</p>" +
+ "</div>";
+ newPost.Content.Type = "xhtml";
+ newPost.Authors.Add(new AtomPerson());
+ newPost.Authors[0].Name = "Elizabeth Bennet";
+ newPost.Authors[0].Email = "[EMAIL PROTECTED]";
+ newPost.IsDraft = true;
+
+ draftEntry = service.Insert(blogPostUri, newPost);
+ if (draftEntry != null)
+ {
+ Console.WriteLine(" New draft post created with title: "
+ draftEntry.Title.Text);
+ // Delete the newly created draft entry
+ Console.WriteLine(" Press enter to delete the draft blog
post");
+ Console.ReadLine();
+ draftEntry.Delete();
+ }
+ }
+ }
+
+ /** Display the titles for all entries in the previously selected
blog. */
+ static void ListBlogEntries(Service service, Uri blogUri)
+ {
+ if (blogUri != null)
+ {
+ Console.WriteLine("\nRetrieving all blog posts");
+ // Retrieve all posts in a blog
+ FeedQuery query = new FeedQuery();
+ Console.WriteLine(" Query URI: " + blogUri.ToString());
+ query.Uri = blogUri;
+ AtomFeed feed = service.Query(query);
+ foreach (AtomEntry entry in feed.Entries)
+ {
+ Console.WriteLine(" Entry Title: " + entry.Title.Text);
+ }
+ }
+ }
+
+ /** Display title for entries in the blog in the hard coded date
range. */
+ static void ListBlogEntriesInDateRange(Service service, Uri blogUri)
+ {
+ Console.WriteLine("\nRetrieving posts using query parameters");
+ // Retrieve all posts in a blog between Jan 1, 2006 and Apr 12,
2007
+ FeedQuery query = new FeedQuery();
+ query.Uri = blogUri;
+ query.MinPublication = new DateTime(2006, 1, 1);
+ query.MaxPublication = new DateTime(2007, 4, 12);
+ AtomFeed feed = service.Query(query);
+ foreach (AtomEntry entry in feed.Entries)
+ {
+ Console.WriteLine(" Entry Title: " + entry.Title.Text);
+ }
+ }
+
+ /** Change the contents of the newly created blog entry. */
+ static AtomEntry EditEntry(AtomEntry toEdit)
+ {
+ Console.WriteLine("\nUpdating post");
+ // Edit the new entry
+ if (toEdit != null)
+ {
+ toEdit.Title.Text = "Marriage Woes!";
+ Console.WriteLine(" Press enter to update");
+ Console.ReadLine();
+ toEdit = toEdit.Update();
+ }
+ return toEdit;
+ }
+
+ /** Delete the specified blog entry. */
+ static void DeleteEntry(AtomEntry toDelete)
+ {
+ Console.WriteLine("\nDeleting post");
+ // Delete the edited entry
+ if (toDelete != null)
+ {
+ Console.WriteLine(" Press enter to delete the new blog post");
+ Console.ReadLine();
+ toDelete.Delete();
+ }
+ }
+
+ /** Get the comments feed URI for the desired blog entry. */
+ static Uri SelectBlogEntry(Service service, Uri blogPostUri)
+ {
+ Console.WriteLine("\nPlease select a blog entry on which to
comment.");
+ FeedQuery query = new FeedQuery();
+ query.Uri = blogPostUri;
+ AtomFeed feed = service.Query(query);
+ Uri commentPostUri = null;
+
+ if (feed != null)
+ {
+ foreach (AtomEntry entry in feed.Entries)
+ {
+ // Print out the title of the Blog
+ Console.WriteLine(" Blog entry title: " +
entry.Title.Text);
+ Console.Write(" Post a comment on this entry? (y/n): ");
+
+ if (Console.ReadLine().Equals("y"))
+ {
+ // Create the Post URL for adding a comment by finding
this entry's id number.
+
+ // Find the href in the link with a rel pointing to
the blog's feed.
+ for (int i = 0; i < entry.Links.Count; i++)
+ {
+
+ if (entry.Links[i].Rel == "edit")
+ {
+ string commentUriStart =
Regex.Replace(blogPostUri.ToString(), "/posts/default", "");
+ string selfLink =
entry.Links[i].HRef.ToString();
+ string entryId = Regex.Replace(selfLink,
blogPostUri.ToString() + "/", "");
+ // Build the comment URI from the blog id in
and the entry id.
+ commentPostUri = new Uri(commentUriStart + "/"
+ entryId + "/comments/default");
+ Console.WriteLine(" Your new comments will be
sent to " + commentPostUri.ToString());
+ return commentPostUri;
+ }
+ }
+ }
+ }
+ }
+
+ return commentPostUri;
+ }
+
+ static AtomEntry PostNewComment(Service service, Uri commentPostUri)
+ {
+ Console.WriteLine("\nCommenting on a blog post");
+ AtomEntry postedComment = null;
+ if (commentPostUri != null)
+ {
+ // Add a comment.
+ AtomEntry comment;
+ comment = new AtomEntry();
+ comment.Title.Text = "This is my first comment";
+ comment.Content.Content = "This is my first comment";
+ comment.Authors.Add(new AtomPerson());
+ comment.Authors[0].Name = "Blog Author Name";
+ postedComment = service.Insert(commentPostUri, comment);
+ Console.WriteLine(" Result's title: " +
postedComment.Title.Text);
+ }
+ return postedComment;
+ }
+
+ static void ListEntryComments(Service service, Uri commentUri)
+ {
+ if (commentUri != null)
+ {
+ Console.WriteLine("\nRetrieving all blog post comments");
+ // Retrieve all comments on a blog entry
+ FeedQuery query = new FeedQuery();
+ Console.WriteLine(" Query URI: " + commentUri.ToString());
+ query.Uri = commentUri;
+ AtomFeed feed = service.Query(query);
+ foreach (AtomEntry entry in feed.Entries)
+ {
+ Console.WriteLine(" Comment Title: " + entry.Title.Text);
+ }
+ }
+ }
+
+ static void DeleteComment(AtomEntry commentEntry)
+ {
+ Console.WriteLine("\nDeleting the comment");
+ if (commentEntry != null)
+ {
+ // Delete the comment.
+ Console.WriteLine(" Press enter to delete the new comment
post");
+ Console.ReadLine();
+ commentEntry.Delete();
+ }
+ }
+
+ static void Main(string[] args)
+ {
+ Service service = new Service("blogger", "blogger-example");
+
+ // ClientLogin using username/password authentication
+ string username;
+ string password;
+ if (args.Length != 2)
+ {
+ Console.WriteLine("Usage: BloggerDevSample.exe <username>
<password>");
+ return;
+ }
+ else
+ {
+ username = args[0];
+ password = args[1];
+ }
+
+ NetworkCredential creds = new NetworkCredential(username,
password);
+ service.Credentials = creds;
+
+ ListUserBlogs(service);
+ Uri blogPostUri = SelectUserBlog(service);
+ AtomEntry createdEntry = PostNewEntry(service, blogPostUri);
+ PostAndDeleteNewDraftEntry(service, blogPostUri);
+ ListBlogEntries(service, blogPostUri);
+ ListBlogEntriesInDateRange(service, blogPostUri);
+ AtomEntry editedEntry = EditEntry(createdEntry);
+ DeleteEntry(editedEntry);
+ Uri commentPostUri = SelectBlogEntry(service, blogPostUri);
+ AtomEntry commentEntry = PostNewComment(service, commentPostUri);
+ ListEntryComments(service, commentPostUri);
+ DeleteComment(commentEntry);
+
+ Console.WriteLine("Press enter to quit");
+ Console.ReadLine();
+ }
+ }
+}
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Google Data API" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/google-help-dataapi?hl=en
-~----------~----~----~----~------~----~------~--~---