using System; using System.IO; using System.Net; using System.Text; using System.Text.RegularExpressions; namespace ZapTheDingbat { public static class Facebook { //Make a request to login.facebook.com to get a session cookie. private CookieCollection login(String password, String username) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://login.facebook.com/login.php?m&next=http%3A%2F%2Fm.facebook.com%2Fhome.php"); request.CookieContainer = new CookieContainer(); request.AllowAutoRedirect = false; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.UserAgent = "Mozilla/1"; String postData = ""; postData += "pass=" + password; postData += "&email=" + username; UTF8Encoding encoding = new UTF8Encoding(); byte[] postBytes = encoding.GetBytes(postData); request.ContentLength = postBytes.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(postBytes, 0, postBytes.Length); requestStream.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); return response.Cookies; } //pull the markup of the Status update form and parse the post_form_id value private String getPostId(CookieCollection cookies) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://m.facebook.com/home.php"); request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookies); request.AllowAutoRedirect = false; request.Method = "GET"; request.UserAgent = "Mozilla/1"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream()); String responseString = reader.ReadToEnd(); Match match = Regex.Match(responseString, @"name=""post_form_id"" value=""([0-9a-f]+)"""); if (match.Success) return match.Groups[1].Value; return ""; } //post the status update private Boolean postUpdate(String postId, String status, CookieCollection cookies) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://m.facebook.com/home.php"); request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookies); request.AllowAutoRedirect = false; request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.UserAgent = "Mozilla/1"; String postData = ""; postData += "post_form_id=" + postId; postData += "&status=" + status; postData += "&update=Update"; UTF8Encoding encoding = new UTF8Encoding(); byte[] postBytes = encoding.GetBytes(postData); request.ContentLength = postBytes.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(postBytes, 0, postBytes.Length); requestStream.Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); return (response.StatusCode == HttpStatusCode.OK); } // public update method public bool updateStatus(String password, String username, String status) { //create a CookieCollection to store the session/auth cookies in. CookieCollection loginCookies = login(password, username); //use the session to get the PostId String postId = getPostId(loginCookies); //use the session and postID to post the status update return postUpdate(postId, status, loginCookies); } } }