private static IEnumerable<Album> LoadAlbums(string url, Repository googleRepository) { XmlDocument xmlDocument = LoadXmlDocument(url); if (xmlDocument == null) { return null; } var nodes = (from n in xmlDocument.ChildNodes[1].ChildNodes.Cast<XmlNode>() where n.Name == "entry" select n).ToList(); var albums = new List<Album>(); foreach (var node in nodes) { var mediaNode = (from n in node.ChildNodes.Cast<XmlNode>() where n.Name == "media:group" select n).SingleOrDefault(); var description = ""; try { description = (from n in mediaNode.ChildNodes.Cast<XmlNode>() where n.Name == "media:description" select n).SingleOrDefault().InnerText; } catch { } var thumbnailNode = (from n in mediaNode.ChildNodes.Cast<XmlNode>() where n.Name == "media:thumbnail" select n).SingleOrDefault(); var title = (from n in node.ChildNodes.Cast<XmlNode>() where n.Name == "title" select n.InnerText).SingleOrDefault(); var albumId = (from n in node.ChildNodes.Cast<XmlNode>() where n.Name == "id" select n.InnerText).SingleOrDefault().ToLower(); var index = albumId.IndexOf("albumid/"); albumId = albumId.Remove(0, index + 8); var coverUrl = (from a in thumbnailNode.Attributes.Cast<XmlAttribute>() where a.Name == "url" select a.Value).SingleOrDefault(); var coverPhoto = new Photo { Url = coverUrl, AlbumId = albumId, PreviewUrl = coverUrl, }; var album = new Album(googleRepository) { UserName = googleRepository.GoogleAccount.PicasaUserName, UserId = googleRepository.GoogleAccount.PicasaUserName, Id = albumId, Title = title, CoverPhoto = coverPhoto, Description = description }; albums.Add(album); } return albums; }
public static IEnumerable<Photo> LoadPhotoListFromAlbumXml(XmlDocument xmlDocument, string albumId, string userId) { if (xmlDocument == null || String.IsNullOrEmpty(xmlDocument.InnerXml)) { return new List<Photo>(); } var nodes = (from n in xmlDocument.ChildNodes[1].Cast<XmlNode>().ToList() where n.Name == "entry" select n).ToList(); var result = new List<Photo>(); foreach (var node in nodes) { var title = (from n in node.ChildNodes.Cast<XmlNode>() where n.Name == "title" select n.InnerText).SingleOrDefault(); var timeStamp = (from n in node.ChildNodes.Cast<XmlNode>() where n.Name == "published" select DateTime.Parse(n.InnerText)).SingleOrDefault(); var id = (from n in node.ChildNodes.Cast<XmlNode>() where n.Name == "id" select n.InnerText).SingleOrDefault().ToLower(); id = id.ToLower().Replace(String.Format("http://picasaweb.google.com/data/entry/base/user/{0}/albumid/{1}/photoid/", userId, albumId).ToLower(), String.Empty); id = id.Replace("?hl=en_us", String.Empty); var mediaNode = (from n in node.ChildNodes.Cast<XmlNode>() where n.Name == "media:group" select n).SingleOrDefault(); var mediaAttributes = (from n in mediaNode.ChildNodes.Cast<XmlNode>() where n.Name == "media:content" select n.Attributes.Cast<XmlAttribute>().ToList()).SingleOrDefault(); var url = (from a in mediaAttributes where a.Name == "url" select a.Value).SingleOrDefault(); var width = (from a in mediaAttributes where a.Name == "width" select int.Parse(a.Value)).SingleOrDefault(); var height = (from a in mediaAttributes where a.Name == "height" select int.Parse(a.Value)).SingleOrDefault(); var thumbnailNode = (from n in mediaNode.ChildNodes.Cast<XmlNode>() where n.Name == "media:thumbnail" select n).FirstOrDefault(); var smalUrl = thumbnailNode.Attributes.GetNamedItem("url").Value; smalUrl = smalUrl.Replace("s72", "s144").Replace("s288", "s144").Replace("s640", "s144"); var photo = new Photo { Id = id, AlbumId = albumId, Title = title, TimeStamp = timeStamp, Url = url, Size = new Size(width, height), PreviewUrl = smalUrl, //Description = picasaEntry.Summary.Text, Description = "" }; result.Add(photo); } return result; }
public virtual Album GetAlbum(string albumId) { Album album; //if (Albums != null && Albums.Count() != 0) //{ // album = Albums.FirstOrDefault(x => x.Id == albumId); //} //else //{ var key = CreateCacheKey(albumId); album = Cache[key] as Album; if (album == null) { var url = String.Format( "https://picasaweb.google.com/data/feed/base/user/{0}/albumid/{1}?alt=rss&kind=photo", GoogleAccount.PicasaUserName, albumId); try { var xmlDocument = LoadXmlDocument(url); var rss = X.Web.RSS.RssDocument.Load(xmlDocument.InnerXml); var title = rss.Channel.Title; var description = rss.Channel.Description; var coverPhoto = new Photo { Url = rss.Channel.Image.Url.UrlString, AlbumId = albumId, PreviewUrl = rss.Channel.Image.Url.UrlString, }; album = new Album(this) { UserName = GoogleAccount.PicasaUserName, UserId = GoogleAccount.PicasaUserName, Id = albumId, Title = title, CoverPhoto = coverPhoto, Description = description }; Cache[key] = album; } catch { } } //} return album; }