2017-05-15 4 views
0

私は新しいC#開発者です。テスト用のASP.NETアプリケーションで、Azure Machine LearningでText Analytics APIを使用して、データベースにあるツイートの感情やキーフレーズを定義しようとしています。 Text Analytics APIに接続するには、この役に立つ記事over hereに従ってください。私のコードをデバッグしている間、私は、リスト内の最初のつぶやきのキーフレーズや感情を得ることができたし、私は次の例外を持って、私はなぜ知らない:Text Analytics APIに接続すると、(400)Bad Requestエラーが表示されるのはなぜですか?

The remote server returned an error: (400) Bad Request.

は、ここに私のコードです:

private const string apiKey = "XXXXXXXXX"; //Key 2 value of Text Analytics API from Azure Portal 
     private const string sentimentUri = "https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment"; 
     private const string keyPhrasesUri = "https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases"; 
     private const string languageUri = "https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/languages"; 

     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 


     private IEnumerable<T_Tweet> GetData() 
     { 
      TweetBL tweetBl = new TweetBL(); 
      IEnumerable<T_Tweet> tweetsList = tweetBl.GetTweets(); 
      return tweetsList; 
     } 


     protected void lbtnAnalyze_Click(object sender, EventArgs e) 
     { 
      var tweetsList = GetData(); 
      if (tweetsList != null) 
      { 
       List<TweetSentimentModel> tweetSenti = new List<TweetSentimentModel>(); 
       foreach (var tweet in tweetsList) 
       { 
        try 
        { 
         // Prepare headers 
         var client = new WebClient(); 
         client.Headers.Add("Ocp-Apim-Subscription-Key", apiKey); 
         client.Headers.Add("Content-Type", "application/json"); 
         client.Headers.Add("Accept", "application/json"); 

         // Detect language 
         var postData1 = @"{""documents"":[{""id"":""1"", ""text"":""@sampleText""}]}".Replace("@sampleText", tweet.TweetText); 
         var response1 = client.UploadString(languageUri, postData1); 
         var language = new Regex(@"""iso6391Name"":""(\w+)""").Match(response1).Groups[1].Value; 

         // Determine sentiment 
         var postData2 = @"{""documents"":[{""id"":""1"", ""language"":""@language"", ""text"":""@sampleText""}]}".Replace("@sampleText", tweet.TweetText).Replace("@language", language); 
         var response2 = client.UploadString(sentimentUri, postData2); 
         var sentimentStr = new Regex(@"""score"":([\d.]+)").Match(response2).Groups[1].Value; 
         var sentiment = Convert.ToDouble(sentimentStr, System.Globalization.CultureInfo.InvariantCulture); 

         // Detemine key phrases 
         var postData3 = postData2; 
         var response3 = client.UploadString(keyPhrasesUri, postData2); 
         var keyPhrases = new Regex(@"""keyPhrases"":(\[[^\]]*\])").Match(response3).Groups[1].Value; 


         TweetSentimentModel tweetSentiObj = new TweetSentimentModel(); 
         tweetSentiObj.TweetId = tweet.Id; 
         tweetSentiObj.TweetText = tweet.TweetText; 
         tweetSentiObj.SentimentLabel = sentiment.ToString(); 
         tweetSentiObj.KeyPhrases = keyPhrases; 
         tweetSentiObj.CreatedOn = DateTime.Now; 
         tweetSenti.Add(tweetSentiObj); 
        } 
        catch (Exception ex) 
        { 
         throw ex; 
        } 
       } 

       if (tweetSenti != null) 
       { 
        PrintAnalysisResults(tweetSenti); 
       } 
      } 
     } 

このエラーが発生する理由と修正方法を教えてください。

+0

「例外」オブジェクトを調べる必要があります。これはおそらく、あなたのリクエストがなぜ「Bad Request(400)」 – degant

答えて

0

I was able to get the key phrases and sentiment for the first tweet in the list and then I got the following exception and I don't know why:

あなたの説明によれば、第2の時間と最初の時間との差がつぶやきオブジェクトです。 (400)Bad Requestは、http要求クライアントのパラメータが正しくないことも意味します。

tweet.TweetTextはnullまたはtweet.TweetText.trim()と同じです。 enter image description here

この場合はデバッグを試してみてください。制御するロジックを追加してください。以下はデモコードです。

if (!string.IsNullOrEmpty(tweet.TweetText?.Trim())) 
    { 
     // Determine sentiment 
     var postData2 = @"{""documents"":[{""id"":""1"", ""language"":""@language"", ""text"":""@sampleText""}]}".Replace(
          "@sampleText", tweet.TweetText).Replace("@language", language); 
        var response2 = client.UploadString(SentimentUri, postData2); 
        var sentimentStr = new Regex(@"""score"":([\d.]+)").Match(response2).Groups[1].Value; 
        var sentiment = Convert.ToDouble(sentimentStr, System.Globalization.CultureInfo.InvariantCulture); 

        // Detemine key phrases 
        var postData3 = postData2; 
        var response3 = client.UploadString(KeyPhrasesUri, postData2); 
        var keyPhrases = new Regex(@"""keyPhrases"":(\[[^\]]*\])").Match(response3).Groups[1].Value; 

    } 
+0

であったかについての詳細な情報を持っています。 –

関連する問題