public IEnumerable <FbStatus> GetStatusses(int pageSize) { Authenticate(); string call_id = GetNextCallNr(); string limit = pageSize.ToString(); Dictionary <string, string> requestParams = new Dictionary <string, string>(); requestParams.Add("method", "stream.get"); requestParams.Add("api_key", apiKey); requestParams.Add("session_key", sessionKey); requestParams.Add("call_id", call_id); requestParams.Add("source_ids", ""); requestParams.Add("v", "1.0"); requestParams.Add("limit", limit); var result = channel.GetStream(apiKey, sessionKey, call_id, GenerateSignature(requestParams, sessionSecret), "", limit); XNamespace ns = result.GetDefaultNamespace(); foreach (XElement element in result.Descendants(ns + "stream_post")) { var status = new FbStatus(); try { var id = element.Element(ns + "actor_id").Value; var userElement = result.Descendants(ns + "profile").First(p => p.Element(ns + "id").Value == id); status.From = new SourceAddress(id, userElement.Element(ns + "name").Value, userElement.Element(ns + "pic_square").Value); if (element.Element(ns + "target_id") != null && !String.IsNullOrEmpty(element.Element(ns + "target_id").Value)) { var toid = element.Element(ns + "target_id").Value; if (!String.IsNullOrEmpty(toid)) { var toUserElement = result.Descendants(ns + "profile").First(p => p.Element(ns + "id").Value == toid); status.To = new SourceAddress(toid, toUserElement.Element(ns + "name").Value, toUserElement.Element(ns + "pic_square").Value); } } status.Uid = Int64.Parse(element.Element(ns + "actor_id").Value); status.StatusId = element.Element(ns + "post_id").Value; status.Message = element.Element(ns + "message").Value; status.DateCreated = Int64.Parse(element.Element(ns + "created_time").Value).ToUnixTime(); foreach (var commentElement in element.Descendants(ns + "comment")) { var comment = new FbStatus(); var commentid = commentElement.Element(ns + "fromid").Value; var commentUserElement = result.Descendants(ns + "profile").First(p => p.Element(ns + "id").Value == commentid); comment.From = new SourceAddress(commentid, commentUserElement.Element(ns + "name").Value, commentUserElement.Element(ns + "pic_square").Value); comment.Uid = Int64.Parse(commentElement.Element(ns + "fromid").Value); comment.StatusId = commentElement.Element(ns + "id").Value; comment.Message = commentElement.Element(ns + "text").Value; comment.DateCreated = Int64.Parse(commentElement.Element(ns + "time").Value).ToUnixTime(); status.Comments.Add(comment); } foreach (var attachmentElement in element.Descendants(ns + "stream_media")) { var attachment = new FbAttachment(); attachment.MediaType = (FbMediaType)Enum.Parse(typeof(FbMediaType), attachmentElement.Element(ns + "type").Value, true); switch (attachment.MediaType) { case FbMediaType.Link: { attachment.TargetUrl = HttpUtility.HtmlDecode(attachmentElement.Element(ns + "href").Value); attachment.PreviewAltText = HttpUtility.HtmlDecode(attachmentElement.Element(ns + "alt").Value); attachment.PreviewImageUrl = HttpUtility.HtmlDecode(attachmentElement.Element(ns + "src").Value); break; } case FbMediaType.Photo: { attachment.TargetUrl = HttpUtility.HtmlDecode(attachmentElement.Element(ns + "href").Value); attachment.PreviewAltText = HttpUtility.HtmlDecode(attachmentElement.Element(ns + "alt").Value); attachment.PreviewImageUrl = HttpUtility.HtmlDecode(attachmentElement.Element(ns + "src").Value); break; } case FbMediaType.Video: { var src = new Uri(attachmentElement.Element(ns + "src").Value); var uriParams = NameValueParser.GetCollection(src.Query, "&"); attachment.TargetUrl = HttpUtility.HtmlDecode(attachmentElement.Element(ns + "video").Element(ns + "display_url").Value); attachment.PreviewAltText = HttpUtility.HtmlDecode(attachmentElement.Element(ns + "alt").Value); attachment.PreviewImageUrl = HttpUtility.UrlDecode(uriParams["url"]); break; } } status.Attachments.Add(attachment); } } catch (Exception ex) { Logger.Error("Unable to retreive user source address. Result = {0}. Exception = {1}", LogSource.Channel, element.Value, ex); continue; } yield return(status); } }