public void Execute(AnalysisExecutionContext context) { _context = context; if (context.Results.Count <= 0) { context.OnExecutionProgress("Alchemy", new AnalysisExecutionProgressEventArgs(AnalysisExecutionStatus.Canceled, 0, 0, 0)); return; } AlchemyAPI.AlchemyAPI session = new AlchemyAPI.AlchemyAPI(); session.SetAPIKey(context.Key); AlchemyAPI_TargetedSentimentParams parameters = new AlchemyAPI_TargetedSentimentParams(); parameters.setOutputMode(AlchemyAPI_BaseParams.OutputMode.XML); int processed = 0; int failed = 0; foreach (KeyValuePair<string, ResultSet> document in context.Results) { try { string strResult = string.Empty; if (context.UseDebugMode) { TimeSpan time = TimeSpan.Zero; strResult = BenchmarkHelper.Invoke(new InvokeBenchmarkHandler(delegate(object state) { return session.TextGetTextSentiment(document.Value.Source, parameters); }), null, out time) as string; Console.WriteLine("\tAlchemyAPI: Sentiment for the document {0} has been retreived. Execution time is: {1}", document.Key, time.TotalMilliseconds); } else strResult = session.TextGetTextSentiment(document.Value.Source, parameters); using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(strResult))) { XmlSerializer serializer = new XmlSerializer(typeof(AlchemySentimentResult)); AlchemySentimentResult result = (AlchemySentimentResult)serializer.Deserialize(stream); processed++; document.Value.AddOutput("Alchemy", result.SentimentDetails.Score, result.SentimentDetails.Type); AnalysisExecutionProgressEventArgs ea = new AnalysisExecutionProgressEventArgs(AnalysisExecutionStatus.Processed, context.Results.Count, processed, failed); context.OnExecutionProgress("Alchemy", ea); if (ea.Cancel) break; } } catch (Exception ex) { failed++; document.Value.AddOutput("Alchemy", 0, "failed"); AnalysisExecutionProgressEventArgs ea = new AnalysisExecutionProgressEventArgs(AnalysisExecutionStatus.Failed, context.Results.Count, processed, failed); ea.Reason = ex.Message; context.OnExecutionProgress("Alchemy", ea); if (ea.Cancel) break; } } context.OnExecutionProgress("Alchemy", new AnalysisExecutionProgressEventArgs(AnalysisExecutionStatus.Success, context.Results.Count, processed, failed)); }