はじめに
ここではさくらのクラウドにアップされているファイルをAPIでダウンロードする方法を述べています.
前提条件
さくらのモノプラットフォームに契約しています.また,セキュアモバイルコネクトにてプロジェクトを作成してあり,ファイルがアップロードされているものとします.下の図はファイルが既にあることを表しています.今回,この中から001_20240613140707.jpgをダウンロードとファイル削除をしてみます.
実行環境
- OS: Windows 11
- WSL2: Ubuntu
手順
まず,さくらのクラウドのページに行くため,下記のようにさくらのモノプラットフォームのページへ行き,さらにコントロールパネルログインを選択します.
ログイン後,下の図にあるAPIキーを選択します.
次に,操作したいAPIのアカウント名をクリックします.下の図ではぼやかしてありますが,ここにはアカウント名が表示されています.
次にプロジェクトを選択します.下の図ではぼやけていますが,そこにあるプロジェクトを選択します.
次にアクセストークンと,アクセストークンシークレットを得ます.これらの文字列はそれぞれSAKURACLOUD_ACCESS_TOKENと,SAKURACLOUD_ACCESS_TOKEN_SECRETとして使用しますので,どこかへメモしておいてください.
次にプロジェクトIDを取得します.下の図のようにサービス一覧からセキュアモバイルコネクトを選択します.
次に下の図のようにモノプラットフォーム→プロジェクトによりプロジェクトの一覧(ここではぼやかしてあります)を表示します.そして操作したプロジェクトを選択します.
そうすると,リソースIDを取得することができます.こちらの数値を後ほどPROJECT_IDとして定義し,使用しますのでメモをしておいてください.
次にWSL2にてUbuntuを立ち上げます.これまで得てきた文字列や数値を環境変数として定義します.下表の左列が環境変数,右列がその内容となります.
環境変数 | 内容 |
SAKURACLOUD_ACCESS_TOKEN | アクセストークン |
SAKURACLOUD_ACCESS_TOKEN_SECRET | アクセストークンシークレット |
PROJECT_ID | リソースID |
FILE_ID | ファイル名 |
例えばFILE_IDであればファイル名001_20240613140707.jpgであれば,Ubuntuで次のように記入します.同様に他の環境変数についても記入してください.
export FILE_ID=001_20240613140707.jpg
次に以下にあるcurlコマンドを入力します.
curl -u "$SAKURACLOUD_ACCESS_TOKEN:$SAKURACLOUD_ACCESS_TOKEN_SECRET" \
-X GET \
https://secure.sakura.ad.jp/cloud/zone/is1a/api/cloud/1.1/commonserviceitem/$PROJECT_ID/iotplatform/vmgw/files/$FILE_ID/download
これにより,次に示すようなJSON形式のレスポンスがあります.
{"IoTPlatform":
{"vmgw":"113501793538",
"name":"001_20240613142707.jpg",
"mime_type":"image\/jpeg",
"size":3576,
"url":"https:\/\/s3.isk01.sakurastorage.jp\/iot-core-prod\/113501793538\/073f702f-fbb7-4822-a855-5191ba4d7f55?AWSAccessKeyId=AYQ3AX6ZZO1Z5QNVPCNT\u0026Signature=o%2BQUK55NUsSsyU7nIKewR7txRUk%3D\u0026Expires=1720427272"},
"is_ok":true}
この中のurlの値(つまりhttpsから始まるもの)を使って画像ファイルをダウンロードします.ただし,このままではバックスラッシュや&マークに対応する\u0026を変換する必要があります.この変換方法をpythonで行う方法を示します.
python3
>> import re
>>url="上記のurl"
>>print(re.sub(r"\\","",url))
これにより,下に示すようなURLが得られます.
これをcurlにより画像を得ます.
curl -s "https://s3.isk01.sakurastorage.jp/iot-core-prod/113501793538/073f702f-fbb7-4822-a855-5191ba4d7f55?AWSAccessKeyId=AYQ3AX6ZZO1Z5QNVPCNT&Signature=SndtBaUs4Yb1iac5HnitoHKXoL0%3D&Expires=1720426881" --output 出力ファイル名
上記により,出力ファイル名が得られます.