/// <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; } }
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(); }
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; }