Beispiel #1
0
        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);
        }