0

我正在尝试向 Watson API 发出发布请求以使用他们的用户建模。我有以下代码:

import requests
import keys 
import json

url = "https://gateway.watsonplatform.net/systemu/service/api/v2/profile"

username = keys.username
password = keys.password
text = "Call me Ishmael. Some years ago-never mind how long precisely-having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world. It is a way I have of driving off the spleen and regulating the circulation. Whenever I find myself growing grim about the mouth; whenever it is a damp, drizzly November in my soul; whenever I find myself involuntarily pausing before coffin warehouses, and bringing up the rear of every funeral I meet; and especially whenever my hypos get such an upper hand of me, that it requires a strong moral principle to prevent me from deliberately stepping into the street, and methodically knocking people's hats off-then, I account it high time to get to sea as soon as I can. This is my substitute for pistol and ball. With a philosophical flourish Cato throws himself upon his sword; I quietly take to the ship. There is nothing surprising in this. If they but knew it, almost all men in their degree, some time or other, cherish very nearly the same feelings towards the ocean with me."

raw_data = {"contentItems":text}
input_data = json.dumps(raw_data)


response = requests.post(url, auth=(username, password), data=input_data)
print response.status_code
print response.text

我得到以下信息:

415 {"user_message":"HTTP 错误 415","error_code":"EUSERMOD00000"}

为什么会这样,我该如何解决?

4

2 回答 2

1

这是最终的代码。我遇到的问题是由于 raw_data 的格式不正确,我在下面修复了它。

"""
The script takes data file (min 1000 words needed) and makes a POST request to Watson-IBM API to analyze the text for User modeling.
To run the file you need to have your own keys file in the directory above. To get username and password, you need to create an app in Bluemix and bind the service.
"""

import json
import requests
from .. import keys

url = "https://gateway.watsonplatform.net/systemu/service/api/v2/profile"

username = keys.username
password = keys.password

with open ("data.txt", "r") as myfile:
    text=myfile.read().replace('\n', '')

raw_data = {
    'contentItems' : [{
    'userid' : username,
    'id' : 'dummyUuid',
    'sourceid' : 'freetext',
    'contenttype' : 'text/plain',
    'language' : 'en',
    'content': text 
    }]
}

input_data = json.dumps(raw_data)

response = requests.post(url, auth=(username, password), headers = {'content-type': 'application/json'}, data=input_data)
# print response.status_code # needed for testing
print response.text
于 2015-02-01T05:33:31.017 回答
1

请求 API 文档中:

data –(可选)要在请求正文中发送的字典、字节或类似文件的对象。

input_data是一个集合,它不是字典、字节或类似文件的对象。由于您的集合只有一个项目,您可能希望它是字节,您可以这样做:

input_data = b"Call me Ishmael. Some years ago-never mind how long precisely-"\
"having little or no money in my purse, and nothing particular to interest me "\
"on shore, I thought I would sail about a little and see the watery part of "\
"the world. It is a way I have of driving off the spleen and regulating the "\
"circulation. Whenever I find myself growing grim about the mouth; whenever it "\
"is a damp, drizzly November in my soul; whenever I find myself involuntarily "\
"pausing before coffin warehouses, and bringing up the rear of every funeral I "\
"meet; and especially whenever my hypos get such an upper hand of me, that it "\
"requires a strong moral principle to prevent me from deliberately stepping "\
"into the street, and methodically knocking people's hats off-then, I account "\
"it high time to get to sea as soon as I can."

请注意,在您的原始代码中,每行末尾的反斜杠是不必要的,但现在是必需的。您可以通过将整个内容包装在一组括号中来再次使它们变得不必要,这可能是您最初的意图:

input_data = (b"Call me Ishmael. Some years ago-never mind how long precisely-"
"having little or no money in my purse, and nothing particular to interest me "
"on shore, I thought I would sail about a little and see the watery part of "
"the world. It is a way I have of driving off the spleen and regulating the "
"circulation. Whenever I find myself growing grim about the mouth; whenever it "
"is a damp, drizzly November in my soul; whenever I find myself involuntarily "
"pausing before coffin warehouses, and bringing up the rear of every funeral I "
"meet; and especially whenever my hypos get such an upper hand of me, that it "
"requires a strong moral principle to prevent me from deliberately stepping "
"into the street, and methodically knocking people's hats off-then, I account "
"it high time to get to sea as soon as I can.")
于 2015-01-31T23:25:57.697 回答