Exemplo n.º 1
0
        /// <summary>
        /// 유튜브 파트에서 설정을 불러옵니다.
        /// </summary>
        /// <param name="option"></param>
        public void LoadYoutube(YoutubeSearchOption option)
        {
            if (option == null)
            {
                option = YoutubeSearchOption.GetDefault();
            }

            drpYoutube.Since = option.DateRange.Since.GetValueOrDefault();
            drpYoutube.Until = option.DateRange.Until.GetValueOrDefault();

            tbYoutubeSearchCount.Text = option.SearchCount.ToString();

            ytCbOutput1.IsChecked = option.OutputServices.HasFlag(OutputFormat.CSV);
            ytCbOutput2.IsChecked = option.OutputServices.HasFlag(OutputFormat.Json);
            ytCbOutput3.IsChecked = option.OutputServices.HasFlag(OutputFormat.MySQL);
            ytCbOutput4.IsChecked = option.OutputServices.HasFlag(OutputFormat.AccessDB);

            youtubeRegion.SelectedIndex = (int)option.RegionCode.GetValueOrDefault();

            try
            {
                cbSortOrder.SelectedItem = cbSortOrder
                                           .Items
                                           .Cast <ComboBoxItem>()
                                           .Where(i => int.Parse(i.Tag.ToString()) == (int)option.YoutubeSortOrder.GetValueOrDefault())
                                           .First();
            }
            catch (Exception)
            {
                option.YoutubeSortOrder  = YoutubeSortOrder.Relevance;
                cbSortOrder.SelectedItem = 0;
            }

            try
            {
                cbVideoDuration.SelectedItem = cbVideoDuration
                                               .Items
                                               .Cast <ComboBoxItem>()
                                               .Where(i => int.Parse(i.Tag.ToString()) == (int)option.YoutubeVideoDuration.GetValueOrDefault())
                                               .First();
            }
            catch (Exception)
            {
                option.YoutubeVideoDuration  = YoutubeVideoDuration.Any;
                cbVideoDuration.SelectedItem = 0;
            }

            useYoutubeDate.IsChecked = option.UseDateSearch;

            if (option.SplitWithDate)
            {
                rbYoutubeSplitWithDate.IsChecked = true;
            }
            else
            {
                rbYoutubeNoSplit.IsChecked = true;
            }
        }
Exemplo n.º 2
0
        public void YoutubeSearch()
        {
            if (youtubeSearching)
            {
                AddLog("이미 Youtube 서비스에서 검색을 실행중입니다.", TaskLogType.Failed);
                return;
            }

            if (SettingManager.YoutubeSearchOption.UseDateSearch)
            {
                if (!SettingManager.YoutubeSearchOption.DateRange.Vaild)
                {
                    AddLog("유튜브 검색의 날짜 설정이 잘못되었습니다.", TaskLogType.Failed);
                    return;
                }
            }

            youtubeSearching = true;
            _detailsOption.YoutubeEnableChange(false);
            _vertManager.ChangeEditable(false, ServiceKind.Youtube);
            lvYoutube.Items.Clear();

            Thread thr = new Thread(() =>
            {
                var sw = new Stopwatch();
                var youtubeSearcher        = new YoutubeSearcher();
                bool isCanceled            = false;
                SearchResult info          = SearchResult.Fail_APIError;
                YoutubeSearchOption option = YoutubeSearchOption.GetDefault();

                youtubeSearcher.SearchProgressChanged += Searcher_SearchProgressChanged;
                youtubeSearcher.SearchFinished        += Searcher_SearchFinished;
                youtubeSearcher.ChangeInfoMessage     += Searcher_ChangeInfoMessage;
                youtubeSearcher.SearchItemFound       += Searcher_SearchItemFound;

                Dispatcher.Invoke(() =>
                {
                    sw.Start();

                    AddLog("Youtube 검색 엔진을 초기화중입니다.", TaskLogType.SearchReady);

                    option       = SettingManager.YoutubeSearchOption;
                    option.Query = tbQuery.Text;

                    var tb = new TaskProgressBar();

                    tb.SetValue(title: "Youtube 검색", message: "검색이 진행중입니다.", maximum: 1);

                    lvTask.Items.Insert(0, tb);
                    dict[youtubeSearcher] = tb;

                    if (option.OutputServices == OutputFormat.None)
                    {
                        tb.SetValue(message: "결과를 내보낼 위치가 없습니다.", maximum: 1);
                        AddLog("검색을 내보낼 위치가 없습니다.", TaskLogType.Failed);

                        info       = SearchResult.Fail_InvaildSetting;
                        isCanceled = true;
                    }

                    youtubeSearcher.Vertification(SettingManager.YoutubeCredentials.Item1);

                    if (!youtubeSearcher.IsVerification) // 인증되지 않았을 경우
                    {
                        tb.SetValue(message: "API키가 인증되지 않았습니다.", maximum: 1);
                        AddLog("API키가 인증되지 않았습니다.", TaskLogType.Failed);

                        info       = SearchResult.Fail_APIError;
                        isCanceled = true;
                    }
                });

                IEnumerable <YoutubeSearchResult> youtubeResult = null;
                ExportResultPack pack = null;

                if (!isCanceled)
                {
                    try
                    {
                        youtubeResult = youtubeSearcher.Search(option);

                        if (youtubeResult.Count() == 0)
                        {
                            info = SearchResult.Fail_NoResult;
                            AddLog("검색 결과가 없습니다.", TaskLogType.Failed);
                        }
                        else
                        {
                            info = SearchResult.Success;
                            AddLog("검색 결과를 내보내는 중입니다.", TaskLogType.Searching);
                            pack = Export(option.OutputServices, youtubeResult, ServiceKind.Youtube);
                        }
                    }
                    catch (InvaildOptionException)
                    {
                        AddLog("'Youtube' 검색 중 오류가 발생했습니다. [날짜를 사용하지 않은 상태에서는 '하루 기준' 옵션을 사용할 수 없습니다.]", TaskLogType.Failed);
                        info = SearchResult.Fail_InvaildSetting;
                    }
                    catch (CredentialsTypeException ex)
                    {
                        // TODO: Exception에 오류 코드 추가
                        AddLog("'Youtube' 검색 중 오류가 발생했습니다. [Youtube의 API키가 올바르게 입력되지 않은거 같습니다.]", TaskLogType.Failed);

                        Dispatcher.Invoke(() => SettingManager.YoutubeCredentials.Item2 = VerifyType.Invalid);

                        info = SearchResult.Fail_APIError;
                    }
                }

                Dispatcher.Invoke(() => {
                    AddLog($"Youtube 검색에 소요된 시간 : {sw.ElapsedMilliseconds}ms", TaskLogType.Complete);

                    _taskReport.AddReport(new TaskReportData()
                    {
                        Query            = option.Query,
                        RequestService   = ServiceKind.Youtube,
                        SearchCount      = option.SearchCount,
                        SearchData       = youtubeResult,
                        SearchDate       = DateTime.Now,
                        SearchResult     = info,
                        OutputFormat     = option.OutputServices,
                        ExportResultPack = pack
                    });

                    _taskReport.SetLastReport();

                    youtubeSearching = false;
                    _detailsOption.YoutubeEnableChange(true);
                    _vertManager.ChangeEditable(true, ServiceKind.Youtube);
                });
            });

            thr.Start();
        }
Exemplo n.º 3
0
        static SettingManager()
        {
            _exportOptionSetting = new ObjectSerializer <ExportOptionSetting>().Deserialize(AppSetting.ExportOption);

            if (_exportOptionSetting == null)
            {
                _exportOptionSetting = new ExportOptionSetting()
                {
                    AccessFileName       = string.Empty,
                    AccessFolderLocation = string.Empty,
                    CSVFileName          = string.Empty,
                    CSVFolderLocation    = string.Empty,
                    CSVOverlapOption     = 0,
                    JsonFileName         = string.Empty,
                    JsonFolderLocation   = string.Empty,
                    JsonOverlapOption    = 0,
                    JsonSort             = true,
                    MySQLConnAddr        = "localhost",
                    MySQLConnString      = string.Empty,
                    MySQLDatabaseName    = "plurcrawler",
                    MySQLManualInput     = false,
                    MySQLUserID          = string.Empty,
                    MySQLUserPassword    = string.Empty,
                }
            }
            ;

            _googleCSESearchOption = new ObjectSerializer <GoogleCSESearchOption>().Deserialize(AppSetting.GoogleOption);

            if (_googleCSESearchOption == null)
            {
                GoogleCSESearchOption = GoogleCSESearchOption.GetDefault();
            }

            _twitterSearchOption = new ObjectSerializer <TwitterSearchOption>().Deserialize(AppSetting.TwitterOption);

            if (_twitterSearchOption == null)
            {
                TwitterSearchOption = TwitterSearchOption.GetDefault();
            }

            _youtubeSearchOption = new ObjectSerializer <YoutubeSearchOption>().Deserialize(AppSetting.YoutubeOption);

            if (_youtubeSearchOption == null)
            {
                YoutubeSearchOption = YoutubeSearchOption.GetDefault();
            }

            _tutorialView = AppSetting.TutorialView;

            if (AppSetting.GoogleCredentials.IsNullOrEmpty())
            {
                AppSetting.GoogleCredentials = "//";
                AppSetting.Save();
            }

            string[] gocredentials = AppSetting.GoogleCredentials.Split("//");

            _googleCredentials = new Pair <string, VerifyType, string, VerifyType>()
            {
                Item1 = gocredentials[0],
                Item2 = AppSetting.GoogleKeyVertified,
                Item3 = gocredentials[1],
                Item4 = AppSetting.GoogleIDVertified,
            };

            if (AppSetting.TwitterCredentials.IsNullOrEmpty())
            {
                AppSetting.TwitterCredentials = "//";
                AppSetting.Save();
            }

            string[] twcredentials = AppSetting.TwitterCredentials.Split("//");

            _twitterCredentials = new Pair <string, string>()
            {
                Item1 = twcredentials[0],
                Item2 = twcredentials[1],
            };


            _youtubeCredentials = new Pair <string, VerifyType>()
            {
                Item1 = AppSetting.YoutubeCredentials,
                Item2 = AppSetting.YoutubeVertified,
            };


            if (AppSetting.EngineUsage.IsNullOrEmpty())
            {
                AppSetting.EngineUsage = "False|False|False";
                AppSetting.Save();
            }

            IEnumerable <bool> engineBools = AppSetting.Default.EngineUsage.Split("|")
                                             .Select(i => Convert.ToBoolean(i));

            _engineUsage = new Pair <bool, bool, bool>()
            {
                Item1 = engineBools.ElementAt(0),
                Item2 = engineBools.ElementAt(1),
                Item3 = engineBools.ElementAt(2),
            };

            // End Of Load

            ExportOptionSetting.PropertyChanged   += ExportOptionSetting_PropertyChanged;
            GoogleCSESearchOption.PropertyChanged += GoogleCSESearchOption_PropertyChanged;
            TwitterSearchOption.PropertyChanged   += TwitterSearchOption_PropertyChanged;
            EngineUsage.PropertyChanged           += EngineUsage_PropertyChanged;
            GoogleCredentials.PropertyChanged     += GoogleCredentials_PropertyChanged;
            TwitterCredentials.PropertyChanged    += TwitterCredentials_PropertyChanged;
            YoutubeCredentials.PropertyChanged    += YoutubeCredentials_PropertyChanged;
            YoutubeSearchOption.PropertyChanged   += YoutubeSearchOption_PropertyChanged;
        }