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

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

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

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

API

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

Q&A

解決済

2回答

1622閲覧

curlを用いてface++を叩きたい

chiba_kun

総合スコア16

cURL

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

API

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

0グッド

0クリップ

投稿2019/09/17 20:23

編集2019/09/18 02:13

#実現したいこと

curlを用いてAPI、face++を使いたいです。

#経緯

参考サイト

上記の参考サイトを読みながら、作業を進め、ApikeyとApiselectを取得し、curlのインストールも終わらせました。

イメージ説明

イメージ説明

下記は参考サイトの記事を一部抜粋した画像です。

イメージ説明

参考サイトの記事を見様見真似で、実行してみると、下記のような結果になりました。

イメージ説明

#試してみたこと

apikeyやapiselectの書き間違えがないか確認はしました。

エラー文をコピーして検索、ということもしてみましたが、内容が難しく解決には至りませんでした。

「-f」がエラーの原因だということは分かったので、安直に-fを消してみるということもしましたが、解決には至りませんでした。

#環境

使用ソフト

curl バージョン curl-7.66.0-win64-mingw

Window powershell

APIを叩くのは初めてで、コマンドプロンプトやパワーシェルも殆ど使ったことはありません。

#追記1

回答でいただいた指摘を改善し、「<>」を外す、「=」が入っていない、「curlをcurl.exe」に変えてみる、を実行した結果が以下の画像です。

※一つ目実行は「curl」、二つ目の実行は「curl.exe」での実行です。

イメージ説明

「-F」に理由があるみたいなので、「-F」を消してみると、今度はバックスラッシュが云々みたいなエラーが。。
なのでバックスラッシュも消してみて実行した結果が以下の画像です。

イメージ説明

エラー文はでなくなったのですが、参考サイトによるとjsonが返ってくるはずなので、エラー文が出ていないだけでやはり上手くいってはいないようです。

#追記2

実行結果は画像ではなく、テキストとして貼り付けた方が良いと指摘を受けたので追記1の画像をテキストにしました。

回答で指摘を受けた、「=」「<>」を修正し、「curl」での実行結果

PS C:\Users\chiba> curl -X POST "https://api-us.faceplusplus.com/facepp/v3/detect" -F "api_key=" \ >> -F "api_secret=" \ >> -F "image_file=http://www.shokyo.jp/wp-content/uploads/2015/10/%E9%A1%94%E5%86%99%E7%9C%9F-200x300.jpg" \ {"error_message":"MISSING_ARGUMENTS: api_secret"} curl: (6) Could not resolve host: \ -F : 用語 '-F' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名 前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。 発生場所 行:2 文字:1 + -F "api_secret=" \ + ~~ + CategoryInfo : ObjectNotFound: (-F:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException -F : 用語 '-F' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名 前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。 発生場所 行:3 文字:1 + -F "image_file=http://www.shokyo.jp/wp-content/uploads/2015/10/%E9%A1 ... + ~~ + CategoryInfo : ObjectNotFound: (-F:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

「=」「<>」を修正し、「curl.exe」での実行結果

PS C:\Users\chiba> curl.exe -X POST "https://api-us.faceplusplus.com/facepp/v3/detect" -F "api_key=" \ >> -F "api_secret=" \ >> -F "image_file=http://www.shokyo.jp/wp-content/uploads/2015/10/%E9%A1%94%E5%86%99%E7%9C%9F-200x300.jpg" \ >> {"error_message":"MISSING_ARGUMENTS: api_secret"} curl: (6) Could not resolve host: \ -F : 用語 '-F' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再 試行してください。 発生場所 行:2 文字:1 + -F "api_secret=" \ + ~~ + CategoryInfo : ObjectNotFound: (-F:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException -F : 用語 '-F' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再 試行してください。 発生場所 行:3 文字:1 + -F "image_file=http://www.shokyo.jp/wp-content/uploads/2015/10/%E9%A1 ... + ~~ + CategoryInfo : ObjectNotFound: (-F:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException

エラー文には「-F」と書かれているので、安直な考えで「-F」を削除。すると次は「¥」が云々でエラー。なのでまた安直に「¥」を削除した実行結果

PS C:\Users\chiba> curl.exe -X POST "https://api-us.faceplusplus.com/facepp/v3/detect" -F "api_key=" >> "api_secret=" >> "image_file=http://www.shokyo.jp/wp-content/uploads/2015/10/%E9%A1%94%E5%86%99%E7%9C%9F-200x300.jpg" {"error_message":"MISSING_ARGUMENTS: api_secret"} api_secret= image_file=http://www.shokyo.jp/wp-content/uploads/2015/10/%E9%A1%94%E5%86%99%E7%9C%9F-200x300.jpg PS C:\Users\chiba>

PowerShellに表示される、黒と赤のエラー文はなくなりました。が、参考サイトによるとjsonが返ってくるはずなのに上手くはいっていません。

※既に回答で指摘をいただきまた。-Fはパラメータを渡すという意味があるそうで、それは当然上手くいきませんよね。。

#追記3

回答でご指摘いただいた、「¥」を「`」に変えてみての、実行結果です。

curl -X POST "https://api-us.faceplusplus.com/facepp/v3/detect" -F "api_key=" ` >> -F "api_secret=" ` >> -F "image_file=http://www.shokyo.jp/wp-content/uploads/2015/10/顔写真-200x300.jpg" ` >> -F "return_landmark=1" ` >> -F "return_attributes=gender,age" {"time_used": 34, "error_message": "MISSING_ARGUMENTS: image_url, image_file, image_base64", "request_id": "1568761381,3b0185fd-ce8c-466b-847c-5297dbfcf21e"}

今までPowerShellに表示されていた、「-F」云々のエラーは一切表示されなくなりました。

ただ、コードにも「erroe-message」と書かれているように上手くはいっておらず、参考サイトによると成功すれば以下の画像ようなjsonが返ってくるそうなのです。

また何度か同じコードを実行したのですが、「"time_used": 」の部分に入る数字にはまいかいばらつきがありました。

また「"error_message": "MISSING_ARGUMENTS: image_url, image_file, image_base64",」と書いてあったので、apiに渡している画像が上手くいかない原因なのかなと思い、画像を変えてみましたが、上手くはいきませんでした。

![イメージ説明]

#追記4

回答のおかげで、多少の解決は出来ました。。!

エラー文の内容を見ると、「"request_id"」と表記があるので、apiにデータをpostすること自体は出来ているはずだと考えました。。

なので渡している画像に問題があると思い、いくつかの形式のファイルを渡してみたり、ローカル画像を渡してみたりと色々やってみましたが、うまくはいきませんでした。

#追記5

ファイル名に日本語が含まれているのが、エラーが発生している理由かもしれない、というご指摘がありました。

日本語ではないファイルを受け渡して見た結果が以下のコードです。

curl.exe -X POST "https://api-us.faceplusplus.com/facepp/v3/detect" -F "api_key=" ` >> -F "api_secret=" ` >> -F "image_file=http%3a%2f%2fwww%2eshokyo%2ejp%2fwp%2dcontent%2fuploads%2f2015%2f10%2f%25E9%25A1%2594%25E5%2586%2599%25E7%259C%259F%2d200x300%2ejpg" ` >> -F "return_landmark=1" ` >> -F "return_attributes=gender,age" {"time_used": 33, "error_message": "MISSING_ARGUMENTS: image_url, image_file, image_base64", "request_id": "1568772469,a089b609-b41a-4c44-b323-208c3ae54c18"} PS C:\Users\chiba>

質問においては毎回APIに渡してた画像のURLを、エンコードして実行した結果が上のコードです。また英数字のみのファイル名の画像を探してAPIに渡してみましたが、結果は同じでした。

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

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

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

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

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

Y.H.

2019/09/18 01:26

> 顔写真-200x300.jpg ・漢字のファイル名ではなく英数のみのファイル名だとどうなりますか? ・「顔写真」をURLエンコードしたものを指定するとどうなりますか?
chiba_kun

2019/09/18 02:09

>>・漢字のファイル名ではなく英数のみのファイル名だとどうなりますか? >>「顔写真」をURLエンコードしたものを指定するとどうなりますか? どちらも同じようにエラーメッセージが表記されました。詳しい内容はを追記します!
Y.H.

2019/09/18 03:15

URLエンコードする場合は日本語の部分のみエンコードして下さい。全体をエンコードするとURLでは無くなってしまいますので。
chiba_kun

2019/09/18 03:16

知りませんでした。ありがとうございます。。。!
guest

回答2

0

ベストアンサー

参考サイトの書式ですが...

$ curl -X POST "https://api-us.faceplusplus.com/facepp/v3/detect" -F "api_key=<api key>" \

-F "api_secret<api secret>"
-F "image_url=<顔の入った写真のURL>" \

と 公式ドキュメント( https://console.faceplusplus.com/documents/5679127 )の書式を比較してみると

curl -X POST "https://api-us.faceplusplus.com/facepp/v3/detect" -F "api_key=<api_key>" \

-F "api_secret=<api_secret>"
-F "image_file=@image_file.jpg"
-F "return_landmark=1"
-F "return_attributes=gender,age"

api_secret のあとの = が抜けていますので、 = を追加してください。

curl ではなく curl.exe にすると状況は変わりますか?

また、画面キャプチャーを見ると 値の前後に <> が残っていますが、書式の <api_key><api_secret><顔の入った写真のURL> の部分は、通常、 <> も含めて置き換えますので、値の前後の <> を消すと状況は変わりますか?

投稿2019/09/17 21:17

CHERRY

総合スコア25171

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

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

chiba_kun

2019/09/17 21:57

回答ありがとうございます! =の部分は自分で気づけたはずのミスですね。自分での確認が不十分でした。 ご指摘いただいた箇所を、修正し実行をしました。回答を編集し、実行結果を追記し、更新をしました。
CHERRY

2019/09/17 22:21 編集

API の呼び出しは、 curl.exe の方で、うまく行ったようですね。 API を実行した結果、API が、 API に渡したパラメータが間違っているので、 [error_message=":"MISSING_ARGUMENTS: api_secret"] とメッセージを返していますね。 つまり、API を呼び出した パラメータに api_secret が無いと言っていますね。 画面キャプチャのコマンド行をみると api_secret や image_file の部分で、 -F がついていないようです。 curl は、-F がついている文字列を パラメータとして API にわたすので、 curl -X POST URL -F "api_key=〜" -F "api_secret=〜" -F "image_file=〜" のように -F は API にわたす値1つずつに必要です。 また、コマンドとエラーメッセージは、画面キャプチャーだけではなく テキストでも貼り付けていただけないでしょうか?
chiba_kun

2019/09/17 22:38

返信ありがとうございます;; >>また、コマンドとエラーメッセージは、テキストで 貼り付けていただけないでしょうか? 言われてみれば、エラー文のコピーなどが出来ず、可読性も低くなってしまうので、画像よりもテキストの方が良いですね。今まで気づきませんでした。ありがとうございます! >>API の呼び出しは、 curl.exe の方で、うまく行ったようですね。 私の書いた文章がもしかすると分かりづらく、もしかすると誤解を招いているかもしれません。 申し訳ございません。。。 追記には新たに二枚の画像を追加しました。一枚目の画像は二つの実行結果が書かれており、これはご指摘いただいた箇所を修正した結果です。「<>」「=」の部分を直し、curl実行と、curl.exe実行の二つのパターンです。二枚目の画像はエラー文が出てしまう原因と思しき「-F」と「\」を消してcurl.exeで実行した結果です。「-F」はパラメータを渡すという意味だったのですね。それを消してしまった私はとてもあれですね。。。消してみたらエラー文がでなくなったので、もしかすると解決に結びつくのかと浅はかな考えをしていました。 文章を書き直し、実行結果を画像ではなくテキストにし、質問を編集します。。!
CHERRY

2019/09/17 22:53

あ、キャプチャー確認しました。 Powershell ですね。行末のエスケープですが、 ¥ の代わりに ` を使うとどうなりますか?
chiba_kun

2019/09/17 23:15

今まで表示されていた、「-F」にまつわるエラー文はすべてなくなりました! 詳しい実行結果は質問を編集して追記しました!
chiba_kun

2019/09/18 03:18

回答のおかげで、無事問題を解決することが出来ました。ありがとうございます!
guest

0

face++の公式ドキュメントを読み、

>> -F "image_file=http%3a%2f%2fwww%2eshokyo%2ejp%2fwp%2dcontent%2fuploads%2f2015%2f10%2f%25E9%25A1%2594%25E5%2586%2599%25E7%259C%259F%2d200x300%2ejpg"

上記の「image_file」を「image_url」に書き換えたところ、jsonが返ってきました。多分解決したはず。。です。。。!

投稿2019/09/18 03:06

chiba_kun

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問