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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

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

Q&A

解決済

1回答

2105閲覧

APIを叩いた際、「パラメータbodyは必須です」との結果が返ってくる

nagomi72

総合スコア51

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

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

0グッド

0クリップ

投稿2019/03/21 04:18

エラーメッセージの通り、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リクエストする

ご助言を頂ければ幸いです。

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

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

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

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

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

stdio

2019/03/21 06:26

テストのお尻に何かしらの変な文字コードが含まれているとか、要因はいろいろ考えられるので、もう少し調べてみてはいかがでしょうか?
fuzzball

2019/03/22 02:53

なんでドキュメント見ないの?
fuzzball

2019/03/22 02:55

ドキュメント読まずにAPI使うとか、ほんと迷惑だわ。
nagomi72

2019/03/22 04:17

ドキュメントには目を通してましたけど、いまいち読み方が分からなくて質問させてもらいました。 後学の為にお尋ねしたいのですが、今回のケースならドキュメントのどの部分を読み、 正解にたどり着けばよかったのでしょう?
nagomi72

2019/03/22 04:36

POSTメソッドやPUTメソッドを使用するエンドポイントのリクエストボディはContent-Type: application/x-www-form-urlencodedである必要があります。 ↑すいませんここが理解できていません。 "body=Hello+Chatwork%21&self_unread=0" とあるから当初質問したlet params = ["body": msg]じゃなくて let params = "body=\(msg)"になるという認識で合っていますか?
guest

回答1

0

ベストアンサー

こんな感じでいけました。

let params = "body=(msg)" request.httpBody = params.data(using: .utf8)

投稿2019/03/21 09:16

razuma

総合スコア1313

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

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

nagomi72

2019/03/22 01:11

ありがとうございます! 大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問