Я пытаюсь вызвать API IBM Watson для выполнения анализа настроений из моего проекта Unity с использованием библиотеки WWW. Это мой текущий код:
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;
Где USERNAME
и PASSWORD
- мои учетные данные API. Однако этот код продолжает выдавать ошибку 415. Кроме того, если я изменю авторизацию на аутентификацию, ошибка изменится на 401.
Я пробовал сделать тот же запрос с помощью hurl.it (который работает), распечатал заголовок авторизации и сравнил его с тем, что строит hurl.it с указанием имени пользователя и пароля, и это одна и та же строка - но все же запрос не выполняется в проекте. Что мне не хватает?
2 ответа
Это должно сработать для вас.
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);
}
В качестве альтернативы используйте Watson Unity SDK, который можно найти здесь. Вот использование а>.
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());
}
Вы должны добавить правильный тип носителя в WWWForm следующим образом:
form.AddField("Content-Type", "application/x-www-form-urlencoded");
Вы должны проверить документ Watson, чтобы узнать, какой из них правильный, я полагаю, это будет Json
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.