public static ArtistInfo ParseArtistPage(SetlistInfo parent) { /* Get main info from artist page. * * * Input: SetlistInfo object of one artist. * * Output: ArtistInfo object * (see info in ArtistInfo.cs) */ List <string> songs = new List <string>(); Dictionary <string, List <string> > tours = new Dictionary <string, List <string> >(); List <string> albums = new List <string>(); string albumsLink = ""; HtmlWeb webDoc = new HtmlWeb(); HtmlDocument doc = webDoc.Load("https://www.setlist.fm/" + parent.artistLink); HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//a"); foreach (var tag in nodes) { if (tag.Attributes.Contains("class") && tag.Attributes["class"].Value == "songName" && !songs.Contains(tag.InnerText)) { var name = clean(tag.InnerText.Trim()); songs.Add(name); } if (tag.Attributes.Contains("title") && tag.Attributes["title"].Value.StartsWith("Show song statistics of the tour", StringComparison.Ordinal)) { var name = clean(tag.InnerText.Trim()); tours.Add(name, ParseTourPage(tag.Attributes["href"].Value)); } if (tag.Attributes.Contains("title") && tag.Attributes["title"].Value.EndsWith("albums", StringComparison.Ordinal)) { albumsLink = tag.Attributes["href"].Value.Replace("../", ""); } } albums = ParseAlbumPage(albumsLink); ArtistInfo artist = new ArtistInfo(parent.bandName, songs, tours, albums); return(artist); }
public static SetlistInfo ParseSetlistPage(string link, string bandName) { /* Get main info from setlist page * of one artist. * * Input: link on setlist and name of * setlist artist. * * Output: SetlistInfo object * (see info in SetlistInfo.cs) */ List <string> songs = new List <string>(); string artistLink = ""; HtmlWeb webDoc = new HtmlWeb(); HtmlDocument doc = webDoc.Load("https://www.setlist.fm/" + link); HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//a"); foreach (var tag in nodes) { if ((tag.Attributes.Contains("class") && tag.Attributes["class"].Value == "summary url") || (tag.Attributes.Contains("title") && tag.Attributes["title"].Value.StartsWith("Statistics for", StringComparison.Ordinal)) && !songs.Contains(tag.InnerText)) { var name = clean(tag.InnerText.Trim()); songs.Add(name); } if (tag.Attributes.Contains("title") && tag.Attributes["title"].Value == "View song statistics of all setlists") { artistLink = tag.Attributes["href"].Value.Replace("../", ""); } } if (songs.Count == 0) { songs.Add("Nothing"); } SetlistInfo obj = new SetlistInfo(bandName, artistLink, songs); return(obj); }
public static void OneSetlistInfo(string path) { SetlistInfo check = ParseSetlistPage(Globals.MainPageInfo[0].link, Globals.MainPageInfo[0].bandName); ArtistInfo artist = ParseArtistPage(check); string str = $"Artist name: {artist.bandName}\n\n"; str += "------------------------------"; str += "All songs\n"; foreach (var song in artist.songs) { str += song; str += "\n"; } str += "------------------------------"; str += "Tours\n"; foreach (KeyValuePair <string, List <string> > keyValue in artist.tours) { str += keyValue.Key; str += "\n"; foreach (var song in keyValue.Value) { str += $" {song}\n"; } str += "\n"; } str += "------------------------------"; str += "Albums\n"; foreach (var album in artist.albums) { str += album; str += "\n"; } str += "------------------------------"; str += "Setlist songs\n"; foreach (var song in check.songs) { str += song; str += "\n"; } File.WriteAllText(path, str); }