Exemplo n.º 1
0
        /// <summary>
        /// Returns the albums URLs referred in the specified URLs.
        /// </summary>
        /// <param name="urls">The URLs.</param>
        private List <String> GetAlbumsUrls(List <String> urls)
        {
            var albumsUrls = new List <String>();

            foreach (String url in urls)
            {
                Log("Retrieving albums referred on " + url, LogType.Info);

                // Retrieve URL HTML source code
                String htmlCode = "";
                using (var webClient = new WebClient()
                {
                    Encoding = Encoding.UTF8
                }) {
                    if (this.userCancelled)
                    {
                        // Abort
                        return(new List <String>());
                    }

                    try {
                        htmlCode = webClient.DownloadString(url);
                    } catch {
                        Log("Could not retrieve data for " + url, LogType.Error);
                        continue;
                    }
                }

                // Get albums referred on the page
                try {
                    albumsUrls.AddRange(BandcampHelper.GetAlbumsUrl(htmlCode));
                } catch (NoAlbumFoundException) {
                    Log("No referred album could be found on " + url + ". Try to uncheck the \"Force download of all albums\" option",
                        LogType.Error);
                    continue;
                }
            }

            return(albumsUrls);
        }
        /// <summary>
        /// Returns the artists discography from any URL (artist, album, track).
        /// </summary>
        /// <param name="urls">The URLs.</param>
        private async Task <List <string> > GetArtistDiscographyAsync(List <string> urls)
        {
            var albumsUrls = new List <string>();

            foreach (string url in urls)
            {
                LogAdded(this, new LogArgs($"Retrieving artist discography from {url}", LogType.Info));

                // Retrieve URL HTML source code
                string htmlCode = "";
                using (var webClient = new WebClient()
                {
                    Encoding = Encoding.UTF8
                }) {
                    ProxyHelper.SetProxy(webClient);

                    if (_cancelDownloads)
                    {
                        // Abort
                        return(new List <string>());
                    }

                    try {
                        htmlCode = await webClient.DownloadStringTaskAsync(url);
                    } catch {
                        LogAdded(this, new LogArgs($"Could not retrieve data for {url}", LogType.Error));
                        continue;
                    }
                }

                // Get artist "music" bandcamp page (http://artist.bandcamp.com/music)
                var regex = new Regex("band_url = \"(?<url>.*)\"");
                if (!regex.IsMatch(htmlCode))
                {
                    LogAdded(this, new LogArgs($"No discography could be found on {url}. Try to uncheck the \"Download artist discography\" option", LogType.Error));
                    continue;
                }
                string artistMusicPage = regex.Match(htmlCode).Groups["url"].Value + "/music";

                // Retrieve artist "music" page HTML source code
                using (var webClient = new WebClient()
                {
                    Encoding = Encoding.UTF8
                }) {
                    ProxyHelper.SetProxy(webClient);

                    if (_cancelDownloads)
                    {
                        // Abort
                        return(new List <string>());
                    }

                    try {
                        htmlCode = await webClient.DownloadStringTaskAsync(artistMusicPage);
                    } catch {
                        LogAdded(this, new LogArgs($"Could not retrieve data for {artistMusicPage}", LogType.Error));
                        continue;
                    }
                }

                // Get albums referred on the page
                regex = new Regex("TralbumData.*\n.*url:.*'/music'\n");
                if (!regex.IsMatch(htmlCode))
                {
                    // This seem to be a one-album artist with no "music" page => URL redirects to the unique album URL
                    albumsUrls.Add(url);
                }
                else
                {
                    // We are on a real "music" page
                    try {
                        albumsUrls.AddRange(BandcampHelper.GetAlbumsUrl(htmlCode));
                    } catch (NoAlbumFoundException) {
                        LogAdded(this, new LogArgs($"No referred album could be found on {artistMusicPage}. Try to uncheck the \"Download artist discography\" option", LogType.Error));
                        continue;
                    }
                }
            }

            return(albumsUrls.Distinct().ToList());
        }
Exemplo n.º 3
0
        /// <summary>
        /// Returns the artists discography from any URL (artist, album, track).
        /// </summary>
        /// <param name="urls">The URLs.</param>
        private List <String> GetArtistDiscography(List <String> urls)
        {
            var albumsUrls = new List <String>();

            foreach (String url in urls)
            {
                Log($"Retrieving artist discography from {url}", LogType.Info);

                // Retrieve URL HTML source code
                String htmlCode = "";
                using (var webClient = new WebClient()
                {
                    Encoding = Encoding.UTF8
                }) {
                    if (webClient.Proxy != null)
                    {
                        webClient.Proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
                    }

                    if (this.userCancelled)
                    {
                        // Abort
                        return(new List <String>());
                    }

                    try {
                        htmlCode = webClient.DownloadString(url);
                    } catch {
                        Log($"Could not retrieve data for {url}", LogType.Error);
                        continue;
                    }
                }

                // Get artist "music" bandcamp page (http://artist.bandcamp.com/music)
                var regex = new Regex("band_url = \"(?<url>.*)\"");
                if (!regex.IsMatch(htmlCode))
                {
                    Log($"No discography could be found on {url}. Try to uncheck the \"Download artist discography\" option", LogType.Error);
                    continue;
                }
                String artistMusicPage = regex.Match(htmlCode).Groups["url"].Value + "/music";

                // Retrieve artist "music" page HTML source code
                using (var webClient = new WebClient()
                {
                    Encoding = Encoding.UTF8
                }) {
                    if (webClient.Proxy != null)
                    {
                        webClient.Proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
                    }

                    if (this.userCancelled)
                    {
                        // Abort
                        return(new List <String>());
                    }

                    try {
                        htmlCode = webClient.DownloadString(artistMusicPage);
                    } catch {
                        Log($"Could not retrieve data for {artistMusicPage}", LogType.Error);
                        continue;
                    }
                }

                // Get albums referred on the page
                regex = new Regex("TralbumData.*\n.*url:.*'/music'\n");
                if (!regex.IsMatch(htmlCode))
                {
                    // This seem to be a one-album artist with no "music" page => URL redirects to the unique album URL
                    albumsUrls.Add(url);
                }
                else
                {
                    // We are on a real "music" page
                    try {
                        albumsUrls.AddRange(BandcampHelper.GetAlbumsUrl(htmlCode));
                    } catch (NoAlbumFoundException) {
                        Log($"No referred album could be found on {artistMusicPage}. Try to uncheck the \"Download artist discography\" option", LogType.Error);
                        continue;
                    }
                }
            }

            return(albumsUrls);
        }
        /// <summary>
        /// Returns the artists discography from any URL (artist, album, track).
        /// </summary>
        /// <param name="urls">The URLs.</param>
        private List <String> GetArtistDiscography(List <String> urls)
        {
            var albumsUrls = new List <String>();

            foreach (String url in urls)
            {
                Log($"Retrieving artist discography from {url}", LogType.Info);

                // Retrieve URL HTML source code
                String htmlCode = "";
                using (var webClient = new WebClient()
                {
                    Encoding = Encoding.UTF8
                }) {
                    if (this.userCancelled)
                    {
                        // Abort
                        return(new List <String>());
                    }

                    try {
                        htmlCode = webClient.DownloadString(url);
                    } catch {
                        Log($"Could not retrieve data for {url}", LogType.Error);
                        continue;
                    }
                }

                // Get artist "music" bandcamp page (http://artist.bandcamp.com/music)
                var regex = new Regex("band_url = \"(?<url>.*)\"");
                if (!regex.IsMatch(htmlCode))
                {
                    Log($"No discography could be found on {url}. Try to uncheck the \"Download artist discography\" option", LogType.Error);
                    continue;
                }
                String artistMusicPage = regex.Match(htmlCode).Groups["url"].Value + "/music";

                // Retrieve artist "music" page HTML source code
                using (var webClient = new WebClient()
                {
                    Encoding = Encoding.UTF8
                }) {
                    if (this.userCancelled)
                    {
                        // Abort
                        return(new List <String>());
                    }

                    try {
                        htmlCode = webClient.DownloadString(artistMusicPage);
                    } catch {
                        Log($"Could not retrieve data for {artistMusicPage}", LogType.Error);
                        continue;
                    }
                }

                // Get albums referred on the page
                try {
                    albumsUrls.AddRange(BandcampHelper.GetAlbumsUrl(htmlCode));
                } catch (NoAlbumFoundException) {
                    Log($"No referred album could be found on {artistMusicPage}. Try to uncheck the \"Download artist discography\" option", LogType.Error);
                    continue;
                }
            }

            return(albumsUrls);
        }
        /// <summary>
        /// Returns the artists discography from any URL (artist, album, track).
        /// </summary>
        /// <param name="urls">The URLs.</param>
        private async Task <List <string> > GetArtistDiscographyAsync(List <string> urls)
        {
            var albumsUrls = new List <string>();

            foreach (string url in urls)
            {
                LogAdded(this, new LogArgs($"Retrieving artist discography from {url}", LogType.Info));

                // Retrieve URL HTML source code
                string htmlCode = "";
                using (var webClient = new WebClient()
                {
                    Encoding = Encoding.UTF8
                }) {
                    ProxyHelper.SetProxy(webClient);

                    if (_cancelDownloads)
                    {
                        // Abort
                        return(new List <string>());
                    }

                    try {
                        htmlCode = await webClient.DownloadStringTaskAsync(url);
                    } catch {
                        LogAdded(this, new LogArgs($"Could not retrieve data for {url}", LogType.Error));
                        continue;
                    }
                }

                // Get artist "music" bandcamp page (http://artist.bandcamp.com/music)

                var    regex           = new Regex("https?://[^/]*");
                string artistPage      = regex.Match(url).ToString();
                string artistMusicPage = artistPage + "/music";

                // Retrieve artist "music" page HTML source code
                using (var webClient = new WebClient()
                {
                    Encoding = Encoding.UTF8
                }) {
                    ProxyHelper.SetProxy(webClient);

                    if (_cancelDownloads)
                    {
                        // Abort
                        return(new List <string>());
                    }

                    try {
                        htmlCode = await webClient.DownloadStringTaskAsync(artistMusicPage);
                    } catch {
                        LogAdded(this, new LogArgs($"Could not retrieve data for {artistMusicPage}", LogType.Error));
                        continue;
                    }
                }

                int count = albumsUrls.Count;
                try {
                    albumsUrls.AddRange(BandcampHelper.GetAlbumsUrl(htmlCode, artistPage));
                } catch (NoAlbumFoundException) {
                    LogAdded(this, new LogArgs($"No referred album could be found on {artistMusicPage}. Try to uncheck the \"Download artist discography\" option", LogType.Error));
                }
                if (albumsUrls.Count - count == 0)
                {
                    // This seem to be a one-album artist with no "music" page => URL redirects to the unique album URL
                    albumsUrls.Add(url);
                }
            }

            return(albumsUrls.Distinct().ToList());
        }