Exemple #1
0
        public static async Task Main(string[] args)
        {
            Console.WriteLine("Orneholm.SverigesRadio.ConsoleSample");
            Console.WriteLine("########################################################");
            Console.WriteLine();

            var apiClient = SverigesRadioApiClient.CreateClient(new AudioSettings
            {
                OnDemandAudioTemplateId = SverigesRadioApiIds.OnDemandAudioTemplates.Html5_Desktop,
                LiveAudioTemplateId     = SverigesRadioApiIds.LiveAudioTemplates.MP3,

                AudioQuality = AudioQuality.High
            });

            Console.WriteLine();
            Console.WriteLine("List programs:");
            var programsResult = await apiClient.ListProgramsAsync();

            foreach (var program in programsResult.Programs)
            {
                Console.WriteLine($"{program.Name} ({program.Id}): {program.Description}");
            }

            Console.WriteLine();
            Console.WriteLine("Get latest episode for P3 Dokumentär:");
            var episodeResult = await apiClient.GetLatestEpisodeAsync(SverigesRadioApiIds.Programs.P3_Dokumentar);

            Console.WriteLine($"{episodeResult.Episode.Title} ({episodeResult.Episode.Id}): {episodeResult.Episode.Description}");

            Console.WriteLine();
            Console.WriteLine("List podfiles for Så funkar det (last 3):");
            var podfilesResult = await apiClient.ListPodfilesAsync(SverigesRadioApiIds.Programs.Sa_Funkar_Det, ListPagination.TakeFirst(5));

            foreach (var podfile in podfilesResult.Podfiles)
            {
                Console.WriteLine($"{podfile.Title} ({podfile.Id}): {podfile.Url}");
            }

            Console.WriteLine();
            Console.WriteLine("Search episodes:");
            var episodeSearchResult = await apiClient.SearchEpisodesAsync("Microsoft");

            foreach (var episode in episodeSearchResult.Episodes)
            {
                Console.WriteLine($"{episode.Title} ({episode.Id}) - {episode.Description}");
            }

            Console.WriteLine();
            Console.ReadLine();
        }
        public override void Configure(IFunctionsHostBuilder builder)
        {
            var services = builder.Services;

            services.AddTransient <ISverigesRadioApiClient>(s => SverigesRadioApiClient.CreateClient());

            services.AddTransient(x =>
            {
                var configuration  = x.GetRequiredService <IConfiguration>();
                var storageAccount = CloudStorageAccount.Parse(configuration["AzureStorage:BlobsConnectionString"]);
                return(storageAccount.CreateCloudBlobClient());
            });

            services.AddTransient(x =>
            {
                var configuration  = x.GetRequiredService <IConfiguration>();
                var storageAccount = Microsoft.Azure.Cosmos.Table.CloudStorageAccount.Parse(configuration["AzureStorage:TablesConnectionString"]);
                return(storageAccount.CreateCloudTableClient(new TableClientConfiguration()));
            });

            services.AddTransient(x =>
            {
                var configuration = x.GetRequiredService <IConfiguration>();
                return(SpeechConfig.FromSubscription(configuration["AzureSpeech:Key"], configuration["AzureSpeech:Region"]));
            });
            services.AddTransient(x =>
            {
                var configuration = x.GetRequiredService <IConfiguration>();
                return(SpeechBatchClient.CreateApiV2Client(configuration["AzureSpeech:Key"], configuration["AzureSpeech:Hostname"], 443));
            });

            services.AddTransient(x =>
            {
                var configuration = x.GetRequiredService <IConfiguration>();
                var credentials   = new ApiKeyServiceClientCredentials(configuration["AzureTextAnalytics:Key"]);
                return(new TextAnalyticsClient(credentials)
                {
                    Endpoint = configuration["AzureTextAnalytics:Endpoint"]
                });
            });

            services.AddTransient(x =>
            {
                var configuration = x.GetRequiredService <IConfiguration>();
                return(TranslatorClient.CreateClient(configuration["AzureTranslator:Key"], configuration["AzureTranslator:Endpoint"]));
            });

            services.AddTransient <IStorageTransfer, AzureStorageTransfer>();
            services.AddTransient <IStorage, AzureTableStorage>(s =>
            {
                var configuration = s.GetRequiredService <IConfiguration>();
                return(new AzureTableStorage(
                           s.GetRequiredService <CloudTableClient>(),
                           configuration["AzureStorage:EpisodeStatusesTableName"],
                           configuration["AzureStorage:EpisodesTableName"],
                           configuration["AzureStorage:EpisodeTranscriptionsTableName"],
                           configuration["AzureStorage:EpisodeTextAnalyticsTableName"],
                           configuration["AzureStorage:EpisodeSpeechTableName"]
                           ));
            });

            services.AddTransient <ISummaryStorage, SummaryAzureTableStorage>(s =>
            {
                var configuration = s.GetRequiredService <IConfiguration>();
                return(new SummaryAzureTableStorage(
                           s.GetRequiredService <CloudTableClient>(),
                           configuration["AzureStorage:EpisodeSummaryTableName"]
                           ));
            });

            services.AddTransient <SrEpisodesLister>();
            services.AddTransient(s =>
            {
                var configuration = s.GetRequiredService <IConfiguration>();
                return(new SrEpisodeCollector(
                           configuration["AzureStorage:AudioContainerName"],
                           s.GetRequiredService <IStorageTransfer>(),
                           s.GetRequiredService <ISverigesRadioApiClient>(),
                           s.GetRequiredService <ILogger <SrEpisodeCollector> >(),
                           s.GetRequiredService <IStorage>()
                           ));
            });

            services.AddTransient(s =>
            {
                var configuration = s.GetRequiredService <IConfiguration>();
                return(new SrEpisodeTranscriber(
                           configuration["AzureStorage:EpisodeTranscriptionsContainerName"],
                           s.GetRequiredService <ISpeechBatchClientFactory>(),
                           s.GetRequiredService <IStorageTransfer>(),
                           s.GetRequiredService <ILogger <SrEpisodeCollector> >(),
                           s.GetRequiredService <IStorage>(),
                           s.GetRequiredService <CloudBlobClient>()
                           ));
            });

            services.AddTransient <SrEpisodeTextEnricher>();
            services.AddTransient <SrEpisodeSummarizer>();
            services.AddTransient(s =>
            {
                var configuration = s.GetRequiredService <IConfiguration>();
                return(new SrEpisodeSpeaker(
                           configuration["AzureStorage:EpisodeSpeechContainerName"],
                           s.GetRequiredService <ISpeechConfigFactory>(),
                           s.GetRequiredService <IStorage>(),
                           s.GetRequiredService <ILogger <SrEpisodeSpeaker> >(),
                           s.GetRequiredService <CloudBlobClient>()
                           ));
            });

            services.AddTransient <SrWorker>();
        }
Exemple #3
0
        public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .ConfigureServices((hostContext, services) =>
        {
            ServicePointManager.DefaultConnectionLimit = 100;

            services.AddSingleton <ISverigesRadioApiClient>(s => SverigesRadioApiClient.CreateClient());

            services.AddTransient(x =>
            {
                var storageAccount = CloudStorageAccount.Parse(hostContext.Configuration["AzureStorage:BlobsConnectionString"]);
                return(storageAccount.CreateCloudBlobClient());
            });

            services.AddTransient(x =>
            {
                var storageAccount = Microsoft.Azure.Cosmos.Table.CloudStorageAccount.Parse(hostContext.Configuration["AzureStorage:TablesConnectionString"]);
                return(storageAccount.CreateCloudTableClient(new TableClientConfiguration()));
            });


            var azureSpeechClients = new List <SpeechBatchClientOptions>();
            hostContext.Configuration.GetSection("AzureSpeech:Clients").Bind(azureSpeechClients);
            services.AddSingleton <ISpeechConfigFactory>(x => new RoundRobinSpeechConfigFactory(azureSpeechClients));
            services.AddSingleton <ISpeechBatchClientFactory>(x => new RoundRobinSpeechBatchClientFactory(azureSpeechClients));

            services.AddTransient(x =>
            {
                var credentials = new ApiKeyServiceClientCredentials(hostContext.Configuration["AzureTextAnalytics:Key"]);
                return(new TextAnalyticsClient(credentials)
                {
                    Endpoint = hostContext.Configuration["AzureTextAnalytics:Endpoint"]
                });
            });

            services.AddTransient(x => TranslatorClient.CreateClient(hostContext.Configuration["AzureTranslator:Key"], hostContext.Configuration["AzureTranslator:Endpoint"]));

            services.AddTransient <IStorageTransfer, AzureStorageTransfer>();
            services.AddTransient <IStorage, AzureTableStorage>(s => new AzureTableStorage(
                                                                    s.GetRequiredService <CloudTableClient>(),
                                                                    hostContext.Configuration["AzureStorage:EpisodeStatusesTableName"],
                                                                    hostContext.Configuration["AzureStorage:EpisodesTableName"],
                                                                    hostContext.Configuration["AzureStorage:EpisodeTranscriptionsTableName"],
                                                                    hostContext.Configuration["AzureStorage:EpisodeTextAnalyticsTableName"],
                                                                    hostContext.Configuration["AzureStorage:EpisodeSpeechTableName"]
                                                                    ));

            services.AddTransient <ISummaryStorage, SummaryAzureTableStorage>(s => new SummaryAzureTableStorage(
                                                                                  s.GetRequiredService <CloudTableClient>(),
                                                                                  hostContext.Configuration["AzureStorage:EpisodeSummaryTableName"]
                                                                                  ));


            services.AddTransient <IWordCountStorage, WordCounterAzureTableStorage>(s =>
            {
                var storageAccount = Microsoft.Azure.Cosmos.Table.CloudStorageAccount.Parse(hostContext.Configuration["AzureStorage:BlobsConnectionString"]);
                var tableClient    = storageAccount.CreateCloudTableClient(new TableClientConfiguration());

                return(new WordCounterAzureTableStorage(
                           tableClient,
                           hostContext.Configuration["AzureStorage:EpisodeWordCountTableName"]
                           ));
            });

            services.AddTransient <SrEpisodesLister>();
            services.AddTransient(s => new SrEpisodeCollector(
                                      hostContext.Configuration["AzureStorage:AudioContainerName"],
                                      s.GetRequiredService <IStorageTransfer>(),
                                      s.GetRequiredService <ISverigesRadioApiClient>(),
                                      s.GetRequiredService <ILogger <SrEpisodeCollector> >(),
                                      s.GetRequiredService <IStorage>(),
                                      hostContext.Configuration["FFMpeg:Location"]
                                      ));

            services.AddTransient(s => new SrEpisodeTranscriber(
                                      hostContext.Configuration["AzureStorage:EpisodeTranscriptionsContainerName"],
                                      s.GetRequiredService <ISpeechBatchClientFactory>(),
                                      s.GetRequiredService <IStorageTransfer>(),
                                      s.GetRequiredService <ILogger <SrEpisodeCollector> >(),
                                      s.GetRequiredService <IStorage>(),
                                      s.GetRequiredService <CloudBlobClient>()
                                      ));

            services.AddTransient <SrEpisodeTextEnricher>();
            services.AddTransient <SrEpisodeSummarizer>();
            services.AddTransient(s => new SrEpisodeSpeaker(
                                      hostContext.Configuration["AzureStorage:EpisodeSpeechContainerName"],
                                      s.GetRequiredService <ISpeechConfigFactory>(),
                                      s.GetRequiredService <IStorage>(),
                                      s.GetRequiredService <ILogger <SrEpisodeSpeaker> >(),
                                      s.GetRequiredService <CloudBlobClient>()
                                      ));

            services.AddTransient <SrEpisodeWordCounter>();

            services.AddTransient <SrWorker>();

            services.AddHostedService <Worker>();
        });