Image Searchを使ってみる#8 SDK編

Image SearchをSDKから操作します。 PHPプログラムで画像を検索し、Image Searchからしかるべき応答がかえってくることを確認します。

1. Image Search向けのSDKについて

Alibaba Cloudでは複数の言語環境のSDKが提供されています。 また、Image Search向けのSDKですが限定的な言語対応です。 

対応状況を表にまとめます。 ドキュメントセンターから確認しました。

URLはこちら

Image Searchに対応するのは”Java”、”Node.js”、”PHP”の3つですね。

SDKVersionImage Searchへの対応
.Net SDK.NET Framework 4.0以降  N/A
GO SDKGo 1.7 以降 N/A
Java SDKJDK 1.6以降対応
Node.js SDK最新バージョン
・Node.js 4.x
・Node.js 6.x)
対応
PHP SDK5.3/5.4/5.5/5.6/7.0/7.1対応
Python SDK
Python 2.6.x/2.7.x/3.x 以降
N/A

今回はPHPで色々とやってみます。 PHPを選んだ理由ですが、比較的馴染みのある言語だっただけです。

2.PHP SDK環境の準備

Image SearchをSDKから操作するにあたり、PHP SDKを利用できるよう準備していきます。

また、PHP SDKをインストールする環境はAliyun Linux です。 CentOS 7系の互換OSです。

2.1. ドキュメントを確認

まずはSDKに関するドキュメントから前提条件や入手方法など基本的な情報を確認します。日本サイトのドキュメントセンターを確認します。

URLはこちら

上記ドキュメント記載内容のポイントをまとめると

  • Alibaba Cloud PHP SDKは、PHPのバージョン5.3、5.4、5.5、5.6、7.0、および7.1で使用できる
  • Alibaba Cloud PHP SDKを使用するには、Alibaba CloudアカウントとAccess Key IDとAccess Key Secretが必要
  • Alibaba Cloud SDKを使用して製品APIにアクセスするには、[Alibaba Cloud コンソール]で製品を有効にする必要がある
  • GitHubのAliyunのリポジトリからSDKをダウンロード

2.2. モジュールのダウンロード

マニュアルにあるリンク”PHP SDK resource list”をクリックします。 

URLはこちら

しかし、”申し訳ありません。お探しのドキュメントは存在しない、もしくは編集中です。”とのことでアクセス出来ません。

このような場合はInternationalサイトを確認します。

日本サイトのドキュメントの赤枠部分の記載はInternational サイトにはありません。 ”SDKをPHP SDK resource listからダウンロードしてください”は不要と判断し、GitHubからのインストールに進みます。 まずはやってみて動けばOKです。

gitからダウンロードします。 gitコマンド実行時のカレントディレクトリに”aliyun-openapi-php-sdk”が出来たことがを確認出来ました。

[bigriver@sun 20190316]$ git clone https://github.com/aliyun/aliyun-openapi-php-sdk.git
Cloning into ‘aliyun-openapi-php-sdk’…
remote: Enumerating objects: 144, done.
remote: Counting objects: 100% (144/144), done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 16618 (delta 106), reused 133 (delta 96), pack-reused 16474
Receiving objects: 100% (16618/16618), 3.22 MiB | 3.59 MiB/s, done.
Resolving deltas: 100% (13542/13542), done.

[bigriver@sun 20190316]$ ls -l
total 4
drwxrwxr-x 101 bigriver bigriver 4096 Mar 16 08:27 aliyun-openapi-php-sdk

展開したディレクトリ内を確認します。 ”aliyun-php-sdk-imagesearch”というディレクトリも確認出来ます。 こちらがimagesearch用のSDKです。

[root@sun 20190316]# ls -l aliyun-openapi-php-sdk/
total 400
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-actiontrail
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-aegis
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-afs
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-airec
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-alidns
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-alimt
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-arms
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-arms4finance
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-baas
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-batchcompute
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-bssopenapi
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-cbn
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-ccc
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-ccs
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-cdn
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-chatbot
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-cloudapi
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-cloudauth
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-cloudesl
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-cloudphoto
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-cms
drwxr-xr-x 9 root root 4096 Mar 16 08:26 aliyun-php-sdk-core
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-cr
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-crm
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-cs
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-csb
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-dcdn
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-dds
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-dm
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-dms-enterprise
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-domain
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-domain-intl
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-drds
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-dts
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-dybaseapi
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-dysmsapi
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-dyvmsapi
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-eci
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-ecs
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-ecsinc
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-edas
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-ehpc
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-emr
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-ess
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-finmall
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-gpdb
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-green
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-hsm
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-httpdns
drwxr-xr-x 3 root root 4096 Mar 16 10:12 aliyun-php-sdk-imagesearch
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-imm
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-industry-brain
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-iot
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-jaq
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-jarvis
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-jarvis-public
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-kms
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-linkedmall
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-linkface
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-live
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-lubancloud
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-market
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-mopen
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-mts
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-nas
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-nlp
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-nls-cloud-meta
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-nls-filetrans
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-ons
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-openanalytics
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-ots
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-push
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-pvtz
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-ram
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-rds
drwxr-xr-x 9 root root 4096 Mar 16 08:26 aliyun-php-sdk-release-test
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-r-kvstore
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-ros
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-rtc
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-saf
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-sas-api
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-scdn
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-slb
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-smartag
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-snsuapi
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-sts
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-tag-inner
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-tesladam
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-teslamaxcompute
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-teslastream
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-ubsms
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-uis
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-vod
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-vpc
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-welfare-inner
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-xspace
drwxr-xr-x 3 root root 4096 Mar 16 08:26 aliyun-php-sdk-yundun
-rw-r–r– 1 root root 1742 Mar 16 08:26 CONTRIBUTING.md
-rw-r–r– 1 root root 573 Mar 16 08:26 License
-rw-r–r– 1 root root 1049 Mar 16 08:26 README.md

3. PHPインストール

phpをインストールします。

[root@sun 20190316]# yum install php
~省略~
Installed:
php.x86_64 0:5.4.16-42.4.al7
Dependency Installed:
httpd.x86_64 0:2.4.6-45.5.al7 httpd-tools.x86_64 0:2.4.6-45.5.al7
libzip.x86_64 0:0.10.1-8.1.al7 mailcap.noarch 0:2.1.41-2.1.al7
php-cli.x86_64 0:5.4.16-42.4.al7 php-common.x86_64 0:5.4.16-42.4.al7
Complete!

[root@sun 20190316]# yum install php-devel
Installed:
php-devel.x86_64 0:5.4.16-42.4.al7
Dependency Installed:
autoconf.noarch 0:2.69-11.2.al7
automake.noarch 0:1.13.4-3.2.al7
pcre-devel.x86_64 0:8.32-15.4.al7.1
perl-Data-Dumper.x86_64 0:2.145-3.1.al7
perl-Test-Harness.noarch 0:3.28-3.1.al7
perl-Thread-Queue.noarch 0:3.02-2.1.al7
Complete!

インストールパスとバージョンを確認します。

[root@sun 20190316]# which php
/usr/bin/php

[root@sun 20190316]# php -v
PHP 5.4.16 (cli) (built: Dec 26 2016 18:24:24)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

4. PHP SDKのrequireの記述

Alibaba CloudのPHP SDKを利用する際にはPHPソースコードにSDKのパスを記載する必要があります。 ”/path/to”の部分は実際の環境に応じて変更してください。

require_once ‘/path/to/aliyun-openapi-php-sdk/aliyun-php-sdk-core/Config.php’;

5. 2つのPHP SDK

ドキュメントセンターのImage Searchの開発者ガイドの中でもPHP SDKのダウンロードリンクが案内されています。 先に結論をお伝えすると以下のPHP SDKも利用します。 こちらにはSampleプログラムが含まれているためです。

http://imagesearch-cloud-demo.oss-cn-shanghai.aliyuncs.com/imagesearch-php-sdk-pkg.zip?spm=a21mg.p38356.a3.3.7e43e850IuiCdw&file=imagesearch-php-sdk-pkg.zip

Aliyun Linuxでダウンロードします。 しかし、wgetでは上記リンクからダウンロードできません。リダイレクトしているためですね。 回避策としてはオプション”–trust-server-names”で実行しましょう。

[root@sun 20190316]# wget http://imagesearch-cloud-demo.oss-cn-shanghai.aliyuncs.com/imagesearch-php-sdk-pkg.zip?spm=a21mg.p38356.a3.3.7e43e850IuiCdw&file=imagesearch-php-sdk-pkg.zip
[1] 18724
[root@sun 20190316]# –2019-03-16 08:50:26– http://imagesearch-cloud-demo.oss-cn-shanghai.aliyuncs.com/imagesearch-php-sdk-pkg.zip?spm=a21mg.p38356.a3.3.7e43e850IuiCdw
Resolving imagesearch-cloud-demo.oss-cn-shanghai.aliyuncs.com (imagesearch-cloud-demo.oss-cn-shanghai.aliyuncs.com)… 47.101.88.23
Connecting to imagesearch-cloud-demo.oss-cn-shanghai.aliyuncs.com (imagesearch-cloud-demo.oss-cn-shanghai.aliyuncs.com)|47.101.88.23|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 51999 (51K) [application/zip]
Saving to: ‘imagesearch-php-sdk-pkg.zip?spm=a21mg.p38356.a3.3.7e43e850IuiCdw.2 ’
100%[======================================>] 51,999 –.-K/s in 0.07s
2019-03-16 08:50:26 (713 KB/s) – ‘imagesearch-php-sdk-pkg.zip?spm=a21mg.p38356.a3.3.7e43e850IuiCdw.2’ saved [51999/51999]

またはcurlでダウンロード可能です。 ”-L”でリダイレクトに対応、”-o”で出力ファイル名を指定します。 ”imagesearch-php-sdk-pkg.zip”がダウンロードできました。

[root@sun 20190316]# curl -L -o imagesearch-php-sdk-pkg.zip http://imagesearch-cloud-demo.oss-cn-shanghai.aliyuncs.com/imagesearch-php-sdk-pkg.zip?spm=a21mg.p38356.a3.3.7e43e850IuiCdw&file=imagesearch-php-sdk-pkg.zip
[1] 18770
[root@sun 20190316]# % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 51999 100 51999 0 0 301k 0 –:–:– –:–:– –:–:– 300k
[1]+ Done curl -L -o imagesearch-php-sdk-pkg.zip http://imagesearch-cloud-demo.oss-cn-shanghai.aliyuncs.com/imagesearch-php-sdk-pkg.zip?spm=a21mg.p38356.a3.3.7e43e850IuiCdw
[root@sun 20190316]#
[root@sun 20190316]# ls -l
total 56
drwxr-xr-x 101 root root 4096 Mar 16 08:26 aliyun-openapi-php-sdk
-rw-r–r– 1 root root 51999 Mar 16 08:54 imagesearch-php-sdk-pkg.zip
[root@sun 20190316]#

ダウンロードしたzipファイルをunzipします。 以下の2つのディレクトリにファイルが展開されました。

  • aliyun-php-sdk-core
  • aliyun-php-sdk-imagesearch
[root@sun 20190316]# unzip imagesearch-php-sdk-pkg.zip
Archive: imagesearch-php-sdk-pkg.zip
531f291de06ad22e5006d8002953668b3e7c11a2
creating: aliyun-php-sdk-core/
inflating: aliyun-php-sdk-core/AcsRequest.php
inflating: aliyun-php-sdk-core/AcsResponse.php
creating: aliyun-php-sdk-core/Auth/
inflating: aliyun-php-sdk-core/Auth/Credential.php
inflating: aliyun-php-sdk-core/Auth/ISigner.php
inflating: aliyun-php-sdk-core/Auth/ShaHmac1Signer.php
inflating: aliyun-php-sdk-core/Auth/ShaHmac256Signer.php
creating: aliyun-php-sdk-core/Autoloader/
inflating: aliyun-php-sdk-core/Autoloader/Autoloader.php
inflating: aliyun-php-sdk-core/ChangeLog.txt
inflating: aliyun-php-sdk-core/Config.php
inflating: aliyun-php-sdk-core/DefaultAcsClient.php
creating: aliyun-php-sdk-core/Exception/
inflating: aliyun-php-sdk-core/Exception/ClientException.php
inflating: aliyun-php-sdk-core/Exception/ServerException.php
creating: aliyun-php-sdk-core/Http/
inflating: aliyun-php-sdk-core/Http/HttpHelper.php
inflating: aliyun-php-sdk-core/Http/HttpResponse.php
inflating: aliyun-php-sdk-core/IAcsClient.php
creating: aliyun-php-sdk-core/Profile/
inflating: aliyun-php-sdk-core/Profile/DefaultProfile.php
inflating: aliyun-php-sdk-core/Profile/IClientProfile.php
creating: aliyun-php-sdk-core/Regions/
inflating: aliyun-php-sdk-core/Regions/Endpoint.php
inflating: aliyun-php-sdk-core/Regions/EndpointConfig.php
inflating: aliyun-php-sdk-core/Regions/EndpointProvider.php
inflating: aliyun-php-sdk-core/Regions/LocationService.php
inflating: aliyun-php-sdk-core/Regions/ProductDomain.php
inflating: aliyun-php-sdk-core/Regions/endpoints.xml
inflating: aliyun-php-sdk-core/RoaAcsRequest.php
inflating: aliyun-php-sdk-core/RpcAcsRequest.php
creating: aliyun-php-sdk-core/UnitTest/
creating: aliyun-php-sdk-core/UnitTest/Auth/
inflating: aliyun-php-sdk-core/UnitTest/Auth/CredentialTest.php
inflating: aliyun-php-sdk-core/UnitTest/Auth/ShaHmac1SignerTest.php
inflating: aliyun-php-sdk-core/UnitTest/Auth/ShaHmac256SignerTest.php
inflating: aliyun-php-sdk-core/UnitTest/BaseTest.php
creating: aliyun-php-sdk-core/UnitTest/BatchCompute/
inflating: aliyun-php-sdk-core/UnitTest/BatchCompute/ListImagesRequest.php
inflating: aliyun-php-sdk-core/UnitTest/DefaultAcsClientTest.php
creating: aliyun-php-sdk-core/UnitTest/Ecs/
creating: aliyun-php-sdk-core/UnitTest/Ecs/Rquest/
inflating: aliyun-php-sdk-core/UnitTest/Ecs/Rquest/DescribeRegionsRequest.php
creating: aliyun-php-sdk-core/UnitTest/Ft/
inflating: aliyun-php-sdk-core/UnitTest/Ft/InteTest.php
inflating: aliyun-php-sdk-core/UnitTest/Ft/TestRoaApiRequest.php
inflating: aliyun-php-sdk-core/UnitTest/Ft/TestRpcApiRequest.php
creating: aliyun-php-sdk-core/UnitTest/Http/
inflating: aliyun-php-sdk-core/UnitTest/Http/HttpHelperTest.php
creating: aliyun-php-sdk-core/UnitTest/Profile/
inflating: aliyun-php-sdk-core/UnitTest/Profile/DefaultProfileTest.php
creating: aliyun-php-sdk-core/UnitTest/Regions/
inflating: aliyun-php-sdk-core/UnitTest/Regions/EndPointByLocationTest.php
inflating: aliyun-php-sdk-core/UnitTest/Regions/EndpointProviderTest.php
creating: aliyun-php-sdk-imagesearch/
creating: aliyun-php-sdk-imagesearch/ImageSearch/
creating: aliyun-php-sdk-imagesearch/ImageSearch/Example/
inflating: aliyun-php-sdk-imagesearch/ImageSearch/Example/AddItemSample.php
inflating: aliyun-php-sdk-imagesearch/ImageSearch/Example/DeleteItemSample.php
inflating: aliyun-php-sdk-imagesearch/ImageSearch/Example/SearchItemSample.php
creating: aliyun-php-sdk-imagesearch/ImageSearch/Request/
creating: aliyun-php-sdk-imagesearch/ImageSearch/Request/V20180120/
inflating: aliyun-php-sdk-imagesearch/ImageSearch/Request/V20180120/AddItemRequest.php
inflating: aliyun-php-sdk-imagesearch/ImageSearch/Request/V20180120/DeleteItemRequest.php
inflating: aliyun-php-sdk-imagesearch/ImageSearch/Request/V20180120/SearchItemRequest.php

手順2.2でGitHubからダウンロードした”aliyun-openapi-php-sdk”の構成ファイルを確認します。

[root@sun aliyun-openapi-php-sdk]# ls -lR aliyun-php-sdk-imagesearch
aliyun-php-sdk-imagesearch:
total 8
-rw-r–r– 1 root root 101 Mar 16 08:26 ChangeLog.txt
drwxr-xr-x 3 root root 4096 Mar 16 08:26 ImageSearch
aliyun-php-sdk-imagesearch/ImageSearch:
total 4
drwxr-xr-x 3 root root 4096 Mar 16 08:26 Request
aliyun-php-sdk-imagesearch/ImageSearch/Request:
total 4
drwxr-xr-x 2 root root 4096 Mar 16 08:26 V20180120
aliyun-php-sdk-imagesearch/ImageSearch/Request/V20180120:
total 12
-rwxr-xr-x 1 root root 4076 Mar 16 08:26 AddItemRequest.php
-rwxr-xr-x 1 root root 3127 Mar 16 08:26 DeleteItemRequest.php
-rwxr-xr-x 1 root root 3544 Mar 16 08:26 SearchItemRequest.php

こちらはAlibabaのOSSからダウンロードしたディレクトリです。 一部、違いがありますね。

[root@sun 20190316]# ls -lR aliyun-php-sdk-imagesearch
aliyun-php-sdk-imagesearch:
total 4
drwxr-xr-x 4 root root 4096 Mar 19 2018 ImageSearch
aliyun-php-sdk-imagesearch/ImageSearch:
total 8
drwxr-xr-x 2 root root 4096 Mar 16 10:46 Example
drwxr-xr-x 3 root root 4096 Mar 19 2018 Request
aliyun-php-sdk-imagesearch/ImageSearch/Example:
total 12
-rw-r–r– 1 root root 1506 Mar 19 2018 AddItemSample.php
-rw-r–r– 1 root root 1316 Mar 19 2018 DeleteItemSample.php
-rw-r–r– 1 root root 1467 Mar 19 2018 SearchItemSample.php
aliyun-php-sdk-imagesearch/ImageSearch/Request:
total 4
drwxr-xr-x 2 root root 4096 Mar 19 2018 V20180120
aliyun-php-sdk-imagesearch/ImageSearch/Request/V20180120:
total 12
-rwxr-xr-x 1 root root 4076 Mar 19 2018 AddItemRequest.php
-rwxr-xr-x 1 root root 3127 Mar 19 2018 DeleteItemRequest.php
-rwxr-xr-x 1 root root 3544 Mar 19 2018 SearchItemRequest.php

diffで比較します。a.txtは手順2.2でGitHubからダウンロードした他プロダクトを含むSDKの中のaliyun-php-sdk-imagesearchディレクトリです。 b.txtはOSSからダウンロードしたものです。

  • ChangeLogはGitHubからダウンロードしたもののみに存在
  • ExampleはOSSからダウンロードしたSDKのみに存在
[root@sun 20190316]# diff /root/a.txt /root/b.txt
2,4c2,3
< total 8
< -rw-r–r– 1 root root 101 Mar 16 08:26 ChangeLog.txt
< drwxr-xr-x 3 root root 4096 Mar 16 08:26 ImageSearch
total 4
drwxr-xr-x 4 root root 4096 Mar 19 2018 ImageSearch
7,8c6,14
< total 4
< drwxr-xr-x 3 root root 4096 Mar 16 08:26 Request
total 8
drwxr-xr-x 2 root root 4096 Mar 16 10:46 Example
drwxr-xr-x 3 root root 4096 Mar 19 2018 Request
aliyun-php-sdk-imagesearch/ImageSearch/Example:
total 12
-rw-r–r– 1 root root 1506 Mar 19 2018 AddItemSample.php
-rw-r–r– 1 root root 1316 Mar 19 2018 DeleteItemSample.php
-rw-r–r– 1 root root 1467 Mar 19 2018 SearchItemSample.php
12c18
< drwxr-xr-x 2 root root 4096 Mar 16 08:26 V20180120
drwxr-xr-x 2 root root 4096 Mar 19 2018 V20180120
16,18c22,24
< -rwxr-xr-x 1 root root 4076 Mar 16 08:26 AddItemRequest.php
< -rwxr-xr-x 1 root root 3127 Mar 16 08:26 DeleteItemRequest.php
< -rwxr-xr-x 1 root root 3544 Mar 16 08:26 SearchItemRequest.php
-rwxr-xr-x 1 root root 4076 Mar 19 2018 AddItemRequest.php
-rwxr-xr-x 1 root root 3127 Mar 19 2018 DeleteItemRequest.php
-rwxr-xr-x 1 root root 3544 Mar 19 2018 SearchItemRequest.php

途中にあるバージョンを示していると推測されるディレクトリは”V20180120”で共通のです。 ファイルサイズは同じですが、念のため、各*.phpファイルのハッシュも比較しておきます。 同じファイルでした。

aliyun-php-sdk-imagesearch/ImageSearch/Request/V20180120

GitHubOSS
AddItemRequest.php bee93967379dd0f683579e12ebbc1769bee93967379dd0f683579e12ebbc1769
DeleteItemRequest.php 48cc9e66eb471e450e61829d7bb04ebc48cc9e66eb471e450e61829d7bb04ebc
SearchItemRequest.php c04f59ec1c7480c4d2d0649c842e6438c04f59ec1c7480c4d2d0649c842e6438

なお、OSSからダウンロードしたSDKにはExampleディレクトリがあります。この中にも上記と同じファイル名のファイルが3つあります。 V20180120にあるファイルとは中身が異なります。

aliyun-php-sdk-imagesearch/ImageSearch/Example

GitHubOSS
AddItemRequest.php N/A6d2de9cf273cd63908f678b838cf31e4
DeleteItemRequest.php N/A2237f8600e1b27be9e96c22190752a3f
SearchItemRequest.php N/A74e78bc761e84913f1278ce58b96c11a

まとめると、まずはGitHubで他プロダクトも含めたSDKをダウンロードしつつ、Image Search用のSDKもダウンロードし、差分を見てマージするのが間違いなさそうです。

なお、次の”6. 動作テスト”を実行するだけであればOSSから入手できるPHP SDK(Image Searchで必要ものだけが含まれている)だけで実行可能です。

6. 動作テスト

SAMPLEの”SearchItemSample.php”をコピーし、テスト用のプログラムを作成します。また、RAMユーザや検索キーとなる画像の事前準備を行います。

6.1. 検索キーの画像の準備

/tmp配下にOSS上にある画像データをダウンロードします。 rcloneでコピーします。

[root@sun tmp]# rclone copy oss:imagesearch-bigriver/1.jpg .

6.2. RAMユーザの準備

phpプログラムの中でAccessKeyを指定します。 Image SearchにアクセスするRAMユーザを作成し、必要な権限を付与し、AccessKeyを取得します。

RAMユーザとして”IMAccessUser”を作成します。

ユーザが作成出来ました。 AccessKeyをダウンロードします。 AccessKeyは厳重に管理しましょう。

作成したRAMユーザにImage Searchアクセス用の権限を付与します。

必要な権限をドキュメントセンターで確認します。

URLはこちら

標準で要されている以下のポリシーを利用可能です。

  • AliyunImagesearchReadOnlyAccess
  • AliyunImagesearchFullAccess

その他、ImageSearchのリージョンやインスタンスなど詳細に条件設定する場合は個別にポリシーを作成することが可能です。 上記マニュアルの”権限付与の例”に3つほどポリシーの例が紹介されています。

今回は”AliyunImagesearchFullAccess”をRAMユーザ”IMAccessUser”に付与します。

RAM管理画面から”IMAccessUser”をクリックします。

”権限付与ポリシー”をクリックします。

”権限付与ポリシーの編集”をクリックします。

”AliyunImagesearchFullAccess” を追加します。

権限が付与されました。

6.3. サンプルプログラムの修正

プログラムから画像検索を実行します。 1つの画像を検索キーとして指定し、類似する画像情報が応答されます。

SDKのaliyun-openapi-php-sdk/aliyun-php-sdk-imagesearch/ImageSearch/Exampleにある ”SearchItemSample.php”を修正します。

以下部分を変更します。

  • require_once “/root/20190316/aliyun-openapi-php-sdk/aliyun-php-sdk-core/Config.php”;
  • $region = “ap-northeast-1”;
  • $accessKeyId = “XXXXXXXX”;
  • $accessKeySecret = “XXXXXXX”;
  • $instanceName = “bigriver”;
  • $sampleFileName = “/tmp/1.jpg”;
<?php
chdir(dirname(FILE));
require_once “/root/20190316/aliyun-openapi-php-sdk/aliyun-php-sdk-core/Config.php”;
$product = "ImageSearch";
// $region = “”;
$region = “ap-northeast-1”;
// $accessKeyId = “AccessKeyID>”;
$accessKeyId = “XXXXXXXX”;
// $accessKeySecret = “”;
$accessKeySecret = “XXXXXXX”;
// $instanceName = “”;
$instanceName = “bigriver”;
$domain = “imagesearch.”.$region.”.aliyuncs.com”;
$profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
DefaultProfile::addEndPoint($region, $region, $product, $domain);
$client = new DefaultAcsClient($profile);

use ImageSearch\Request\V20180120\SearchItemRequest;

$req = new SearchItemRequest();

$req->setinstanceName($instanceName);
$req->setNum(10);
$req->setStart(0);

// Read Image File
$sampleFileName = "/tmp/1.jpg";
$content = file_get_contents($sampleFileName);

fclose($handle); $req->setSearchPicture($content);
if (!$req->buildPostContent()) {
return ;
}

try {
$response = $client->getAcsResponse($req);
print_r($response);
} catch(ServerException $e) {
print "Error: " . $e->getErrorCode() . " Message: " . $e->getMessage() . "\n"; }
catch(ClientException $e) {
print "Error: " . $e->getErrorCode() . " Message: " . $e->getMessage() . "\n";
}

テストプログラムを実行します。 SoftExprValuesなど期待通りに応答されました。

[root@sun Example]# php test_search.php
~Warningは省略~

meta:s,0,1#n,1,3#pic_list,3,15#c2VhcmNoUGlj,15,42559stdClass Object
(
[Auctions] => stdClass Object
(
[Auction] => Array
(
[0] => stdClass Object
(
[CustContent] => k1:v1,k2:v2,k3:v3
[ItemId] => 1
[PicName] => 1.jpg
[CatId] => 8
[SortExprValues] => 5.37633353624177e+24;0
)

~省略~

7. まとめ

SDKを利用し、サンプルプログラムによる画像検索の実行を確認しました。

次は以下を進めていきます。 プログラミングスキルは0に等しい私ですが、1か月の無償期間が終わる2019/4/9まで頑張ってみます。

  • 画像のカテゴリー判別プログラム
  • 画像の登録プログラム
  • 画像の登録プログラム(Function Compute連携)
  • 画像の検索サイト