Google API を使おう!と言う人にとってはアタリマエのことなのかもしれませんが、ワタクシめにはなかなか解決策が見つけられず苦労したので、同じ境遇の人が生まれないようにメモを残します…。
公式のPHP用SDKと使い方はこちら
Google Vision APIのクライアントライブラリ 各言語
何がしたい?
Google Cloud Platform ……の中の、VisionAPIっていうのを、PHPで使おうと思ったんです。サンプルソースコードもあって、Composerでライブラリが組み込めて、楽勝楽勝♪と思っていたのに、このエラーに阻まれました。
Fatal error: Uncaught Google\Cloud\Core\Exception\ServiceException: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html) in C:\xampp\cloudvision\vendor\google\cloud-core\RequestWrapper.php:245
言いたいことはわかります。SSLをするのにクライアント証明が無いってことですよね。けど、本格的なサービスを作るわけでもなく、試作や開発要サンプルの段階なので、そういうのすっ飛ばしたいんです。
結論
サンプルプログラムはこうなっています。
$vision = new VisionClient([
'projectId' => $projectId
]);
まず、こうします。このJSONは APIとサービス というページでキーを作ったときにダウンロードされるJSONファイルで、それをプロジェクトディレクトリにコピーしてきてパスを通しておきます。
$vision = new VisionClient([
'projectId' => $projectId,
'keyFilePath' => __DIR__ . '/myproject-xxxxx.json'
]);
次に本題。冒頭の cURL error 60 を回避するためにこうします。
$guzzleClient = new GuzzleHttp\Client(['verify' => false]);
$vision = new VisionClient([
'projectId' => $projectId,
'keyFilePath' => __DIR__ . '/myproject-xxxxx.json',
'httpHandler' => function ($request, $options = []) use ($guzzleClient) {
return $guzzleClient->send($request, $options);
}
]);
感想
VisionClientの公式ドキュメント を眺めていて、なんとなくこの httpHandler っていうのがあやしいなぁという雰囲気はありますが、サンプルがまったくなくて困りました。できてしまうとカンタンであっけないものですが。やっぱりアタリマエのことなのでしょうか…(´ε` )
というわけで、Google Vision APIが、なんとなく動かせるようになったので、もうちょっといろいろ遊んでみたいと思います。