对Watson API的POST请求不会给出响应

时间:2015-01-31 23:05:14

标签: python http-post httprequest httpresponse ibm-watson

我正在尝试发帖请求让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"}

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

2 个答案:

答案 0 :(得分:1)

来自requests API documentation

  

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.")

答案 1 :(得分: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