Advertisement

Blogger C# API

ByEnrico

Jun 11, 2014
Advertisement
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("https://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("https://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("https://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='https://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='https://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();
}
}
}

Advertisement
Advertisement

By Enrico

My greatest passion is technology. I am interested in multiple fields and I have a lot of experience in software design and development. I started professional development when I was 6 years. Today I am a strong full-stack .NET developer (C#, Xamarin, Azure)

Leave a Reply

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

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.