エラーメッセージの通り、bodyに値が入っていないため怒られているのですが、
bodyに値を入れる方法(?)でどこが間違っているのかご教授頂きたく質問しました。
ChatworkというチャットツールのAPIを叩いており、実行すればメッセージが投稿されるという
プログラムを作成しています。
以下にソースコードを記載します。
import UIKit class ViewController: UIViewController { var api_key = "my api key" var url = "https://api.chatwork.com/v2" var room_id = "my room number" var msg = "テスト" override func viewDidLoad() { super.viewDidLoad() hitTheApi() } func hitTheApi() { var urlString = "https://api.chatwork.com/v2" urlString = "(urlString)/rooms/(room_id)/messages" let request = NSMutableURLRequest(url: NSURL(string: urlString)! as URL) //set the method(HTTP-POST) request.httpMethod = "POST" //set the header(s) request.addValue(api_key, forHTTPHeaderField: "X-ChatWorkToken") //set the request-body(JSON) let params = ["body": msg] do { //ここで値を入れられていない? request.httpBody = try JSONSerialization.data(withJSONObject: params, options: []) } catch { print(error.localizedDescription) } let task = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: {data, response, error in if (error == nil) { let result = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)! print("大成功") print(result) } else { print("oh my god") print(error as Any) } }) task.resume() } }
api_keyとroom_numberは伏せさせて頂いております。
現状では実行すると、コンソールに大成功と
{"errors":["Parameter 'body' is required"]}と表示されます。
また、参考にしたURLは以下となります。
GAS,PHP,PythonでChatworkのAPIを叩く
SwiftでHTTPリクエストする
ご助言を頂ければ幸いです。
テストのお尻に何かしらの変な文字コードが含まれているとか、要因はいろいろ考えられるので、もう少し調べてみてはいかがでしょうか?
なんでドキュメント見ないの?
ドキュメント読まずにAPI使うとか、ほんと迷惑だわ。
ドキュメントには目を通してましたけど、いまいち読み方が分からなくて質問させてもらいました。
後学の為にお尋ねしたいのですが、今回のケースならドキュメントのどの部分を読み、
正解にたどり着けばよかったのでしょう?
正解に辿り着く以前の問題
http://developer.chatwork.com/ja/endpoints.html
>>POSTメソッドやPUTメソッドを使用するエンドポイントのリクエストボディはContent-Type: application/x-www-form-urlencodedである必要があります。
今回の質問の件
http://developer.chatwork.com/ja/endpoint_rooms.html#POST-rooms-room_id-messages
POSTメソッドやPUTメソッドを使用するエンドポイントのリクエストボディはContent-Type: application/x-www-form-urlencodedである必要があります。
↑すいませんここが理解できていません。
"body=Hello+Chatwork%21&self_unread=0"
とあるから当初質問したlet params = ["body": msg]じゃなくて
let params = "body=\(msg)"になるという認識で合っていますか?
回答1件
あなたの回答
tips
プレビュー