예제 #1
0
        private void ExportAlbum(Album album)
        {
            var path = Path.Combine(OutputDirectory, CleanPathName(album.Title));
            Directory.CreateDirectory(path);
            album.Path = path;
            var page = 1;

            var xml = new XDocument();
            var rootNode = new XElement("Album",
                new XAttribute("id", album.Id),
                new XAttribute("date", album.Date),
                new XAttribute("url", album.Url),
                new XAttribute("title", album.Title)
            );
            xml.Add(rootNode);

            // Loops until no more pages are left
            while (true)
            {
                var albumPage = GetAlbumPage(album, page);

                // Try to find the list of photos on this page
                var photoList = albumPage.GetElementbyId("photoList");
                // Process photos in background threads
                var photos = new ConcurrentQueue<Photo>();
                Parallel.ForEach(photoList.Descendants("a"), node => ExportAlbumPhoto(node, photos, path));
                album.Photos = photos.ToList();

                // Stop looping if there's no photos left.
                if (photos.Count == 0)
                    break;

                foreach (var photo in photos)
                {
                    rootNode.Add(new XElement("Photo",
                        new XAttribute("url", photo.Url),
                        new XAttribute("filename", photo.Filename),
                        photo.Caption
                    ));
                }

                page++;
            }

            xml.Save(Path.Combine(path, "index.xml"));
        }
예제 #2
0
        private HtmlDocument GetAlbumPage(Album album, int page)
        {
            var client = new WebClient();
            //var albumPage = new HtmlDocument();
            //albumPage.LoadHtml(client.DownloadString(album.Url));

            // TODO: No clue what this is - This seems to work though (taken from logging requests on MySpace)
            client.Headers.Add("Hash", "MIGuBgkrBgEEAYI3WAOggaAwgZ0GCisGAQQBgjdYAwGggY4wgYsCAwIAAQICZgMCAgDABAjxk%2fqvtBqGGwQQUc%2fM6FamnbvPgW07TDo%2bGARgibOOx9JuS4eVLj6D6xHR2UJE5uheOK%2brQBfJQOxXreYejDJC%2fa5G3nBJRCpCRZA%2byyQfYNSwGwxipWNrEkIGCrcdDsiKTDeuE6sXGVvrM2iP5XtjGDGTjXhry6Q8Lc6%2f");

            NameValueCollection formValues = new NameValueCollection();
            formValues.Add("PageNo", page.ToString());
            formValues.Add("typeid", "11003");
            formValues.Add("albumId", album.Id.ToString());

            var response = client.UploadValues(ALBUM_PAGE_URL, "POST", formValues);
            var doc = new HtmlDocument();
            doc.LoadHtml(Encoding.UTF8.GetString(response));
            return doc;
        }