Image SearchをSDKから操作します。 PHPプログラムで画像を検索し、Image Searchからしかるべき応答がかえってくることを確認します。
目次
1. Image Search向けのSDKについて
Alibaba Cloudでは複数の言語環境のSDKが提供されています。 また、Image Search向けのSDKですが限定的な言語対応です。
対応状況を表にまとめます。 ドキュメントセンターから確認しました。
Image Searchに対応するのは”Java”、”Node.js”、”PHP”の3つですね。
SDK | Version | Image Searchへの対応 |
.Net SDK | .NET Framework 4.0以降 | N/A |
GO SDK | Go 1.7 以降 | N/A |
Java SDK | JDK 1.6以降 | 対応 |
Node.js SDK | 最新バージョン ・Node.js 4.x ・Node.js 6.x) | 対応 |
PHP SDK | 5.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に関するドキュメントから前提条件や入手方法など基本的な情報を確認します。日本サイトのドキュメントセンターを確認します。
上記ドキュメント記載内容のポイントをまとめると
- 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”をクリックします。

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

このような場合は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プログラムが含まれているためです。

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
GitHub | OSS | |
AddItemRequest.php | bee93967379dd0f683579e12ebbc1769 | bee93967379dd0f683579e12ebbc1769 |
DeleteItemRequest.php | 48cc9e66eb471e450e61829d7bb04ebc | 48cc9e66eb471e450e61829d7bb04ebc |
SearchItemRequest.php | c04f59ec1c7480c4d2d0649c842e6438 | c04f59ec1c7480c4d2d0649c842e6438 |
なお、OSSからダウンロードしたSDKにはExampleディレクトリがあります。この中にも上記と同じファイル名のファイルが3つあります。 V20180120にあるファイルとは中身が異なります。
aliyun-php-sdk-imagesearch/ImageSearch/Example
GitHub | OSS | |
AddItemRequest.php | N/A | 6d2de9cf273cd63908f678b838cf31e4 |
DeleteItemRequest.php | N/A | 2237f8600e1b27be9e96c22190752a3f |
SearchItemRequest.php | N/A | 74e78bc761e84913f1278ce58b96c11a |
まとめると、まずは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アクセス用の権限を付与します。
必要な権限をドキュメントセンターで確認します。

標準で要されている以下のポリシーを利用可能です。
- 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連携)
- 画像の検索サイト