Blogger C# API

using System;
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 = "liz@gmail.com";

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 = "liz@gmail.com";
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];
}

service.Credentials = new GDataCredentials(username, password);

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

Leave a comment

Send a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.