private static async Task <SentimentResp> GetRatingScore(SentimentReq sd) { //https://southeastasia.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment var taUrl = "https://southeastasia.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment"; var postData = JsonConvert.SerializeObject(sd); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, taUrl); request.Content = new StringContent(postData, Encoding.UTF8, "application/json"); request.Content.Headers.Add("Ocp-Apim-Subscription-Key", "987bb1fbe0e54280b15341cfa8d45f26"); var result = await httpClient.SendAsync(request); var ret = await result.Content.ReadAsAsync <SentimentResp>(); return(ret); }
// [FunctionName("UpdateRatingSentiment")] public static async Task RunAsync([CosmosDBTrigger( databaseName: "Ratings", collectionName: "ratings", ConnectionStringSetting = "CosmosDBConnection")] IReadOnlyList <Document> documents, [CosmosDB( databaseName: "Ratings", collectionName: "ratings", ConnectionStringSetting = "CosmosDBConnection")] DocumentClient documentClient, ILogger log) { log.LogInformation("C# HTTP trigger function processed a request."); var s = new List <SentimentReqItem>();// = documents.ToDictionary(<SentimentInput>(x=> new SentimentInput {text = x.userNote}); var ratings = new List <Rating>(); for (int i = 0; i < documents.Count; i++) { ratings.Add(JsonConvert.DeserializeObject <Rating>(documents[i].ToString())); s.Add(new SentimentReqItem() { id = documents[i].SelfLink, text = ratings[i].userNotes }); } var sd = new SentimentReq() { documents = s }; var ret = await GetRatingScore(sd); var dburi = UriFactory.CreateDocumentCollectionUri("Ratings", "ratings"); for (int i = 0; i < ret.documents.Count; i++) { ratings[i].sentimentScore = ret.documents[i].score; var re = await documentClient.UpsertDocumentAsync(dburi, ratings[i]); } }
public static async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] Rating data, [CosmosDB( databaseName: "Ratings", collectionName: "ratings", ConnectionStringSetting = "CosmosDBConnection")] IAsyncCollector <Rating> documentsToStore, ILogger log) { log.LogInformation("C# HTTP trigger function processed a request."); // string requestBody = new StreamReader(req.Body).ReadToEnd(); // RatingData data = JsonConvert.DeserializeObject<RatingData>(requestBody); string errorField = ""; if (data != null) { bool productValid = await ProductIdValid(data.productId.ToString()); bool userValid = await UserIdValid(data.userId.ToString()); bool ratingValid = data.rating >= 0 && data.rating <= 5; if (productValid && userValid && ratingValid) { data.id = Guid.NewGuid(); data.timestamp = DateTime.UtcNow; try{ var sd = new SentimentReq() { documents = new List <SentimentReqItem>() { new SentimentReqItem() { id = data.id.ToString(), text = data.userNotes } } }; var sentimentResp = await GetRatingScore(sd); data.sentimentScore = sentimentResp.documents[0].score; log.LogMetric("RatingSentiments", sentimentResp.documents[0].score, new Dictionary <string, object>() { { "UserNote", data.userNotes }, { "RatingId", data.id } }); await documentsToStore.AddAsync(data); // } catch (Exception e) { return(new BadRequestObjectResult("CosmosDB error: " + e.Message)); } return((ActionResult) new OkObjectResult(data)); } else if (!productValid) { errorField = "productId"; } else if (!userValid) { errorField = "userId"; } else if (!ratingValid) { errorField = "rating value"; } } return(new BadRequestObjectResult("meow3 please input valid " + errorField)); }