https://metadata.co.jp/apis/what-cat/detail.htmlに書かれているこの猫なに猫?apiを自分がlaravel 5.5で開発しているwebアプリから利用したいです。
やったこと
試しに説明の通りユーザー登録してユーザー名とパスワードを使ってコマンドラインで laravelのpublicフォルダの画像
./public/xxxx.jpegでためした所,
以下のようにレスポンスを得ました。
[["Australian_mist",0.6419525146484375],["american_short_hair",0.14048415422439575],["Arabian_Mau",0.13482220470905304],["BritishShortHair",0.07669025659561157],["Scottish_Fold",0.0020108497701585293]]
curl -u xxx:yyy -F "image=@.zzz" http://whatcat.ap.mextractr.net/api_query xxx : 「この猫なに猫?」のユーザ名 yyy : 「この猫なに猫?」のユーザパスワード zzz : 識別したい画像のファイル名
やりたいこと
これを利用してaws s3 にアップロードされた画像毎に何の猫か判定して表示するというアプリを作りたいです。
疑問点:
1、クエリを送る時にユーザーネームやパスワードをどういう表記で(なんというキーで?)送ったらよいか
2、画像の場所がs3のバケットないにあるとき(url表記の場合)コマンドラインでもうまくいかなかったがどうしたら良いか
叩いたコマンド
curl -u (登録したusername):(登録したpassword) -F “image=@(アマゾンs3にある画像のurl)” http://whatcat.ap.mextractr.net/api_query
エラー
Warning: setting file
Warning: https://バケット名.s3.amazonaws.com/inputs/ファイル名” failed!
curl: (26) read function returned funny value
3、curlコマンドをどのようにlarvel上で再現すれば良いかわかりません。
https://note.com/kawa1228/n/n55b3cfcb543c
こちらの記事でなんとなく書き方はわかったのですがguzzleをつかってもっと簡単に書きたくもあります。
以下にすごく適当に書いてみたコードがありますが当然うまくいきませんでした。
php
1$client = new \GuzzleHttp\Client(); 2$url = "http://whatcat.ap.mextractr.net/api_query"; 3$params = [ 4 'username' => env('whatcat_username'), 5 'passowrd' => env('whatcat_password'), 6 'image' => './public/download.jpg' 7]; 8$response = $client->request('POST', $url, $params); 9 dd($response);
エラー
GuzzleHttp \ Exception \ ClientException (403)
Client error: POST http://whatcat.ap.mextractr.net/api_query
resulted in a 403 FORBIDDEN
response: {"detail":"認証情報が含まれていません。"}
すごく初心者なのでそれをふまえて回答いただけると助かります。
上記のhttps://note.com/kawa1228/n/n55b3cfcb543cを参考にさらにやってみた
php
1 2$image_url='./public/download.jpeg'; 3$base = "http://whatcat.ap.mextractr.net/api_query"; 4// $param = "?username=env('whatcat_username')&passowrd=env('whatcat_password')&image=$image_url"; 5$param = "?username=env('whatcat_username')&passowrd=env('whatcat_password')&image='@'.$image_url"; 6$url = $base . $param; 7$headers = []; 8$method='GET'; 9 10 11$curl = curl_init(); 12curl_setopt($curl, CURLOPT_URL, $url); 13curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method); 14curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 15curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 16curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 17 18 19$responseJsonText = curl_exec($curl); 20$body = json_decode($responseJsonText , true); 21 22$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); 23curl_close($curl); // curlの処理終わり 24 25$result = []; 26$result['http_code'] = $httpCode; 27$result['body'] = $body; 28 29return $result; 30 31dd($result);
結果表示
{"http_code":403,"body":{"detail":"\u8a8d\u8a3c\u60c5\u5831\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093\u3002"}}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/07 21:23 編集
2020/11/07 22:17
2020/11/08 16:19