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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

Q&A

1回答

636閲覧

Microsoft Translator API  認証トークンが取得できません。

ichiroRuslan

総合スコア6

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

0グッド

0クリップ

投稿2019/05/21 01:58

前提・実現したいこと

現在、Microsoft Translator APIを使用したiOS翻訳アプリを作っています。
使用言語はSwiftです。

https://docs.microsoft.com/ja-jp/azure/cognitive-services/translator/reference/v3-0-reference
こちらのレファレンスなどを参考にしていますが、

翻訳する際に必要になるアクセルトークンが取得できません。

一応、リファレンス通りに呼び出しているつもりなので、何が原因でトークンが取れないのかが分かりません。
そこで、
・書き方で間違っているところがある
・そもそも違う値をパラメータにしている

何かアドバイスをしていただけたら嬉しいです。

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

下記ソースコードのように、 Alamofireを使って、 https://api.cognitive.microsoft.com/sts/v1.0/issueToken に、 [Ocp-Apim-Subscription-Key:"リソース管理画面のキー1"] をパラメータに追加してAPIを叩いていますが、 返却されるJSONでは、 リクエストする時にスクリプションキーを含めているか確認しなさいと言われています。 { "error":{ "statusCode": 401, "message": "Access denied due to missing subscription key. Make sure to include subscription key when making requests to an API." }}

該当のソースコード

swift

import Foundation import Alamofire struct APIBase { let host: String let url: String let method: HTTPMethod let parameters: Parameters init(path: String, method: HTTPMethod = .get, parameters: Parameters = [:]) { self.host = App.API.domain + App.API.directory self.url = self.host + path self.method = method self.parameters = parameters } func request(success: @escaping(_ data: Data) -> (), failed: @escaping(_ error: String) -> ()) { Alamofire.request(url, method: method, parameters: parameters).response { (response) in guard let data = response.data else { return failed("データを取得できませんでした") } success(data) } } } // 認証トークン取得クラス class GetTokenAPI { class func request(key: String, onSuccess: @escaping(TokenEntity) -> (), onError: @escaping(String) -> ()) { let p: [String : Any] = ["Ocp-Apim-Subscription-Key": key] let api = APIBase(path: App.API.accessToken, method: .post, parameters: p) api.request(success: { (data) in do { let entity: TokenEntity = try JSONDecoder().decode(TokenEntity.self, from: data) if entity.statusCode != 200 { onError(entity.message ?? "") return } onSuccess(entity) } catch { onError("データの取得に失敗しました") } }) { (errorMessage) in onError(errorMessage) } } // このクラスでAPIを叩く class TopViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() GetTokenAPI.request(key: "Cognitive Services リソース管理の キー1", onSuccess: { (tokenEntity) in }) { (error) in } } }

試したこと

自分のコードの書き方が悪いのかなと思い、一度、postmanで
https://api.cognitive.microsoft.com/sts/v1.0/issueToken
?Ocp-Apim-Subscription-Key=サブスクリプションキー
を叩きましたが、下記のようにResource not foundが返ってきます。

{
"error": {
"statusCode": 404,
"message": "Resource not found"
}
}

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

Ocp-Apim-Subscription-Keyをリクエストヘッダーに入れていないのではないでしょうか?

投稿2019/05/22 06:12

tabuu

総合スコア2449

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

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

ichiroRuslan

2019/05/24 23:57

GetTokenAPIクラスのrequestメソッド内で パラメータに let p: [String : Any] = ["Ocp-Apim-Subscription-Key": key] という形でAPIを叩いているつもりです。 引数のわたし方がおかしいのでしょうか。。。
tabuu

2019/05/26 06:58 編集

Alamofireというライブラリは詳しくありませんが、Ocp-Apim-Subscription-Keyはパラメータではなく、リクエストヘッダーに入れる必要があります。
ichiroRuslan

2019/05/28 02:28

なるほどです。 ありがとうございます! 試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問