Exemple #1
0
        public Official(StandardTitle title)
        {
            var config = new ConfigurationBuilder()
                         .SetBasePath(System.IO.Directory.GetCurrentDirectory()) //From NuGet Package Microsoft.Extensions.Configuration.Json
                         .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                         .Build();

            var servicesProvider = DeezerSync.Log.Logging.BuildDi(config);

            using (servicesProvider as IDisposable)
            {
                log = servicesProvider.GetRequiredService <NLogger>();
            }

            this.title = title;
            if (title.search_stage == 0)
            {
                log.Debug("Send Request with Artist: " + title.artist ?? title.username + " Track: " + title.title + " Duration: " + title.duration);
                Request_Query = Official_api + "artist:" + "\"" + WebUtility.UrlEncode(title.artist.Trim() ?? title.username.Trim()) + "\" " + "track:" + "\"" + WebUtility.UrlEncode(title.title.Trim());
            }
            else
            {
                if (title.search_stage == 1)
                {
                    log.Debug("Send Request with Artist: " + title.artist ?? title.username + " Track: " + title.title + " Duration: " + title.duration);
                    Request_Query = Official_api + "artist:" + "\"" + WebUtility.UrlEncode(title.artist.Trim() ?? title.username.Trim()) + "\" " + "track:" + "\"" + WebUtility.UrlEncode(title.title.Trim()) + "\" " + "dur_min:" + (title.duration - 1).ToString() ?? "0" + " dur_max:" + (title.duration + 1).ToString() ?? "999";
                }
                if (title.search_stage == 2)
                {
                    if (title.isRemix)
                    {
                        log.Debug("Send Request with Remix Artist: " + title.remixArtist ?? title.username + " Track: " + title.title + " Duration: " + title.duration);
                        Request_Query = Official_api + "artist:" + "\"" + WebUtility.UrlEncode(title.remixArtist.Trim() ?? title.artist.Trim() ?? title.username.Trim()) + "\" " + "track:" + "\"" + WebUtility.UrlEncode(title.title.Trim()) + "\" " + "dur_min:" + (title.duration - 1).ToString() ?? "0" + " dur_max:" + (title.duration + 1).ToString() ?? "999";
                    }
                    else
                    {
                        log.Debug("Send Request with Artist: " + title.artist ?? title.username + " Track: " + title.title + " Duration: " + title.duration);
                        Request_Query = Official_api + "artist:" + "\"" + WebUtility.UrlEncode(title.artist.Trim() ?? title.username.Trim()) + "\" " + "track:" + "\"" + WebUtility.UrlEncode(title.title.Trim()) + "\" " + "dur_min:" + (title.duration - 1).ToString() ?? "0" + " dur_max:" + (title.duration + 1).ToString() ?? "999";
                    }
                }
                else
                {
                    if (title.search_stage == 3)
                    {
                        log.Debug("Send Request with Track: " + title.artist ?? title.username + " " + title.title);
                        Request_Query = Official_api + WebUtility.UrlEncode(title.artist.Trim() ?? title.username.Trim() + " " + title.title.Trim());
                    }
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Execute the Deezer Search Query
        /// </summary>
        /// <param name="query">Prepared StandardTitel Object</param>
        /// <returns></returns>
        protected async Task <List <StandardTitle> > ExecuteQuery(StandardTitle query)
        {
            try
            {
                /*
                 * Deezer Private API
                 *
                 * DeezerAPI.Private api = new DeezerAPI.Private();
                 * if (query.isRemix)
                 * {
                 *  return await api.SearchQuery(query.username + " " + query.title + " " + query.labelname);
                 * }
                 * return await api.SearchQuery(query.username + " " + query.title);
                 */

                // Deezer Public API
                DeezerAPI.Official  api = new DeezerAPI.Official(query);
                ResultSearch.Search res = await api.Search();

                log.Info("Found " + res.Data.Count + " Tracks");
                if (res.Data.Count > 0)
                {
                    List <StandardTitle> tracks = new List <StandardTitle>();
                    Prepare p = new Prepare();
                    foreach (var i in res.Data)
                    {
                        tracks.Add(await p.PrepareDeezerQuery(new StandardTitle {
                            description = string.Empty, duration = (int)i.Duration, genre = string.Empty, id = i.Id.Value, labelname = string.Empty, search_stage = 0, title = i.Title, username = i.Artist.Name, artist = i.Artist.Name, url = i.Link.AbsoluteUri
                        }));
                    }
                    return(tracks);
                }
                return(new List <StandardTitle>());
            }
            catch (Exception e)
            {
                log.Warning("Search Query Exception: " + e.Message, e);
                return(new List <StandardTitle>());
            }
        }
Exemple #3
0
        /// <summary>
        /// Remove special chars to improve seach results
        /// </summary>
        /// <param name="input">StandardTitel Object</param>
        /// <returns></returns>
        public async Task <StandardTitle> PrepareDeezerQuery(StandardTitle input)
        {
            // Remove unsearchable Char
            if (input.title.Contains("&"))
            {
                log.Debug("Remove '&' from Title " + input.title);
                input.title = Regex.Replace(input.title, "&", "", RegexOptions.IgnoreCase).Trim();
            }

            if (input.username.Contains("&"))
            {
                log.Debug("Remove '&' from Artist" + input.username);
                input.username = Regex.Replace(input.username, "&", "", RegexOptions.IgnoreCase);
            }

            // Remix Detection + Set Remix Artist as label
            if (Regex.Match(input.title, @"Remix", RegexOptions.IgnoreCase).Success)
            {
                log.Info(input.title + " is Remix");
                input.isRemix = true;
                Match m = Regex.Match(input.title, @"(\(|\[).*Remix*(\)|\])", RegexOptions.IgnoreCase);
                if (m.Success)
                {
                    // Split track replace remix entry with the clean remix artist
                    string regex = Regex.Replace(input.title, @"(\(|\[).*Remix*(\)|\])", m.Value, RegexOptions.IgnoreCase).Trim();

                    // Set Remix Artist as new Artist
                    input.remixArtist = Regex.Replace(m.Value, @"[\(*\)|\[*\]]", "", RegexOptions.IgnoreCase).Trim();
                    input.remixArtist = Regex.Replace(input.remixArtist, @"Remix", "", RegexOptions.IgnoreCase).Trim();
                    log.Debug("Set Remix Artist " + input.remixArtist + " as new main Artist " + input.username + " (labelname)");

                    // Remove remaining [] ()
                    input.title = Regex.Replace(regex, @"(\(.*\)|\[.*\])", "", RegexOptions.IgnoreCase).Trim();
                    input.title = Regex.Replace(input.title, @"&", "", RegexOptions.IgnoreCase).Trim();
                    log.Debug("New Title is: " + input.title);
                }
                else
                {
                    input.title = Regex.Replace(input.title, @"(\(.*\)|\[.*\])", "", RegexOptions.IgnoreCase).Trim();
                    input.title = Regex.Replace(input.title, @"&", "", RegexOptions.IgnoreCase).Trim();
                    log.Debug("New Title is: " + input.title);
                }
            }
            else
            {
                input.title = Regex.Replace(input.title, @"(\(.*\)|\[.*\])", "", RegexOptions.IgnoreCase).Trim();
                input.title = Regex.Replace(input.title, @"&", "", RegexOptions.IgnoreCase).Trim();
                log.Debug("New Title is: " + input.title);
            }

            // Remove unsearchable chars
            if (input.title.Contains("<") && input.title.Contains(">"))
            {
                log.Debug("Remove '< >' from Title");
                input.title = Regex.Replace(input.title, @"(<.*>)", "", RegexOptions.IgnoreCase).Trim();
            }

            // Remove artist name in titel
            Match cleanTitel = Regex.Match(input.title, @"\s(-)\s", RegexOptions.IgnoreCase);

            if (input.title.Contains(input.username))
            {
                if (cleanTitel.Success)
                {
                    log.Debug("Remove same Artist from Titel");
                    string[] tmp = Regex.Split(input.title, @"\s(-)\s", RegexOptions.IgnoreCase);
                    input.artist = tmp[0].Trim();
                    input.title  = tmp[2].Trim();
                }
            }
            else
            {
                if (cleanTitel.Success)
                {
                    log.Debug("Remove Artist from Title");
                    string[] tmp = Regex.Split(input.title, @"\s(-)\s", RegexOptions.IgnoreCase);
                    input.title = tmp[2].Trim();

                    // Check if contains two whitespaces can come from an previeous char removal
                    if (Regex.Match(tmp[0], @"\s\s", RegexOptions.IgnoreCase).Success)
                    {
                        string[] art = Regex.Split(tmp[0], @"\s\s", RegexOptions.IgnoreCase);
                        input.artist = art[0].Trim();
                    }
                    else
                    {
                        input.artist = tmp[0].Trim();
                    }
                }
            }
            log.Debug("Prepared Serach Query is Artist: " + input.username + " Titel: " + input.title);
            return(input);
        }
Exemple #4
0
        /// <summary>
        /// Check Search result for the right Track
        /// </summary>
        /// <param name="results">Deezer Query Results</param>
        /// <param name="Searching">The Track to search for</param>
        /// <returns></returns>
        public async Task <long> search(List <StandardTitle> results, StandardTitle Searching)
        {
#if DEBUG
            /*
             * int i = 0;
             * do { i++; } while (File.Exists(Directory.GetCurrentDirectory() + "\\results\\" + i + ".json"));
             * Directory.CreateDirectory(Directory.GetCurrentDirectory() + "\\results\\");
             * await File.WriteAllTextAsync(Directory.GetCurrentDirectory() + "\\results\\" + i+".json", JsonConvert.SerializeObject(new DebugResult { Searching = Searching, Results = results }, Formatting.Indented));
             */
#endif
            foreach (var result in results)
            {
                /*
                 * DeezerSync Result Search Filter
                 * Results 369 out of 1593
                 * False Positives UNKNOWN
                 */
                /*
                 * if (await checkDuration(Searching.duration, result.duration, 1))
                 * {
                 * if (!string.IsNullOrEmpty(result.remixArtist))
                 * {
                 *     if ((result.artist.Contains(Searching.artist ?? (Searching.remixArtist ?? Searching.username)) || result.remixArtist.Contains(Searching.remixArtist ?? (Searching.artist ?? Searching.title)) || (result.title.Contains(Searching.artist ?? (Searching.remixArtist ?? Searching.username)) || (result.title.Contains(Searching.remixArtist ?? (Searching.artist ?? Searching.username))))) && (result.title.Contains(Searching.title)))
                 *     {
                 *         await SavePreparedData(results, Searching, result);
                 *         return result.id;
                 *     }
                 * }
                 * else
                 * {
                 *     if ((result.artist.Contains(Searching.artist ?? (Searching.remixArtist ?? Searching.username)) || (result.title.Contains(Searching.artist ?? (Searching.remixArtist ?? Searching.username)) || (result.title.Contains(Searching.remixArtist ?? (Searching.artist ?? Searching.username))))) && (result.title.Contains(Searching.title)))
                 *     {
                 *         await SavePreparedData(results, Searching, result);
                 *         return result.id;
                 *     }
                 * }
                 * if ( result.artist.Contains(Searching.artist ?? Searching.remixArtist ?? Searching.username) || result.title.Contains(Searching.title) && await checkDuration(Searching.duration, result.duration, 0))
                 * {
                 *     await SavePreparedData(results, Searching, result);
                 *     return result.id;
                 * }
                 * }
                 */


                /*
                 * DeezerSync Result Search Filter
                 * Results 722 songs out of 1593
                 * False positives > 30
                 */
                //Remix Artist
                if (!string.IsNullOrEmpty(Searching.remixArtist))
                {
                    if ((result.artist.Contains(Searching.remixArtist, StringComparison.OrdinalIgnoreCase) && result.title.Equals(Searching.title, StringComparison.OrdinalIgnoreCase)))
                    {
                        await SavePreparedData(results, Searching, result);

                        log.Info("Found Song Artist: " + result.artist + " Track: " + result.title + " https://www.deezer.com/us/track/" + result.id);
                        return(result.id);
                    }

                    if ((result.artist.Contains(Searching.remixArtist, StringComparison.OrdinalIgnoreCase) && result.title.Contains(Searching.title, StringComparison.OrdinalIgnoreCase)))
                    {
                        await SavePreparedData(results, Searching, result);

                        log.Info("Found Song Artist: " + result.artist + " Track: " + result.title + " https://www.deezer.com/us/track/" + result.id);
                        return(result.id);
                    }

                    if ((result.artist.Contains(Searching.remixArtist, StringComparison.OrdinalIgnoreCase) || result.title.Contains(Searching.title, StringComparison.OrdinalIgnoreCase)) && await checkDuration(Searching.duration, result.duration, 2))
                    {
                        await SavePreparedData(results, Searching, result);

                        log.Info("Found Song Artist: " + result.artist + " Track: " + result.title + " https://www.deezer.com/us/track/" + result.id);
                        return(result.id);
                    }

                    if (result.artist.Contains(Searching.remixArtist, StringComparison.OrdinalIgnoreCase) && result.title.Contains(Searching.title, StringComparison.OrdinalIgnoreCase))
                    {
                        await SavePreparedData(results, Searching, result);

                        log.Info("Found Song Artist: " + result.artist + " Track: " + result.title + " https://www.deezer.com/us/track/" + result.id);
                        return(result.id);
                    }

                    if ((result.title.Contains(Searching.remixArtist, StringComparison.OrdinalIgnoreCase) && (result.title.Contains(Searching.title, StringComparison.OrdinalIgnoreCase))))
                    {
                        await SavePreparedData(results, Searching, result);

                        log.Info("Found Song Artist: " + result.artist + " Track: " + result.title + " https://www.deezer.com/us/track/" + result.id);
                        return(result.id);
                    }
                }
                // if Result song is Remix but Searching Song isnt
                if (!Searching.isRemix)
                {
                    if (result.isRemix)
                    {
                        continue;
                    }
                }
                if (Searching.isRemix)
                {
                    if (!result.isRemix)
                    {
                        continue;
                    }
                }
                //Artist
                if (!string.IsNullOrEmpty(result.artist))
                {
                    if ((result.artist.Contains(Searching.artist ?? Searching.username, StringComparison.OrdinalIgnoreCase) && result.title.Equals(Searching.title, StringComparison.OrdinalIgnoreCase)))
                    {
                        await SavePreparedData(results, Searching, result);

                        log.Info("Found Song Artist: " + result.artist + " Track: " + result.title + " https://www.deezer.com/us/track/" + result.id);
                        return(result.id);
                    }

                    if ((result.artist.Contains(Searching.artist ?? Searching.username, StringComparison.OrdinalIgnoreCase) && result.title.Contains(Searching.title, StringComparison.OrdinalIgnoreCase)))
                    {
                        await SavePreparedData(results, Searching, result);

                        log.Info("Found Song Artist: " + result.artist + " Track: " + result.title + " https://www.deezer.com/us/track/" + result.id);
                        return(result.id);
                    }

                    if (result.artist.Contains(Searching.artist ?? Searching.username, StringComparison.OrdinalIgnoreCase) && result.title.Contains(Searching.title, StringComparison.OrdinalIgnoreCase))
                    {
                        await SavePreparedData(results, Searching, result);

                        log.Info("Found Song Artist: " + result.artist + " Track: " + result.title + " https://www.deezer.com/us/track/" + result.id);
                        return(result.id);
                    }
                }
                //Username
                if ((result.username.Contains(Searching.username, StringComparison.OrdinalIgnoreCase) && result.title.Equals(Searching.title, StringComparison.OrdinalIgnoreCase)))
                {
                    await SavePreparedData(results, Searching, result);

                    log.Info("Found Song Artist: " + result.artist + " Track: " + result.title + " https://www.deezer.com/us/track/" + result.id);
                    return(result.id);
                }

                if ((result.username.Contains(Searching.username, StringComparison.OrdinalIgnoreCase) && result.title.Contains(Searching.title, StringComparison.OrdinalIgnoreCase)))
                {
                    await SavePreparedData(results, Searching, result);

                    log.Info("Found Song Artist: " + result.username + " Track: " + result.title + " https://www.deezer.com/us/track/" + result.id);
                    return(result.id);
                }

                if ((result.username.Contains(Searching.username, StringComparison.OrdinalIgnoreCase) || result.title.Contains(Searching.title, StringComparison.OrdinalIgnoreCase)) && await checkDuration(Searching.duration, result.duration, 0))
                {
                    await SavePreparedData(results, Searching, result);

                    log.Info("Found Song Artist: " + result.username + " Track: " + result.title + " https://www.deezer.com/us/track/" + result.id);
                    return(result.id);
                }

                if (result.username.Contains(Searching.username, StringComparison.OrdinalIgnoreCase) && result.title.Contains(Searching.title, StringComparison.OrdinalIgnoreCase))
                {
                    await SavePreparedData(results, Searching, result);

                    log.Info("Found Song Artist: " + result.username + " Track: " + result.title + " https://www.deezer.com/us/track/" + result.id);
                    return(result.id);
                }
                if (result.title.Contains(Searching.title, StringComparison.OrdinalIgnoreCase) && await checkDuration(Searching.duration, result.duration, 0))
                {
                    await SavePreparedData(results, Searching, result);

                    log.Info("Found Song Artist: " + result.artist + " Track: " + result.title + " https://www.deezer.com/us/track/" + result.id);
                    return(result.id);
                }

                log.Info("Could not find Track: " + result.title + " Artist: " + result.artist ?? result.username + "Original Track: " + Searching.title + " Artist: " + Searching.artist ?? Searching.username);
            }
            return(0);
        }
Exemple #5
0
 private async Task SavePreparedData(List <StandardTitle> titles, StandardTitle searched, StandardTitle reported)
 {
     //await File.WriteAllTextAsync(@"../../../../../DataAnalytics/PreparedData/SearchResults/" + searched.id + "-" + System.Guid.NewGuid() + ".json", JsonConvert.SerializeObject(new DebugResult { Searching = searched, Results = titles, Reported = reported }, Formatting.Indented));
 }
Exemple #6
0
 /// <summary>
 /// Add Track to Database
 /// </summary>
 /// <param name="data">Track Object</param>
 /// <returns></returns>
 public async Task addTrack(StandardTitle data)
 {
     var input = db.GetCollection <StandardTitle>(data.title.Normalize().Replace(" ", "_", StringComparison.InvariantCultureIgnoreCase));
     await input.InsertOneAsync(data);
 }