So if you wanted to start your own .Net library of the Twitter API, this could be a good place to start.
First, here is the custom UserStatus class.
public class UserStatus
{
#region Private variables
private DateTime m_statusCreatedAt;
private Int64 m_statusID = 0;
private string m_text = string.Empty;
private string m_source = string.Empty;
private bool m_truncated = false;
private Int64 m_inReplyToStatusID = 0;
private Int64 m_inReplyToUserID = 0;
private bool m_favorited = false;
private string m_inReplyToScreenName = string.Empty;
private User m_user;
#endregion
#region Public Properties
public User User
{
get { return m_user; }
set { m_user = value; }
}
public DateTime StatusCreatedAt
{
get { return m_statusCreatedAt; }
set { m_statusCreatedAt = value; }
}
public Int64 StatusID
{
get { return m_statusID; }
set { m_statusID = value; }
}
public string Text
{
get { return m_text; }
set { m_text = value; }
}
public string Source
{
get { return m_source; }
set { m_source = value; }
}
public bool Truncated
{
get { return m_truncated; }
set { m_truncated = value; }
}
public Int64 InReplyToStatusID
{
get { return m_inReplyToStatusID; }
set { m_inReplyToStatusID = value; }
}
public Int64 InReplyToUserID
{
get { return m_inReplyToUserID; }
set { m_inReplyToUserID = value; }
}
public bool Favorited
{
get { return m_favorited; }
set { m_favorited = value; }
}
public string InReplyToScreenName
{
get { return m_inReplyToScreenName; }
set { m_inReplyToScreenName = value; }
}
#endregion
}
Custom User class
public class User
{
#region Private Variables
private Int64 m_userID = 0;
private string m_name = string.Empty;
private Int64 m_friendsCount = 0;
private DateTime m_createdAt;
private Int64 m_favoritesCount = 0;
private string m_UTCOffset = string.Empty;
private string m_timeZone = string.Empty;
private string m_profileBackgroundImageURL = string.Empty;
private bool m_profileBackgroundTile = false;
private Int64 m_statusesCount = 0;
private bool m_notifications = false;
private bool m_following = false;
private bool m_protected = false;
private Int64 m_followersCount = 0;
private string m_profileBackgroundColor = string.Empty;
private string m_profileTextColor = string.Empty;
private string m_profileLinkColor = string.Empty;
private string m_profileSidebarFillColor = string.Empty;
private string m_profileSidebarBorderColor = string.Empty;
private string m_screenName = string.Empty;
private string m_location = string.Empty;
private string m_description = string.Empty;
private string m_profileImageURL = string.Empty;
private string m_url = string.Empty;
#endregion
#region Public Properties
public Int64 UserID
{
get { return m_userID; }
set { m_userID = value; }
}
public string Name
{
get { return m_name; }
set { m_name = value; }
}
public string ScreenName
{
get { return m_screenName; }
set { m_screenName = value; }
}
public string Location
{
get { return m_location; }
set { m_location = value; }
}
public string Description
{
get { return m_description; }
set { m_description = value; }
}
public string ProfileImageURL
{
get { return m_profileImageURL; }
set { m_profileImageURL = value; }
}
public string Url
{
get { return m_url; }
set { m_url = value; }
}
public bool Protected
{
get { return m_protected; }
set { m_protected = value; }
}
public Int64 FollowersCount
{
get { return m_followersCount; }
set { m_followersCount = value; }
}
public string ProfileBackgroundColor
{
get { return m_profileBackgroundColor; }
set { m_profileBackgroundColor = value; }
}
public string ProfileTextColor
{
get { return m_profileTextColor; }
set { m_profileTextColor = value; }
}
public string ProfileLinkColor
{
get { return m_profileLinkColor; }
set { m_profileLinkColor = value; }
}
public string ProfileSidebarFillColor
{
get { return m_profileSidebarFillColor; }
set { m_profileSidebarFillColor = value; }
}
public string ProfileSidebarBorderColor
{
get { return m_profileSidebarBorderColor; }
set { m_profileSidebarBorderColor = value; }
}
public Int64 FriendsCount
{
get { return m_friendsCount; }
set { m_friendsCount = value; }
}
public DateTime CreatedAt
{
get { return m_createdAt; }
set { m_createdAt = value; }
}
public Int64 FavoritesCount
{
get { return m_favoritesCount; }
set { m_favoritesCount = value; }
}
public string UTCOffset
{
get { return m_UTCOffset; }
set { m_UTCOffset = value; }
}
public string TimeZone
{
get { return m_timeZone; }
set { m_timeZone = value; }
}
public string ProfileBackgroundImageURL
{
get { return m_profileBackgroundImageURL; }
set { m_profileBackgroundImageURL = value; }
}
public bool ProfileBackgroundTile
{
get { return m_profileBackgroundTile; }
set { m_profileBackgroundTile = value; }
}
public Int64 StatusesCount
{
get { return m_statusesCount; }
set { m_statusesCount = value; }
}
public bool Notifications
{
get { return m_notifications; }
set { m_notifications = value; }
}
public bool Following
{
get { return m_following; }
set { m_following = value; }
}
#endregion
#region Constructor
public User(XElement e)
{
m_userID = Int64.Parse(e.Element("user").Element("id").Value);
Name = e.Element("user").Element("name").Value;
ScreenName = e.Element("user").Element("screen_name").Value;
Location = e.Element("user").Element("location").Value;
Description = e.Element("user").Element("description").Value;
ProfileImageURL = e.Element("user").Element("profile_image_url").Value;
Url = e.Element("user").Element("url").Value;
Protected = (!string.IsNullOrEmpty(e.Element("user").Element("protected").Value)) ? bool.Parse(e.Element("user").Element("protected").Value) : false;
FollowersCount = Int64.Parse(e.Element("user").Element("followers_count").Value);
ProfileBackgroundColor = e.Element("user").Element("profile_background_color").Value;
ProfileTextColor = e.Element("user").Element("profile_text_color").Value;
ProfileLinkColor = e.Element("user").Element("profile_link_color").Value;
ProfileSidebarFillColor = e.Element("user").Element("profile_sidebar_fill_color").Value;
ProfileSidebarBorderColor = e.Element("user").Element("profile_sidebar_border_color").Value;
FriendsCount = Int64.Parse(e.Element("user").Element("friends_count").Value);
CreatedAt = Common.ParseDateTime(e.Element("user").Element("created_at").Value);
FavoritesCount = Int64.Parse(e.Element("user").Element("favourites_count").Value);
UTCOffset = e.Element("user").Element("utc_offset").Value;
TimeZone = e.Element("user").Element("time_zone").Value;
ProfileBackgroundImageURL = e.Element("user").Element("profile_background_image_url").Value;
ProfileBackgroundTile = (!string.IsNullOrEmpty(e.Element("user").Element("profile_background_tile").Value)) ? bool.Parse(e.Element("user").Element("profile_background_tile").Value) : false;
StatusesCount = Int64.Parse(e.Element("user").Element("statuses_count").Value);
Notifications = (!string.IsNullOrEmpty(e.Element("user").Element("notifications").Value)) ? bool.Parse(e.Element("user").Element("notifications").Value) : false;
Following = (!string.IsNullOrEmpty(e.Element("user").Element("following").Value)) ? bool.Parse(e.Element("user").Element("following").Value) : false;
}
#endregion
}
Since this is from my Twitter API library, I have created a few methods to make it easier to make the REST API calls from different public methods.
Custom Twitter class
public class Twitter
{
#region Local Variables and Properties
private string m_userName = string.Empty;
private string m_password = string.Empty;
public string UserName
{
get { return m_userName; }
set { m_userName = value; }
}
public string Password
{
get { return m_password; }
set { m_password = value; }
}
#endregion
// .......
// Other code that is shown in this tutorial
}
Post method
private string Post(string url)
{
return PerformRequest("POST", url);
}
Get method
private string Get(string url)
{
return PerformRequest("GET", url);
}
PerformRequest method
/// <summary>
/// Gets the XML data from the request URL
/// </summary>
/// <param name="method">POST or GET</param>
/// <param name="url">URL of Twitter REST API</param>
/// <returns></returns>
private string PerformRequest(string method, string url)
{
string responseString = string.Empty;
WebResponse response = null;
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = method;
request.Credentials = new NetworkCredential(m_userName, m_password);
response = request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
responseString = reader.ReadToEnd();
}
}
catch (Exception ex)
{
responseString = "***ERROR :: " + ex.Message;
}
return responseString;
}
ParseDateTime method
/// <summary>
/// Parses the DateTime from Twitter into a usable DateTime object
/// </summary>
/// <param name="date">Date from Twitter</param>
/// <returns></returns>
private DateTime ParseDateTime(string date)
{
// Twitter's dates are formatted as:
// Tue Apr 07 22:52:51 +0000 2009
string dayOfWeek = date.Substring(0, 3).Trim();
string month = date.Substring(4, 3).Trim();
string dayInMonth = date.Substring(8, 2).Trim();
string time = date.Substring(11, 9).Trim();
string offset = date.Substring(20, 5).Trim();
string year = date.Substring(25, 5).Trim();
string dateTime = string.Format("{0}-{1}-{2} {3}", dayInMonth, month, year, time);
DateTime ret = DateTime.Parse(dateTime);
return ret;
}
So now we will get down to the meat-and-potatoes of the Twitter API.
/// <summary>
/// Gets user's timeline
/// </summary>
/// <returns>Returns a List of UserStatus or null if user is not found</returns>
public List<UserStatus> GetUserTimeLine()
{
string url = string.Format("http://twitter.com/statuses/user_timeline/{0}.xml", m_userName);
string response = Get(url);
List<UserStatus> users = null;
if (!response.Contains("ERROR"))
{
XDocument document = Xdocument.Parse(response, LoadOptions.None);
var query = from e in document.Root.Descendants("status")
select new UserStatus
{
User = new User(e),
StatusCreatedAt = Common.ParseDateTime(e.Element("created_at").Value),
StatusID = Int64.Parse(e.Element("id").Value),
Text = HttpUtility.HtmlDecode(e.Element("text").Value),
Source = e.Element("source").Value,
Truncated = (!string.IsNullOrEmpty(e.Element("truncated").Value)) ? bool.Parse(e.Element("truncated").Value) : false,
InReplyToStatusID = (!string.IsNullOrEmpty(e.Element("in_reply_to_status_id").Value)) ? Int64.Parse(e.Element("in_reply_to_status_id").Value) : 0,
InReplyToUserID = (!string.IsNullOrEmpty(e.Element("in_reply_to_user_id").Value)) ? Int64.Parse(e.Element("in_reply_to_user_id").Value) : 0,
Favorited = (!string.IsNullOrEmpty(e.Element("favorited").Value)) ? bool.Parse(e.Element("favorited").Value) : false,
InReplyToScreenName = e.Element("in_reply_to_screen_name").Value,
};
users = (from u in query
where u.Text != ""
orderby u.StatusCreatedAt descending
select u).ToList();
}
return users;
}
Now to put it all together, we create a simple Form with a button. In that button's click event...
private void btnUserTimeLine_Click(object sender, EventArgs e)
{
Twitter twit = new Twitter();
twit.UserName = "someUserName";
twit.Password = "somePassword";
List<UserStatus> userStatuses = twit.GetUserTimeLine();
if (userStatuses == null)
{
MessageBox.Show("User not found");
return;
}
foreach (UserStatus us in userStatuses)
{
MessageBox.Show(us.User.ScreenName + ": " + us.Text);
}
}
So you now have a foundation for writing your own library for the Twitter API.
**** NOTE ****
The ParseDateTime, PerformRequest, Post, and Get methods were taken from this site:
http://blogs.microso...-time-line.aspx

New Topic/Question



MultiQuote


|