예제 #1
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="youtubeClient"></param>
 /// <param name="searchOptions"></param>
 /// <param name="slackClient"></param>
 /// <param name="log"></param>
 public Watcher(Slack.Client slackClient, Youtube.Client youtubeClient, IOptions <Youtube.SearchOptions> searchOptions, TraceWriter log)
 {
     _slackClient   = slackClient ?? throw new ArgumentNullException(nameof(slackClient));
     _youtubeClient = youtubeClient ?? throw new ArgumentNullException(nameof(youtubeClient));
     _searchOptions = searchOptions ?? throw new ArgumentNullException(nameof(searchOptions));
     _log           = log ?? throw new ArgumentNullException(nameof(log));
 }
        public static void Run([TimerTrigger("0 0 * * * *")] TimerInfo myTimer, TraceWriter log)
        {
            try
            {
                // read options
                var slackOptions = new Slack.Options
                {
                    WebhookUrl = ConfigurationManager.AppSettings["Slack:WebhookUrl"]
                };
                var youTubeOptions = new Youtube.Options
                {
                    ApiKey          = ConfigurationManager.AppSettings["YouTube:ApiKey"],
                    ApplicationName = ConfigurationManager.AppSettings["YouTube:ApplicationName"]
                };
                var searchOptions = new Youtube.SearchOptions
                {
                    Options = JsonConvert.DeserializeObject <List <Youtube.Option> >(ConfigurationManager.AppSettings["SearchOptions"])
                };

                // get last run date
                var lastRunDate = myTimer.ScheduleStatus.Last.ToUniversalTime();
                log.Info($"lastRunDate: {lastRunDate:F}");

                // create clients
                var youtubeClient = new Youtube.Client(new Microsoft.Extensions.Options.OptionsWrapper <Youtube.Options>(youTubeOptions));
                var slackClient   = new Slack.Client(new Microsoft.Extensions.Options.OptionsWrapper <Slack.Options>(slackOptions));

                // run
                var watcher = new Watcher(slackClient, youtubeClient, new Microsoft.Extensions.Options.OptionsWrapper <Youtube.SearchOptions>(searchOptions), log);
                watcher.Process(lastRunDate);

                var response = slackClient.PostAsync(new Slack.Message {
                    Text = $"Social Search Executed with published after {lastRunDate}"
                }).Result;
            }
            catch (Exception e)
            {
                log.Error($"Exception {e.Message}");
            }
        }