質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

4102閲覧

curlでjsonを送るコードをpythonで実装したい

nanasina8

総合スコア2

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2020/07/21 13:28

前提・実現したいこと

python3でchaplus.jpの雑談APIを使って、文章を返してほしい

APIの仕様書を読んだ

発生している問題・エラーメッセージ

pythonでこのAPIを使うためにrequestsを使って、書き直した。
しかしcurl(サイトにあったサンプル)では文字列が帰ってきたが、同じことをpythonで書いたものでは
{"status":"not found","message":"Not Found"}となって帰ってこなかった

該当のソースコード

curl

1curl -v -H "Content-Type: application/json" -X POST -d '{"utterance":"調子はどう?","username":"太郎","agentState":{"agentName":"エージェント","tone":"kansai", "age":"20歳"},"addition":{"options":["疲れた","肩凝った"],"utterancePairs":[{"utterance":"肩凝った","response":"適度に運動しないとね"}]}}' https://www.chaplus.jp/v1/chat?apikey\=<APIKEY> 2

python3

1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3 4import requests 5import json 6 7# エンドポイント 8url = 'https://www.chaplus.jp/v1/chat?apikey\=APIKERY' 9headers = {"Content-Type": "application/json"} 10data = { 11 "utterance": "調子はどう?", 12 "username": "太郎", 13 "agentState": [{"agentName": "エージェント"}, {"tone": "kansai"}, {"age": "20歳"}], 14 "addition": [{"options":["疲れた","肩凝った"]},{"utterancePairs":[{"utterance":"肩凝った","response":"適度に運動しないとね"}]}}] 15 } 16# リクエスト 17res = requests.post(url, headers=headers, json=data, ) 18values = res.text 19print(values) 20

試したこと

json書式の書き方を変えた
シングルクオーテーションマークをダブルクオーテーションマークに変えた

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

もしかすると、書き損じの可能性もあるかと思うのですが、
urlの値がおかしいように見えます。エスケープ文字が入っているのですが、
シングルクォートで囲っているので不要ではないでしょうか

python

1url = 'https://www.chaplus.jp/v1/chat?apikey\=APIKERY' 23url = 'https://www.chaplus.jp/v1/chat?apikey=APIKEY'
Python 3.8.4 (default, Jul 16 2020, 06:26:29) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> url = 'https://www.chaplus.jp/v1/chat?apikey\=APIKERY' >>> url 'https://www.chaplus.jp/v1/chat\?apikey\=APIKERY' ^^ ^^

投稿2020/07/21 15:04

YakumoSaki

総合スコア2027

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nanasina8

2020/07/26 01:32

回答ありがとうございます。変えてみましたが変わりませんでした
guest

0

ベストアンサー

こちらでは以下のようにエスケープ文字を除いたもので正常に動作しました。
なおdataは提示されているcurlコマンドのものに差し替えています。

Python

1import requests 2import json 3 4APIKEY = '~' 5url = f'https://www.chaplus.jp/v1/chat?apikey={APIKEY}' 6headers = {"Content-Type": "application/json"} 7data = { 8 "utterance":"調子はどう?", 9 "username":"太郎", 10 "agentState":{"agentName":"エージェント","tone":"kansai", "age":"20歳"}, 11 "addition":{"options":["疲れた","肩凝った"],"utterancePairs":[{"utterance":"肩凝った","response":"適度に運動しないとね"}]}} 12 13res = requests.post(url, headers=headers, json=data) 14values = res.text 15 16print(json.dumps(json.loads(values), indent=2, ensure_ascii=False)) 17""" 18{ 19 "utterance": "調子はどう?", 20 "username": "太郎", 21 "keyword": "調子", 22 "agentState": { 23 "agentName": "エージェント", 24 "age": "20歳", 25 "tone": "kansai" 26 }, 27 "addition": { 28 "ngWords": null, 29 "utterancePairs": [ 30 { 31 "utterance": "肩凝った", 32 "response": "適度に運動しないとね" 33 } 34 ], 35 "addSentences": null, 36 "unknownResponses": null, 37 "options": [ 38 "疲れた", 39 "肩凝った" 40 ], 41 "qaSet": null 42 }, 43 "bestResponse": { 44 "utterance": "元気やよ。", 45 "score": 0.9444, 46 "url": "", 47 "options": null 48 }, 49 "responses": [ 50 { 51 "utterance": "暑くて辛いね", 52 "score": 0.9444, 53 "url": "", 54 "options": null 55 }, 56 { 57 "utterance": "圧倒的絶好調", 58 "score": 0.9444, 59 "url": "", 60 "options": null 61 }, 62 { 63 "utterance": "元気やよ。", 64 "score": 0.9444, 65 "url": "", 66 "options": null 67 }, 68 { 69 "utterance": "元気や。それにしても寒いやね。", 70 "score": 0.9444, 71 "url": "", 72 "options": null 73 }, 74 { 75 "utterance": "ぼちぼちかな", 76 "score": 0.9444, 77 "url": "", 78 "options": null 79 }, 80 { 81 "utterance": "たぶんげんきかな", 82 "score": 0.9444, 83 "url": "", 84 "options": null 85 }, 86 { 87 "utterance": "すこぶってるよ", 88 "score": 0.9444, 89 "url": "", 90 "options": null 91 }, 92 { 93 "utterance": "すこぶってまんねん", 94 "score": 0.9444, 95 "url": "", 96 "options": null 97 }, 98 { 99 "utterance": "調子良くないよ 人間のエゴと煩悩でつぶれそう でも一生懸命にオノレの使命をつくして頑張るの", 100 "score": 0.8889, 101 "url": "", 102 "options": null 103 }, 104 { 105 "utterance": "もっと社会性を身に付けたいや", 106 "score": 0.7778, 107 "url": "", 108 "options": null 109 } 110 ], 111 "tokenized": [ 112 "名詞,一般,*,*,*,*,調子,チョウシ,チョーシ", 113 "助詞,係助詞,*,*,*,*,は,ハ,ワ", 114 "副詞,助詞類接続,*,*,*,*,どう,ドウ,ドー", 115 "記号,一般,*,*,*,*,?,?,?" 116 ], 117 "options": [ 118 "疲れた", 119 "肩凝った", 120 "ランチは1人で食べたい派です", 121 "今日は愛妻弁当です", 122 "おしゃれしたい", 123 "秋は何しよう", 124 "お腹が鳴って恥ずかしいです", 125 "テレビ", 126 "炭水化物摂り過ぎると眠くなるかな", 127 "トイレにこもってます", 128 "健康", 129 "昼食はどうしようかな", 130 "コンビニ弁当のクオリティ上がってる気がする", 131 "定時帰宅", 132 "お昼ご飯食べ過ぎちゃった", 133 "人はみんな平等", 134 "毎日がエブリデイ", 135 "今日は昼休み取れそうにないな", 136 "この頃肉ばかり食べている気がする", 137 "明るいうちに洗濯でもしようかな", 138 "午後はショッピングに出かけます", 139 "いつ行動するのか", 140 "寒くて風邪をひきそう", 141 "犯罪がなくならないね", 142 "デート中なので今おしゃべりできません", 143 "ランチにいくらまで払えますか", 144 "豆知識を教えて", 145 "ウォーキング", 146 "明日が来るのが嫌だ", 147 "午後何しよう、楽しいことしたい", 148 "夏は何しよう", 149 "冬は何しよう", 150 "海を眺めにいきたいな", 151 "ルーレット", 152 "こんにちは", 153 "トイレ行きたい", 154 "日が出ているうちに布団を干そうかな", 155 "午後もがんばらないとなー", 156 "疲れたから昼寝しようかな", 157 "まだ昼間、1日が長いね", 158 "そろそろ仕事に戻らないと", 159 "まだお布団の中です", 160 "野菜をちゃんと食べないとなー", 161 "今起きたなんてみんなに言えない", 162 "熱い時は熱中症に気をつけないと", 163 "どうしたらいい", 164 "ランチ一緒に食べる人がいない", 165 "仕事にもどりますね", 166 "午後は勉強する予定です", 167 "ご飯食べると眠くなるよね", 168 "春は何しよう", 169 "午後は遊んで過ごそう", 170 "引っ越したい", 171 "サイコロを振る", 172 "なんだか午前中バタバタしてました", 173 "雨が降りそう", 174 "長めのランチ休憩をとる", 175 "無性にラーメンが食べたくなることありますか?", 176 "お腹減ってもう力が出ません", 177 "今日はなんだか忙しくなりそう", 178 "ランチタイムは混んでて店に入れない", 179 "午後やる気が出る好きな名言おしえて", 180 "野菜ジュースは気休めですか?", 181 "今から遠出しようと思います", 182 "おそめのランチします", 183 "昼間からお酒を飲みたい気分", 184 "夜まで暇です", 185 "昼食撮ったら間食我慢する" 186 ] 187} 188"""

投稿2020/07/26 02:56

can110

総合スコア38352

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nanasina8

2020/07/26 03:32

ありがとうございます。printの仕方が間違ってたということでしょうか?
can110

2020/07/26 03:52

いえ。printは関係ないです。urlとdataを変えたら動作しました。
nanasina8

2020/07/26 06:05

fが大事なんですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問