python - Watson Discovery API 的 add_document 方法出错
问题描述
我尝试将此代码与发现 API 一起使用,但出现了一个奇怪的错误。似乎发现无法识别我的简单 HTML 并拒绝它。我尝试了很多简单的 HTML 文件,但它不起作用:
导入系统 导入操作系统 导入json 从 watson_developer_cloud 导入 DiscoveryV1discovery = DiscoveryV1(version="2018-10-15", url='https://gateway.watsonplatform.net/discovery/api', username=username, password=password) with open((os.path.join(os.getcwd(), 'html_simple_file.html')), "r") as fileinfo: add_doc = discovery.add_document(Environment_Id, Collection_Id, file_info=fileinfo, file_content_type = "text/html") print(json.dumps(add_doc, indent=2))
--------------------------------------------------------------------------- WatsonApiException Traceback (most recent call last) in () 13 Collection_Id, 14 file_info=fileinfo, ---> 15 file_content_type = "text/html") 16 print(json.dumps(add_doc, indent=2))
~/anaconda3/lib/python3.7/site-packages/watson_developer_cloud/discovery_v1.py in add_document(self, environment_id, collection_id, file, metadata, file_content_type, filename, **kwargs) 1246 params=params, 1247 files=form_data, -> 1248 accept_json=True) 1249 return response 1250 ~/anaconda3/lib/python3.7/site-packages/watson_developer_cloud/watson_service.py in request(self, method, url, accept_json, headers, params, json, data, files, **kwargs) 488 error_info = self._get_error_info(response) 489 raise WatsonApiException(response.status_code, error_message, --> 490 info=error_info, httpResponse=response) WatsonApiException: Error: Invalid Content-Type. Expected 'multipart/form-data', got 'application/octet-stream', Code: 400 , X-dp-watson-tran-id: gateway01-30825332 , X-global-transaction-id: 7ecac92c5bf2f40901d65b74
我不明白它是如何工作的。感谢您的任何帮助!
解决方案
问题在于您需要传递文件名(.html)的文件路径的open调用。这是工作代码
import os
import json
from watson_developer_cloud import DiscoveryV1
discovery = DiscoveryV1(
version="2018-10-15",
username='{USERNAME}',
password='{PASSWORD}',
#iam_apikey='{apikey}',
url='https://gateway.watsonplatform.net/discovery/api'
)
with open(os.path.join(os.getcwd(), '/Users/VMac/Downloads/', 'Ana.json.html')) as fileinfo:
add_doc = discovery.add_document('{DISCOVERY_ENVIRONMENT_ID}', '{DISCOVERY_COLLECTION_ID}', file=fileinfo).get_result()
print(json.dumps(add_doc, indent=2))
在上面的代码中传递所有必需的详细信息后,输出如下
{
"document_id": "6439d5f2-f273-4173-8d25-54dc934df",
"status": "processing"
}
在此处参考 add_document的 API 文档
推荐阅读
- javascript - 如何将通过javascript创建的画布居中到屏幕的中心
- github - 从 GraphQL API 列出协作者
- python - 清理具有高工作时间可变性的芹菜中的废弃任务的适当方法是什么?
- docker - 如何在“docker build”时间打印变量的值,无论是 env 还是 arg?
- python - 我应该使用什么结构格式字符串来存储 uint16_t、uint8_t、unint32_t、uint8_t 数组、uint8_t 枚举?
- kubernetes - webhook 的文件存在,但 cube-api 因文件不存在而失败
- python - 使用 Python 进行测试的自动构建文件
- slack - 为什么我会从 Slack Incoming Webhook 获得完整的降价响应?
- sql - Postgres 发现价值的变化
- javascript - 使用 mapStateToProps 和 connect() 调度后 React 组件未重新渲染