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