private async static Task Harvest_SingToJehovah_Vocal_Links() { var tasks = new List <Task>(); var languageDiscs = new Dictionary <string, List <string> >(); var languageCodes = new Dictionary <string, string>(); var discCodes = new Dictionary <string, string>(); for (int i = 1; i <= 6; i++) { var currentDisc = string.Format("Disc {0}", i); var currentDiscCode = $"iasnv{i}"; discCodes.Add(currentDiscCode, currentDisc); var harvestLink = $"https://www.jw.org/apps/TRGCHlZRQVNYVrXF?booknum=0&output=json&pub={currentDiscCode}&fileformat=MP3%2CAAC&alllangs=1&langwritten=E&txtCMSLang=E"; var jsonString = await DownloadUtility.GetAsync(harvestLink); var model = JsonConvert.DeserializeObject <dynamic>(jsonString); foreach (var item in model.languages) { var languageCode = item.Name; var language = model.languages[item.Name]["name"].Value; languageCodes[languageCode] = language; await MusicHarverster.HarvestMusicLinks("iasnv", currentDiscCode, languageCode); if (languageDiscs.ContainsKey(languageCode)) { languageDiscs[languageCode].Add(currentDiscCode); } else { languageDiscs[languageCode] = new List <string>(new[] { currentDiscCode }); } } } if (!Directory.Exists($"../../media/Music/Vocals/iasnv")) { Directory.CreateDirectory($"../../media/music/Vocals/iasnv"); } File.WriteAllText($"../../media/Music/Vocals/index.json", JsonConvert.SerializeObject( new [] { new { Key = "iasnv", Value = "Sing to Jehovah (2009)" } })); File.WriteAllText($"../../media/Music/Vocals/iasnv/index.json", JsonConvert.SerializeObject( languageDiscs.Select(x => new { Key = x.Key, Value = languageCodes[x.Key] }).ToList())); foreach (var discs in languageDiscs) { if (!Directory.Exists($"../../media/Music/Vocals/iasnv/{discs.Key}")) { Directory.CreateDirectory($"../../media/Music/Vocals/iasnv/{discs.Key}"); } File.WriteAllText($"../../media/Music/Vocals/iasnv/{discs.Key}/index.json", JsonConvert.SerializeObject( discs.Value.Select(x => new { Key = x, Value = discCodes[x] }))); } }
private async static Task Harvest_Bible_Links() { var tasks = new List <Task>(); var languageEditionsMapping = new Dictionary <string, List <string> >(); var languageCodes = new Dictionary <string, string>(); foreach (var edition in bibleCodes) { var editionCode = edition.Key; var harvestLink = $"https://www.jw.org/apps/TRGCHlZRQVNYVrXF?booknum=0&output=json&pub={editionCode}&fileformat=MP3%2CAAC&alllangs=1&langwritten=E&txtCMSLang=E"; var jsonString = await DownloadUtility.GetAsync(harvestLink); var model = JsonConvert.DeserializeObject <dynamic>(jsonString); foreach (var item in model.languages) { var languageCode = item.Name; var language = model.languages[item.Name]["name"].Value; bool result = false; languageCodes[languageCode] = language; try { result = await BibleHarvester.HarvestBibleLinks(languageCode, editionCode); } catch { } if (result) { if (languageEditionsMapping.ContainsKey(languageCode)) { languageEditionsMapping[languageCode].Add(edition.Key); } else { languageEditionsMapping[languageCode] = new List <string>(new[] { edition.Key }); } } } } if (!Directory.Exists($"../../media/Audio/Bible")) { Directory.CreateDirectory($"../../media/Audio/Bible"); } File.WriteAllText($"../../media/Audio/Bible/languages.json", JsonConvert.SerializeObject( languageEditionsMapping.Select(x => new { Key = x.Key, Value = languageCodes[x.Key] }).ToList())); foreach (var languageEditionsMap in languageEditionsMapping) { if (!Directory.Exists($"../../media/Audio/Bible/{languageEditionsMap.Key}")) { Directory.CreateDirectory($"../media/Audio/Bible/{languageEditionsMap.Key}"); } File.WriteAllText($"../../media/Audio/Bible/{languageEditionsMap.Key}/editions.json", JsonConvert.SerializeObject( languageEditionsMap.Value.Select(x => new { Key = x, Value = bibleCodes[x] }))); } }
internal static async Task <bool> HarvestBibleLinks(string languageCode, string editionCode) { var dir = $"../../media/Audio/Bible/{languageCode}/{editionCode}"; var file = $"{dir}/index.json"; if (File.Exists(file)) { return(true); } var harvestLink = $"https://www.jw.org/apps/TRGCHlZRQVNYVrXF?output=json&pub={editionCode}&fileformat=MP3%2CAAC&alllangs=0&langwritten={languageCode}&txtCMSLang=E"; var jsonString = await DownloadUtility.GetAsync(harvestLink); dynamic model; try { model = JsonConvert.DeserializeObject <dynamic>(jsonString); } catch { return(false); } var bibleBooks = new Dictionary <int, BibleBook>(); var bookFiles = model.files[languageCode].MP3; foreach (var bookFile in bookFiles) { string url = bookFile.file.url; if (bookFile.track == 0 || url.EndsWith(".zip")) { continue; } int bookNumber = bookFile.booknum; if (!bibleBooks.ContainsKey(bookNumber)) { bibleBooks[bookNumber] = new BibleBook() { BookNumber = bookFile.booknum, Name = bookFile.title.ToString().Split('-')[0].Trim() }; } bibleBooks[bookNumber].Chapters.Add(new BibleChapter() { Chapter = $"Chapter {bookFile.track}", Url = bookFile.file.url }); } if (bibleBooks.Count > 0) { if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } File.WriteAllText(file, JsonConvert.SerializeObject(bibleBooks.Select(x => x.Value))); return(true); } return(false); }