Skip to main content
Email Password   helpLost your password?

Introduction

Web-logging, also known as blogging, is a new technology that allows you to publish your ideas to the world quickly. This has been a trend for the last several months. This article will show you how to post blogs to LiveJournal.com programmatically using C#, so that you can implement the functionality in your own application.

You need some familiarization with C# in order to understand the code.

Background

LiveJournal.com is one of the most popular free blog hosts today. That's why I chose this as code sample, because more people can benefit from it. You can always get a free LiveJournal blog account here.

The code provided here allows you to blog programmatically. You can go straight to the code. However, I would also like to show you how it works behind the scene.

You are probably familiar with blogging. If you are not, let me take you through the process of blogging, step-by-step using your mouse and keyboard.

In general, these are the steps you need to do, to blog manually:

The fact is, only 2nd and 3rd are necessary in the code. These are the two major steps, in which you have to send data to the blog host.

So, what's behind the scene?

Here are the steps performed by your browser, and the code I am going to provide does the following using C#:

Using the code

I will show you the most important section of the code. This block of code allows you to send your username and password to the blog server, i.e. the log-in process. After successfully logging-in, you may use similar code to send the blog title and the message body to the blog server. Comments have been added to the code:

public bool Login(string username, string password)
{
   try
   {
      // Prepare the HttpWebRequest to send data to 

      // LiveJournal.com

      string url = 
        string.Format("http://www.livejournal.com/login.bml");
      HttpWebRequest request = 
        (HttpWebRequest) WebRequest.Create(url);
      request.UserAgent = "Mozilla/5.0 (Windows; U; " 
         + "Windows NT 5.1; en-US; rv:1.7) "
         + "Gecko/20040707 Firefox/0.9.2";
      request.Method = "POST";
      request.Accept = 
        "text/xml,application/xml,application/xhtml+xml,"
        + "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
      request.KeepAlive = true;
      request.ContentType = @"application/x-www-form-urlencoded";
      request.Referer = 
       string.Format("http://www.livejournal.com/login.bml?nojs=1");
      request.CookieContainer = cookieContainer;

      // Send the log-in data

      string postData = 
        string.Format("response=&user={0}&"
           + "password={1}&expire=close&"
           + "bindip=no&action%3Alogin=Log+in...", username,"
           + " password); 
      request.Method="POST";
      byte [] postBuffer = 
        System.Text.Encoding.GetEncoding(1252).GetBytes(postData);
      request.ContentLength = postBuffer.Length;
      Stream postDataStream = request.GetRequestStream();
      postDataStream.Write(postBuffer,0,postBuffer.Length);
      postDataStream.Close();

      // Get the response

      HttpWebResponse response =
        (HttpWebResponse) request.GetResponse();
      response.Cookies =
        request.CookieContainer.GetCookies(request.RequestUri);

      // Add the cookie to this instance of object, 

      //so that the cookies can be reused for next request

      Cookies.Add(response.Cookies);

      // Read the response from the stream

      Encoding enc = System.Text.Encoding.UTF8;
      StreamReader responseStream = 
        new StreamReader(response.GetResponseStream(), enc, true);

      string responseHtml = responseStream.ReadToEnd();
      response.Close();
      responseStream.Close();

      // For debug purpose, print out the cookies received from 

      // LiveJournal.com

      foreach (Cookie c in response.Cookies)
      {
         Debug.WriteLine(string.Format("{0}: {1}", c.Name, c.Value));
      }

      // Check if log-in is successful

      string successString = 
         "you are now logged in to LiveJournal.com";
      if (responseHtml.IndexOf(successString) >= 0)
      {
         // log-in successfully

         return true;
      } 
      else
      {
         // log-in failed

         return false;
      }
   }
   catch (Exception)
   {
      return false;
   }
}

And here is the code, to call this function in my main application:

static void Main(string[] args)
{
   /* Put your configuration below */
   string username = "YOUR LIVEJOURNAL USERNAME";
   string password = "YOUR LIVEJOURNAL PASSWORD";
   string subject = "This is subject";
   string body = "This is a message body";
   /* End of configuration */

   // Create the LiveJournal object

   LiveJournal lj = new LiveJournal();

   // Log-in using your username and password

   if (lj.Login(username, password))    //  <--- calling the code above

   {
      // if log-in successfully, post the blog

      lj.AddBlog(subject, body);
      System.Console.WriteLine("Blog successfully!");
   } 
   else
   {
      System.Console.WriteLine("Blog failed");
   }
   System.Console.WriteLine("Press any key to close the application...");
   System.Console.ReadLine();
}

The sample source file, you downloaded from the above link, shows the complete code and, how everything works together.

Points of Interest

You probably must have wondered, if the same code works on other blog servers, the answer is yes and no. Yes, it can, but you have to change some code. For example, the data being sent to different blog servers are different. You need to have some network level programming knowledge in order to get these done. There are programs to help you, such as Ethereal or Paros.

Security Notes

There are several points worth mentioning. While you may find the code useful because you can add blogging functionalities to your e-mail clients and instant messenger clients, this (along with some creativity and imagination) can be misused and it can cause security threats:

Questions?

It is difficult for me, to try to explain everything. Please ask me, if there is anything that is not clear. I will try to answer them as clearly as possible.

You must Sign In to use this message board.
 
 
Per page   
 FirstPrevNext
Generalnot working with the similar code to connect to asp chat server Pin
niqing
12:36 14 Jul '07  
GeneralUgly but working solution Pin
ASPCode.net
3:51 12 Jun '07  
Generalthe code doesnt work Pin
lol1878
6:48 17 May '07  
GeneralUploading files in similar way? Pin
alex9913
4:22 17 Jul '06  
GeneralVery useful idea. Have you tried to use it on, say, Yahoo email? Pin
tank209
15:05 7 May '06  
GeneralRe: Very useful idea. Have you tried to use it on, say, Yahoo email? Pin
Kelvin Tsang
16:56 7 May '06  
GeneralIts not working Pin
saishyam
20:36 1 Mar '06  
GeneralRe: Its not working Pin
Kelvin Tsang
5:57 2 Mar '06  
Generalsome observtions Pin
caiafaverde
23:33 21 Feb '05  
GeneralRe: some observtions Pin
Kelvin Tsang
6:03 22 Feb '05  
Generalhow to post data other than IIS server such as Apachi Pin
MohdYounisKhan
1:08 17 Feb '05  
GeneralRe: how to post data other than IIS server such as Apachi Pin
Kelvin Tsang
20:39 24 Feb '05  
GeneralInteresting, it would be better if... Pin
zumanity0
15:50 29 Jan '05  
GeneralRe: Interesting, it would be better if... Pin
Kelvin Tsang
16:43 29 Jan '05  
GeneralNot a bad read, albeit a little short. Pin
Adam Goossens
0:54 21 Jan '05  
GeneralRe: Not a bad read, albeit a little short. Pin
Kelvin Tsang
7:45 21 Jan '05  


Last Updated 20 Jan 2005 | Advertise | Privacy | Terms of Use | Copyright © CodeProject, 1999-2009