public async Task <State> UploadVideoToS3Async(State state, ILambdaContext context) { // Register the new tag cloud with the tag cloud catalog var item = new TagCloudCatalog.TagCloudCatalogItem { DisplayName = state.VideoName, Id = state.Id, StartDate = DateTime.UtcNow }; var catalog = new TagCloudCatalog(this._s3Client); await catalog.RegisterTagCloudAsync(item); context.Logger.LogLine($"Processing Word Cloud Job: {state.VideoName}"); context.Logger.LogLine($"Video being converted: {state.OriginalUrl}"); await DownloadAsync(state, context); await UploadAsync(state, context); return(state); }
public async Task <State> ComputeTagCloudCategoriesAsync(State state, ILambdaContext context) { var request = new GetObjectRequest { BucketName = Utilites.BUCKET, Key = Utilites.GetTranscriptKey(state.Id) }; context.Logger.LogLine($"Computing tag cloud categories for {state.VideoName}"); using (var response = await _s3Client.GetObjectAsync(request)) using (var reader = new StreamReader(response.ResponseStream)) { var jsonString = await reader.ReadToEndAsync(); context.Logger.LogLine("... Downloaded transcript"); var root = JsonConvert.DeserializeObject(jsonString) as JObject; var transcripts = root["results"]["transcripts"] as JArray; StringBuilder sb = new StringBuilder(); foreach (JObject transcript in transcripts) { sb.Append(transcript["transcript"]?.ToString()); } var content = sb.ToString(); context.Logger.LogLine($"Parse json transcript file and found transcript with length: {content.Length}"); var phrases = content.Split(' ', ','); var tags = new TagCloudAnalyzer() .ComputeTagCloud(phrases) .Shuffle(); context.Logger.LogLine($"... Found {tags.Count()} tag categories"); var tagCloudAnaylsis = JsonConvert.SerializeObject(tags); await _s3Client.PutObjectAsync(new PutObjectRequest { BucketName = Utilites.BUCKET, Key = Utilites.GetTagCloudAnalysisKey(state.Id), ContentBody = tagCloudAnaylsis }); context.Logger.LogLine("... Uploaded tag cloud anaylysis"); } var catalog = new TagCloudCatalog(this._s3Client); var items = await catalog.GetCatalogItemsAsync(); var item = items.FirstOrDefault(x => string.Equals(x.Id, state.Id, StringComparison.InvariantCulture)); if (item != null) { item.CompletedDate = DateTime.UtcNow; await catalog.RegisterTagCloudAsync(item); } return(state); }