2017-12-31 19 views
0

IBM WatsonのAPIを呼び出して、WWWライブラリを使用して、Unityプロジェクトから感情分析を実行しようとしています。これは私の現在のコードです:HTTP要求を介してUnity C#で外部API(IBM Watson)を呼び出せませんか?

USERNAMEPASSWORDは私のAPIの資格情報です
string uri = "https://gateway.watsonplatform.net/natural-language-understanding/api/v1/analyze?version=2017-02-27"; 

WWWForm form = new WWWForm(); 
form.AddField ("text", "That%20was%20simply%20magnificent!"); 
form.AddField ("features", "sentiment"); 
form.AddField ("Content-Type", "application/json"); 
var headers = form.headers; 
byte[] rawData = form.data; 

headers["Authorization"] = "Basic " + System.Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(USERNAME + ":" + PASSWORD)); 

WWW www = new WWW(uri, rawData, headers); 
yield return www; 

。しかし、このコードは私に415エラーを与え続けます。また、認証への認証を変更すると、エラーは401に変わります。

hurl.itを使用して同じリクエストを試しています(動作しています)。 hurl.itはユーザー名とパスワードを与えられた構造体ですが、それらは同じ文字列ですが、要求はプロジェクトで失敗します。私は何が欠けていますか?

+0

FYI言語理解がワトソンユニティSDKに抽象化される:https://github.com/watson-developer-cloud/unity-sdk/blob/develop/Scr​​ipts/Services/NaturalLanguageUnderstanding/v1/NaturalLanguageUnderstanding。 cs – taj

+0

UnityWebRequestシステムが使えますか? – jdnichollsc

+0

@jdnichollsc私はSDKを使用して終了しました。 – Technicolor

答えて

1

だろうと仮定しますこれはあなたのためにうまくいくはずです。

private IEnumerator CallNLU() 
{ 
    string uri = "https://gateway.watsonplatform.net/natural-language-understanding/api/v1/analyze?version=2017-02-27"; 

    var headersDict = new Dictionary<string, string>(); 
    headersDict.Add("Content-Type", "application/json"); 
    headersDict.Add("Accept", "application/json"); 
    headersDict.Add("Authorization", "Basic " + System.Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(USERNAME + ":" + PASSWORD))); 

    string parameters = "{\"text\": \"Hello, welcome to IBM Watson!\", \"features\": {\"keywords\":{\"limit\":50}}}"; 
    byte[] rawData = Encoding.UTF8.GetBytes(parameters); 

    WWW www = new WWW(uri, rawData, headersDict); 
    yield return www; 
    Debug.Log(www.text); 
} 

また、hereというワトソンユニティSDKを使用してください。ここにはusageがあります。

private void Analyze() 
{ 
    if (!_naturalLanguageUnderstanding.Analyze(OnAnalyze, OnFail, <parameters>)) 
     Log.Debug("ExampleNaturalLanguageUnderstanding.Analyze()", "Failed to get models."); 
} 

private void OnAnalyze(AnalysisResults resp, Dictionary<string, object> customData) 
{ 
    Log.Debug("ExampleNaturalLanguageUnderstanding.OnAnalyze()", "AnalysisResults: {0}", customData["json"].ToString()); 
} 
0

あなたがそのようなWWWFormに正しいメディアタイプを追加する必要があります。

form.AddField("Content-Type", "application/x-www-form-urlencoded"); 

あなたが正しいものである1を参照するワトソンドキュメントをチェックする必要があり、私はそれがJSON

+0

更新されたコード - 同じエラーが表示されますか? – Technicolor

+0

@Technicolor 401または415? – TheOni