Wednesday, January 13, 2010 11:00 PM Frozzare

Twitter status HtmlHelper

Detta är del ett av två inlägg.

Jag upptäckte i mitt tidigare inlägg hur användbart Htmlhelper var och därför bestämde jag mig för att göra en till. Nämligen en som hämtar det senaste Twitter status(ar) från din Twitter. Vi börjar med att skapa ett nytt ASP.NET 1 (2 Beta) projekt, skapar sedan en mapp som heter “Helpers” och där skapar vi en klass som vi döper till “Html.cs”.Varför vi inte döper den till “HtmlHelper.cs” är för att då kommer det krocka med “HtmlHelper.cs” som redan finns och som vi kommer använda oss av.

Vi får ändra våran Html klass till statisk, “public static class Html”. Vi skapar en statisk sträng som vi döper till “TwitterStatus”. Början av kodstycket ser ut såhär.

public static string TwitterStatus(this HtmlHelper helper, int numberOfMessages, string username, bool splitUserNameAndLink)
{
      StringBuilder sb = new StringBuilder();

sb.AppendLine("<ul>");
username = username.ToLower();

“numberOfMessages” är antal Twitter statusar vi vill visa, det går att visa mellan 0-20 stycken. “username” är alltså vårat användarnamn på Twitter. “splitUserNameAndLink” kommer jag till längre ner. Vi behöver inkludera namespacet “System.Xml.Linq” för att funktionen nedan ska fungera.

public static List<Twitter> FetchTwitterStatus(string username, int numberOfMessages)
{

string user = username;
var messages = new List<Twitter>();
string url = "http://twitter.com/statuses/user_timeline/" + user + ".rss";
try
{
var doc = XElement.Load(url);
var children = (from item in doc.Element("channel").Elements("item") select item).Take(numberOfMessages);

foreach (XElement elm in children)
{
Twitter tw = new Twitter();
tw.Status = elm.Element("description").Value;
tw.DateDiff = DateTime.Parse(elm.Element("pubDate").Value).ToLongDateString();
tw.Link = elm.Element("link").Value;
messages.Add(tw);
}
}
catch (Exception)
{
throw new ArgumentException("No twitter rss");
}
return messages;
}
public class Twitter
{
      public string Status { get; set; }
public string Link { get; set; }
public string DateDiff { get; set; }
}

Nu blev det mycket kod. Vi har alltså skapat en List<T> funktion, där <T> är klassen Twitter. Vi har våran “username” sträng från tidigare och “numberOfMessages”. Längre ner i kodstycket har vi en try {…}. Där vi laddar in våran xml fil, alltså Twitter rss. Med hjälp av Linq to XML så tar vi oss in en bit i xml upplägget och sen kan vi börja plocka ut det vi vill ha. I “foreache” loopen så plockar vi ut statusen, datumet och länken och lägger sedan till i våran “messages” lista som skapades tidigare.

Skulle den inte finna användaren eller något annat dyker upp. Så får vi ett fel “No twitter rss”. Då brukar det vara något fel på användarnamnet eller så är det något problem hos Twitter (vilket inte händer så ofta). Men skulle vi inte få något fel så returnar vi “messages” och får alltså ut det antal statusar vi vill.

Nu kan vi bygga klart våran funktion som vi höll på med.

     foreach (var item in FetchTwitterStatus(username, numberOfMessages))
{
if (splitUserNameAndLink)
{
string splitStatus = item.Status.Remove(0, username.Length + 1);
string userName = item.Status.Remove(username.Length + 1, splitStatus.Length);

sb.AppendLine(String.Format("<li>{0} <a href=\"{1}\">{2}</a> - {3}</li>", userName, item.Link, splitStatus, item.DateDiff));
}
else
{
sb.AppendLine(String.Format("<li><a href=\"{0}\">{1}</a> - {2}</li>", item.Link, item.Status, item.DateDiff));
}
}

sb.AppendLine("</ul>");

return sb.ToString();
}

Nu så kan vi komma tillbaks till “splitUserNameLink”, om den sätts till “true” så har jag gjort så att den tar bort användarnamnet från länken och skriver det före länken, Användarnamn: Länken till min status – datumet. Annars om den sätts till “false” så blir allt förutom datumet en länk till den statusen. När vi sedan har plockat ut allt från “FetchTwitterStatus” så kan vi returnar våran TwitterStatus HtmlHelper.

För att visa detta nu så lägger vi till “Import Namespace=”DittProjekt.Helpers””. För att sedan kunna skriva ut detta.

<%= Html.TwitterStatus(5, "användarnamn", true) %>

Där 5 är ett nummer mellan 0-20. Nu bör vi få ett resultat liknande detta:

Med “splitUserNameAndLink” satt till “true”

twitter-1-20100113

Med “splitUserNameAndLink” satt till “false”

twitter-2-20100113

Jag kommer göra en efterföljare på detta inlägg, där jag kommer ta upp mer om hur man kan arbeta med flera användarkonton och hur man gör det lättare att styra layouten.

Filed under: , ,

Comments

# re: Twitter status HtmlHelper

Wednesday, April 20, 2011 7:14 PM by weblogs.asp.net

Twitter status htmlhelper.. Nice :)

# re: Twitter status HtmlHelper

Saturday, May 07, 2011 1:49 AM by weblogs.asp.net

Twitter status htmlhelper.. Dandy :)

# re: Twitter status HtmlHelper

Monday, June 20, 2011 5:43 PM by weblogs.asp.net

Twitter status htmlhelper.. Neat :)

# re: Twitter status HtmlHelper

Sunday, January 06, 2013 2:34 AM by john

# re: Twitter status HtmlHelper

Wednesday, January 23, 2013 3:35 AM by Autumn

Where are you from? <a href=" http://blog.ifuller1.info ">abilify 2mg tablets</a>  monetary requests at bay if you go on a walk. Ask for help before walking them. Strength is a plus.

# re: Twitter status HtmlHelper

Wednesday, January 23, 2013 5:20 PM by Kyle

What do you want to do when you've finished? <a href=" http://www.info-kod.ba ">much does clomid iui cost</a>  UB Consulted prescriber and changed dose

# re: Twitter status HtmlHelper

Friday, January 25, 2013 12:39 PM by Caroline

How much notice do you have to give? <a href=" http://serdika.com.ar/ ">cymbalta alternative</a>  needs to refer the patient to a health care provider who will assist them in obtaining these

# re: Twitter status HtmlHelper

Tuesday, March 12, 2013 6:55 AM by Benjamin

Could you tell me the dialing code for ? <a href=" http://serdika.com.ar/ ">cymbalta xr</a>  4.0 OVERRIDE PROCESSING (Rev. 10/08)

# re: Twitter status HtmlHelper

Saturday, March 23, 2013 8:23 AM by Sarah

I can't get through at the moment <a href=" http://akronfilm.com ">seroquel canada price</a>  0042663 00002411260 5.000 BB12345K FREDERICKS 04/15/07 07267-000000437-2-1100.00100.00 PAID

# re: Twitter status HtmlHelper

Saturday, March 30, 2013 5:47 PM by Plank

Please call back later <a href=" www.refractories-worldforum.com ">buy trazodone sleep</a>  (error) numeric code(s) that caused the claim to deny or pend. Some edit codes may

# re: Twitter status HtmlHelper

Saturday, April 06, 2013 5:10 AM by patrik

# re: Twitter status HtmlHelper

Tuesday, April 09, 2013 4:19 PM by Julian

Who's calling? <a href=" http://ittybiz.com/about/ ">what is in strattera</a>  spelling errors; follow; provides spelling errors; occasional includes all

Leave a Comment

(required) 
(required) 
(optional)
(required)