contender59
Messages postés3Date d'inscriptionlundi 18 juin 2012StatutMembreDernière intervention27 juin 2012
-
18 juin 2012 à 11:13
contender59
Messages postés3Date d'inscriptionlundi 18 juin 2012StatutMembreDernière intervention27 juin 2012
-
18 juin 2012 à 16:02
Bonjour a tous!
Merci de m'accorder un peu de votre temps
J'ai une petite methode qui récupère des tweets sur Twitter en fonction d'un tag particulier.
J'aimerai rendre cette méthode Asynchrone pour quel ne freeze pas toute mon application.
public static List<Tweet> GetSearchResults(string searchString)
{
using (WebClient web = new WebClient())
{
//More parameters then this. Most important is the page paramater. You can &page=1 to xxx.
//few parameters in the url : &rpp=100 for 100answer | %23 for hashtag | lang=en for english msg......
// exemple: http://search.twitter.com/search.atom?lang=en&rpp=100&q=%23AnHashTag-filter:retweets
// -filter:retweets delete duplicates
string url = string.Format("http://search.twitter.com/search.atom?lang=en&q=%23{0}", searchString); //HttpUtility.UrlEncode(searchString)
WebClient client = new WebClient();
#region AsABrowser
//Pretend to be Google Chrome
//Pretending to be a browser instead of an app seems to make twitter respond faster
client.Headers.Add("Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
client.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3");
client.Headers.Add("Accept-Language: en-US,en;q=0.8");
client.Headers.Add("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16");
#endregion
#region TweetFormat
XDocument doc = XDocument.Load(url);
XNamespace ns = "http://www.w3.org/2005/Atom";
List<Tweet> tweets = (from item in doc.Descendants(ns + "entry")
select new Tweet
{
Id = item.Element(ns + "id").Value,
Published = DateTime.Parse(item.Element(ns + "published").Value),
Title = item.Element(ns + "title").Value,
Content = item.Element(ns + "content").Value,
Link = (from XElement x in item.Descendants(ns + "link")
where x.Attribute("type").Value == "text/html"
select x.Attribute("href").Value).First(),
Image = (from XElement x in item.Descendants(ns + "link")
where x.Attribute("type").Value == "image/png"
select x.Attribute("href").Value).First(),
Author = new Author()
{
Name = item.Element(ns + "author").Element(ns + "name").Value,
Uri = item.Element(ns + "author").Element(ns + "uri").Value
}
}).ToList();
return tweets;
#endregion
}
}
J'ai regardé pas mal d'explication sur le net, mais rien me permettant de récupérer ma list de tweet a la fin.
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 18 juin 2012 à 14:51
Salut,
Le problème de l'asynchrone est surtout de se remettre sur le thread graphique pour l'affichage des résultats.
Déjà, un moyen très simple : la classe BackgroundWorker.
Tu crées un champ List<Tweet> dans ta classe. Tu mets les résultats de ta méthode dans ce champ.
Tu abonnes ta méthode (ou tu abonnes une méthode qui appelle ta méthode) à l'événement DoWork du BackgroundWorker.
Tu abonnes ensuite la méthode qui affiche les résultats (depuis le champ que je t'ai demandé de créer) à l'événement RunWorkerCompleted.
Une fois que c'est fait, lorsque tu veux lancer ta recherche asynchrone, tu appelles juste monBackgroundWorker.RunWorkerAsync();
Krimog : while (!(succeed = try())) ; - Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -