public Status[] Search(string query, ulong since_id) { try { var list = new List<Status>(); using (var reader = XmlReader.Create(string.Format("{2}search.atom?q={0}&since_id={1}&rpp=100&lang=ja", Uri.EscapeDataString(query), since_id, SearchApiUrl))) { var doc = XDocument.Load(reader); var xmlns = XNamespace.Get("http://www.w3.org/2005/Atom"); var twitter = XNamespace.Get("http://api.twitter.com/"); var statuses = from entry in doc.Descendants(xmlns + "entry") let id = entry.Element(xmlns + "id") let author = entry.Element(xmlns + "author") let name = author.Element(xmlns + "name") let link = entry.Elements(xmlns + "link").Where(p => p.Attribute("rel").Value == "image").First() select new Status { ID = ulong.Parse(id.Value.Substring(id.Value.LastIndexOf(':') + 1)), CreatedAt = DateTime.Parse(entry.Element(xmlns + "published").Value), Text = entry.Element(xmlns + "title").Value, Source = entry.Element(twitter + "source").Value, Sender = new User { Name = name.Value.Substring(name.Value.IndexOf(' ') + 2, name.Value.Length - name.Value.IndexOf(' ') - 3), ScreenName = name.Value.Remove(name.Value.IndexOf(' ')), ImageUrl = link.Attribute("href").Value } }; list.AddRange(statuses); } list.ForEach(item => { item.IsAuthor = item.Sender.ScreenName == LoginedUser.ScreenName; }); return list.ToArray();// list.AsParallel().Where((status) => Properties.Settings.Default.GlobalFilter.Count != 0 ? Properties.Settings.Default.GlobalFilter.AsParallel().All((filter) => filter.Process(status)) : true).ToArray(); } catch { return Statuses.Empty; } }
private List[] GetListsSubscription(string name) { try { long cursor = -1; var lists = new List<List>(); while (true) { var response = Get(string.Format("{1}1/{0}/lists/subscriptions.xml", name, ApiBaseUrl), new { cursor = cursor }); var xd = XDocument.Parse(response); var temp = from p in xd.Descendants("list") select new List { ID = (int)p.Element("id"), Name = "@" + (string)p.Element("user").Element("screen_name") + "/" + (string)p.Element("name"), ScreenName = (string)p.Element("user").Element("screen_name") }; lists.AddRange(temp); var element = xd.Descendants("next_cursor").FirstOrDefault(); if (element == null) { break; } var nextCursor = (long)element; if (nextCursor == 0) { break; } cursor = nextCursor; } return lists.ToArray(); } catch { return new List[0]; } }
public User[] GetListUsers(string name, int id) { try { long cursor = -1; var users = new List<User>(); while (true) { var response = Get(string.Format("{2}1/{0}/{1}/members.xml", name, id, ApiBaseUrl), new { cursor = cursor }); var xd = XDocument.Parse(response); var temp = from p in xd.Descendants("user") select new User { ID = (int)p.Element("id"), ScreenName = (string)p.Element("screen_name") }; users.AddRange(temp); var element = xd.Descendants("next_cursor").FirstOrDefault(); if (element == null) { break; } var nextCursor = (long)element; if (nextCursor == 0) { break; } cursor = nextCursor; } return users.ToArray(); } catch { return Users.Empty; } }