POST 请求 IBM Watson 关系提取 returns 错误
POST request to IBM Watson Relationship extraction returns error
在 Bluemix 中,我试图从 Python 调用 IBM Watson 关系提取 API。首先,我在 Bluemix 上创建了一个应用程序,bing 关系提取器 api 到它。然后从 API 的下拉菜单中,我从实例化凭据中获取用户名和密码。在下面的 coe 中,我已将其替换为 bluemux-username 和 bluemix-password。我为此写的Python代码如下:
import requests
import json
url="https://gateway.watsonplatform.net/relationship-extraction-beta/api/v1/sire/0"
username="bluemix_username"
password="bluemix_passowrd"
with open ("data.txt", "r") as myfile:
text=myfile.read().replace('\n', '')
raw_data = {
'contentItems' : [{
'contenttype' : 'text/plain',
'content': text
}]
}
input_data = json.dumps(raw_data)
response = requests.post(url, auth=(username, password), headers = {'content-type': 'application/json'}, data=input_data)
try:
response.raise_for_status()
except requests.exceptions.HTTPError as e:
print("And you get an HTTPError: %s"% e.message)
但是,当我 运行 这样做时,出现以下错误:
And you get an HTTPError: 400 Client Error: Bad Request
*注意:我对 人格洞察力 API 使用了相同的方法并且有效。
有什么想法吗?
谢谢
这是您应该可以使用的代码的更新副本:
import requests
import json
url="https://gateway.watsonplatform.net/relationship-extraction-beta/api/v1/sire/0"
username="bluemix_username"
password="bluemix_passowrd"
with open ("data.txt", "r") as myfile:
text=myfile.read().replace('\n', '')
input_data = {
'sid' : 'ie-en-news',
'txt' : text
}
response = requests.post(url, auth=(username, password), data=input_data)
try:
response.raise_for_status()
print response.text
except requests.exceptions.HTTPError as e:
print("And you get an HTTPError: %s"% e.message)
基本上我更改了您发布的有效负载以添加一些缺失值。
希望对您有所帮助!
如果您不想使用 data.txt
并在您的终端中使用标准输入,您可以这样做:
## -*- coding: utf-8 -*-
import os
import requests
import fileinput
class RelationshipExtractionService:
url = None
def __init__(self):
self.url = "https://gateway.watsonplatform.net/relationship-extraction-beta/api/v1/sire/0"
self.user = "<username>"
self.password = "<password>"
def extract(self, text):
data = {
'txt': text,
'sid': 'ie-en-news', # English News, for Spanish use: ie-es-news
'rt': 'xml',
}
r = requests.post(self.url,
auth=(self.user, self.password),
headers = {
'content-type': 'application/x-www-form-urlencoded'},
data=data
)
print("Request sent. Status code: %d, content-type: %s" %
(r.status_code, r.headers['content-type']))
if r.status_code != 200:
print("Result %s" % r.text)
raise Exception("Error calling the service.")
return r.text
if __name__ == '__main__':
service = RelationshipExtractionService()
for line in fileinput.input():
print service.extract(line)
用法
简单的文字分析:
echo "New York is awesome" | python main.py
您还可以通过管道传输文件:
cat article.txt | python main.py
从 .txt 到 .xml:
cat article.txt | python main.py > article.xml
在 Bluemix 中,我试图从 Python 调用 IBM Watson 关系提取 API。首先,我在 Bluemix 上创建了一个应用程序,bing 关系提取器 api 到它。然后从 API 的下拉菜单中,我从实例化凭据中获取用户名和密码。在下面的 coe 中,我已将其替换为 bluemux-username 和 bluemix-password。我为此写的Python代码如下:
import requests
import json
url="https://gateway.watsonplatform.net/relationship-extraction-beta/api/v1/sire/0"
username="bluemix_username"
password="bluemix_passowrd"
with open ("data.txt", "r") as myfile:
text=myfile.read().replace('\n', '')
raw_data = {
'contentItems' : [{
'contenttype' : 'text/plain',
'content': text
}]
}
input_data = json.dumps(raw_data)
response = requests.post(url, auth=(username, password), headers = {'content-type': 'application/json'}, data=input_data)
try:
response.raise_for_status()
except requests.exceptions.HTTPError as e:
print("And you get an HTTPError: %s"% e.message)
但是,当我 运行 这样做时,出现以下错误:
And you get an HTTPError: 400 Client Error: Bad Request
*注意:我对 人格洞察力 API 使用了相同的方法并且有效。
有什么想法吗?
谢谢
这是您应该可以使用的代码的更新副本:
import requests
import json
url="https://gateway.watsonplatform.net/relationship-extraction-beta/api/v1/sire/0"
username="bluemix_username"
password="bluemix_passowrd"
with open ("data.txt", "r") as myfile:
text=myfile.read().replace('\n', '')
input_data = {
'sid' : 'ie-en-news',
'txt' : text
}
response = requests.post(url, auth=(username, password), data=input_data)
try:
response.raise_for_status()
print response.text
except requests.exceptions.HTTPError as e:
print("And you get an HTTPError: %s"% e.message)
基本上我更改了您发布的有效负载以添加一些缺失值。
希望对您有所帮助!
如果您不想使用 data.txt
并在您的终端中使用标准输入,您可以这样做:
## -*- coding: utf-8 -*-
import os
import requests
import fileinput
class RelationshipExtractionService:
url = None
def __init__(self):
self.url = "https://gateway.watsonplatform.net/relationship-extraction-beta/api/v1/sire/0"
self.user = "<username>"
self.password = "<password>"
def extract(self, text):
data = {
'txt': text,
'sid': 'ie-en-news', # English News, for Spanish use: ie-es-news
'rt': 'xml',
}
r = requests.post(self.url,
auth=(self.user, self.password),
headers = {
'content-type': 'application/x-www-form-urlencoded'},
data=data
)
print("Request sent. Status code: %d, content-type: %s" %
(r.status_code, r.headers['content-type']))
if r.status_code != 200:
print("Result %s" % r.text)
raise Exception("Error calling the service.")
return r.text
if __name__ == '__main__':
service = RelationshipExtractionService()
for line in fileinput.input():
print service.extract(line)
用法
简单的文字分析:
echo "New York is awesome" | python main.py
您还可以通过管道传输文件:
cat article.txt | python main.py
从 .txt 到 .xml:
cat article.txt | python main.py > article.xml