Jun
12
2007
C# code to post to Livejournal
Posted by admin under
.NET
While Xmlrpc in theory is a really nice feature, in practice it's really hard to work with. Never considered myself as a XML type of guy and now we're adding a whole new level of rpc urls, authentication etc.
I bet there might be some nice library out there, but when I need to get somethiung done I always take the easy way out - so here I poresent my quick and dirty code for posting a blog entry to your livejournal blog from C#:
I started out with how I wanted the C# code to look:
protected void LiveJournalPost(string sHeader, string sTxt, string Username, string Password, string RpcUrl)
{
}
And here's that code:
...
string sTxtPostData = @"<?xml version=""1.0""?>
<methodCall>
<methodName>LJ.XMLRPC.postevent</methodName>
<params>
<param>
<value><struct>
<member><name>username</name>
<value><string>" + Username + @"</string></value>
</member>
<member><name>password</name>
<value><string>" + Password + @"</string></value>
</member>
<member><name>event</name>
<value><string>" + sTxt + @"
</string></value>
</member>
<member><name>subject</name>
<value><string>" + sHeader + @"</string></value>
</member>
<member><name>lineendings</name>
<value><string>pc</string></value>
</member>
<member><name>year</name>
<value><int>" + DateTime.Now.Year.ToString() + @"</int></value>
</member>
<member><name>mon</name>
<value><int>" + DateTime.Now.Month.ToString() + @"</int></value>
</member>
<member><name>day</name>
<value><int>" + DateTime.Now.Day.ToString() + @"</int></value>
</member>
<member><name>hour</name>
<value><int>" + DateTime.Now.Hour.ToString() + @"</int></value>
</member>
<member><name>min</name>
<value><int>" + DateTime.Now.Minute.ToString() + @"</int></value>
</member>
</struct></value>
</param>
</params>
</methodCall>
";
WebHelper.PostXml(RpcUrl, sTxtPostData);
...
Building up the XML the RPC endpoint at Livejournal wants to see by just creating a long string.
And here's the WebHelper.PostXml code:
public static string PostXml(string url, string sPostData)
{
string sRet = "ERROR";
System.Net.WebClient oCli = null;
try
{
oCli = new WebClient();
oCli.Headers.Add("Content-Type", "text/xml");
byte[] byteArray = Encoding.ASCII.GetBytes(sPostData);
byte[] responseArray = oCli.UploadData(url, "POST", byteArray);
sRet = Encoding.ASCII.GetString(responseArray);
}
catch (WebException ex)
{
//Console.Write(ex.Message);
}
if (oCli != null)
{
oCli.Dispose();
oCli = null;
}
return sRet;
}
So, calling it is like:
LiveJournalPost("The post header", "And some post content bla bla", "ljusername", "ljpassword", "http://www.livejournal.com/interface/xmlrpc");
Links