我需要与此相关的帮助。基本上,我需要使用此命令。这是使用CURL给出的示例。我需要做的只是将其粘贴到cmd中即可完成其工作。
curl \
-H "Content-Type: application/json" -X POST \
-u "{username}":"{password}" \
-d "{\"dialog_node\":\"greeting\",\"conditions\":\"#hello\",\"output\":{\"text\":\"Hi! How can I help you?\"},\"title\":\"greeting\"}" "https://gateway-s.watsonplatform.net/conversation/api/v1/workspaces/bec28d8f-18c1-4e97-8d08-9c842c658b51/dialog_nodes?version=2017-05-26"
URL文档可在此处找到:https://www.ibm.com/watson/developercloud/conversation/api/v1/?curl#create_dialognode
现在的问题是,我想在python脚本中而不是在CMD中运行它。.我已经搜索了google和stackOverflow了几个小时。.但是我似乎找不到正确的答案。。
到目前为止,我已经看到ppl使用1.要求2.urllib3.urllib24.pycurl5.subprocess
我想以正确的方式做。在python脚本中运行上述命令的最佳方法是什么,我该怎么做?
也我正在使用python 3
喜欢Simon O'Doherty说,您可以使用Python SDK来使用对话服务。使用服务或SDK或http
requests的确是最佳实践。
“如果某件事值得做,那值得做对,对吧?”。所以呢您问的是“我如何在我的内部运行其他程序程序,只是发出一个很少的Web请求?“。
您可以使用cURL命令,可以。但是看起来很难Pythonic。仅需一个小请求,这就是很多工作。 Python的不仅如此。
来自短语here的作者。
但是,您的问题似乎确实要在Python代码中使用cURL
命令,因此,这里是一个示例。在这种情况下,您可以使用subprocess。
致电Converstation:
import subprocess
subprocess.call(['curl', '-x', 'POST', '-H', '"Accept: application/json"', '-u', '{"userNameFromServiceCredentials:PasswordFromServiceCredentials" }', '"https://gateway-s.watsonplatform.net/conversation/api/v1/workspaces/bec28d8f-18c1-4e97-8d08-9c842c658b51/dialog_nodes?version=2017-05-26"'])
重要:要发送消息并获取输出,您需要使用函数subprocess.check_output();
,例如subprocess.check_output();
。并向正确的路由器发送消息,您的cURL命令需要类似于example和@German Atannasio中的示例。
[注:此答案仅是告诉您遵循哪种更好的方法,如果您真的想@Pridkkett,则遵循一种“石头路径”。
如果您使用的是Watson Conversation,则可以只使用Python WDC SDK。
对于上面的示例,它是:
https://github.com/watson-developer-cloud/python-sdk
此调用是全有还是全无,因此,如果您有现有节点,它将删除它们。原因是SDK没有对单个节点进行编辑。但这是一种更快的方法,而不是编辑单个节点(如果您有一个以上的节点)。
如果要进行单个调用,则需要使用from watson_developer_cloud import ConversationV1
username = 'USERNAME',
password = 'PASSWORD',
version = '2017-05-26',
workspace_id = 'bec28d8f-18c1-4e97-8d08-9c842c658b51'
url = 'https://gateway-s.watsonplatform.net/conversation/api'
conversation = ConversationV1(
username=username
password=password,
version=version,
url=url
}
dialog_nodes = []
welcome_node = {
'output': {
'text': { 'values': [ 'Welcome!' ],
'selection_policy': 'sequential'
}
},
'parent': None,
'context': None,
'metadata': None,
'next_step': None,
'conditions': 'welcome',
'dialog_node': 'Welcome',
'previous_sibling': None
}
dialog_nodes.append(welcome_node)
# this appends to the previous node above, set by previous_sibling
node = {
'dialog_node': 'greeting',
'conditions': '#hello',
'context': None,
'metadata': None,
'next_step': None,
'output':{
'text': { 'values': [ 'Hi! How can I help you?' ]},
'selection_policy': 'sequential'
}
},
'title': 'greeting ',
'previous_sibling': 'Welcome',
'parent': None
}
dialog_nodes.append(node)
## Update the workspace.
response = conversation.update_workspace(
workspace_id=workspace_id,
dialog_nodes=dialog_nodes
)
print(response)
之类的东西,直到更新SDK。
示例(使用与上面相同的变量:
requests
在带有pycurl的python3中,我有些麻烦,以至于我不得不直接发送二进制文件而不是路径。IBM Watson
import requests
from requests.auth import HTTPBasicAuth
endpoint = '{}/v1/workspaces/{}/dialog_nodes?version={}'.format(url,workspace_id,version)
basic_auth = HTTPBasicAuth(username, password)
# Change the condition to always execute.
node['conditions'] = 'true'
response = requests.post(url=endpoint, auth=basic_auth, json=node)