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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

1回答

548閲覧

node.js requestモジュールを用いてRequestを送りたい

chiba_kun

総合スコア16

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2020/01/22 05:52

問題

requestモジュールを用いて、face++というwebAPIにリクエストを送りたいのですがエラーが発生し上手くいかず困っています。

経緯と試してみたこと

フォームから写真を投稿すると、その写真に写っている人間の性別や年齢を表示する、単純なウェブサービスを作りたいと思っています。

クライアントユーザがフォームに写真を投稿する→cloud functionに登録してあるトリガーが発動して、cloud function側からwebAPIにリクエストを送る→レスポンス結果のjsonを受け取ったcloud function が写真を投稿したクライアントユーザに値を返すという流れを想定しています。

ですが、cloud functionからwebAPIを叩くのが上手くいきません。cloud functionに登録してある実際のコードが下記です。

let request = require("request"); let options = { url: "https://api-us.faceplusplus.com/facepp/v3/detect", headers: { "image_url":"質問する時に消しました。", "api_key":"質問する時に消しました。", "api_secret": "質問する時に消しました。", } }; function callback(error, response, body) { if (!error && response.statusCode == 200) { var info = JSON.parse(body); } } request.post(options, callback);

写真を投稿したユーザに結果を返す、ということはせず、まずcloud function側からリクエストを送ること自体上手くいくのかどうか試そうとしました。結果は上手くいきませんでした。

{"error_message":"MISSING_ARGUMENTS: api_key"}

api_keyがない、とのこと。

私はnode.jsを扱ったことはなくrequestやexpress、httpのモジュールについてもあまり分かりません、なのでリクエストを送る時に書いた上記のコードは下記のQiitaを参考にしました。

参考先リンク
イメージ説明

参考先ではapi_keyはheadresの中に入れています。リクエストを送るエンドポイントは違いますが、同じrequestモジュールを用いてるので同じ記述でも問題はないと思うのですが、APi側からはapi_Keyがないという旨のエラーが返ってきます。

var options = { url: "https://api-us.faceplusplus.com/facepp/v3/detect", image_url:"質問する時に消しました。", api_key:"質問する時に消しました。", api_secret: "質問する時に消しました。", } };

headresを消して、キーと値のペアで送ろうとしましたが、これも上手くいかず。

URLに?apy_key=というようなパラメータにして送ろうとしましたが、これも同じエラーが発生。

curlからはwebAPiを叩けるので、api_keyやapi_secretの値には間違いはありません。

質問

requestモジュールを用いて、webapiを叩く場合どのようにして、api_keyとapi_secretを記述すればよいのでしょうか?

ヒントとなるキーワードや記事を教えて欲しいです。

※また質問文の中で、質問とは直接関係はないが、用語の使い方を間違えていたり、何か大きな勘違いをしている節があれば、それらについて指摘などをしてくださると、成長に繋がるので指摘していただけると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

どのようにして、api_keyとapi_secretを記述すればよいのでしょうか?

APIのリファレンスを確認してください。

Each API request must be POST request. You can add the parameters in the form of Query String, and use multipart/form-data to upload image files.

とのことです。認証用のものも含めて、パラメータはPOSTのbodyとして(フォームで送るときと同じように)渡してください。

投稿2020/01/22 06:05

maisumakun

総合スコア145183

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

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

chiba_kun

2020/01/22 14:52

ありがとうございます!読んでみます!
chiba_kun

2020/01/23 03:58

ありがとうございます!無事cloud functionからwebapiにリクエストを送ることが出来ました! maisumakunさんの引用している文章を詳しく読もうと思い、APIのリファレンスを開き、ページ内文字検索で引用している文章の一部を検索したのですが、ヒットしませんでした。網羅的にAPIリファレンスのページに検索をかけてみたのですが、それでもヒットせず。もしよろしければ、引用した文章がどの項目にあった記述なのか教えていただけませんでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問