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

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

ただいまの
回答率

87.78%

PHP:curlオプションの指定方法

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,073

score 13

Watson Visual Recognitionを試しています。

下記のcurlコマンドを実行することで、結果をとることができました。

curl -X POST -u "apikey:{XXXここにAPIを設定XXX}" --form "images_file=@{XXXここにファイルパスファイル名を指定XXX}" --form "classifier_ids={XXXここにモデルを指定XXX}" "https://gateway.watsonplatform.net/visual-recognition/api/v3/classify?version=2018-03-19"

これをPHPで実装したいと思っておりますが、PHP初学者・CURLも初めてなので、記述する方法がわからず困っております。

いろいろ調べると、下記のように記述すればいけるのかなとは思うのですが、$paramsには具体的にどのように記述すればよいのでしょうか?
(-uオプションや--formオプションはどのように指定するのだろうかわからず)
基本的なことで申し訳ございませんが、何卒よろしくお願い致します。

<?PHP

$base_url = 'https://gateway.watsonplatform.net/visual-recognition/api/v3/classify?version=2018-03-19';

$params = [
  ・・・,
  ・・・,
];

$curl = curl_init($base_url);

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($curl);

var_dump($response);

curl_close($curl);

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

PHPマニュアルにあるサンプルコード(例2 )が参考になるかもしれません。

要は「実行したいAPIに渡すパラメータ」なので、「Watson Visual Recognition」(私は利用したことがないのでわかりません)が求めるパラメータを仕様書から拾ってきてkey=>value形式の配列で適切に指定すると良いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/09 17:51 編集

    さっそくのご回答ありがとうございます。
    教えていただいたサンプルコードを見ながら、指定したところ、さきに進むことができました。
    ありがとうございました。

    キャンセル

  • 2019/05/09 18:12

    解決されたようでなによりです。
    機能的な確認はPHPマニュアルですると良いです。ネット上の紹介記事はパラメータの詳細説明が省かれた動かせることのみに焦点をあてたコードが多いので、自身のやりたいことにあてはめようとした場合、機能確認は必須になってきます。

    あと、完成コードは大変喜ばしいことなのですが、あいにくコメントではマークダウン使えませんので「最終型」として質問に追記するか回答に残しておいた方があとから見る人に伝わりやすくなります。

    キャンセル

  • 2019/05/20 10:41

    すみません、コメントに気がつきませんでした。アドバイスありがとうございます。
    質問に追記する形でコードを残しておきます。
    (質問の内容とは違うのですが、先のコメントに記載したコードでは、アップロードファイルを認識できなかったので、そこも修正するようにします)

    キャンセル

  • 2019/05/20 10:41

    はい、よろしくお願いします。

    キャンセル

0

下記のコードにより、先に進むことができました。
アドバイスありがとうございました。

<?PHP

$base_url = 'https://gateway.watsonplatform.net/visual-recognition/api/v3/classify?version=2018-03-19';
$key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init();
$cfile = curl_file_create('xxxxxxxxxxxxxxxxxxx.jpg','image/jpeg','xxxxxx');

$data = array(
  'images_file' => $cfile,
  'classifier_ids' => 'xxxxxxxxxxxxxxxxxxxxx'
);

curl_setopt($ch, CURLOPT_USERPWD, 'apikey:' . $key);
curl_setopt($ch, CURLOPT_URL, $base_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$response = curl_exec($ch);

var_dump($response);

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る