Created
January 2, 2012 23:37
-
-
Save ysaotome/1552641 to your computer and use it in GitHub Desktop.
ニフティクラウド(NiftyCloud)のREST APIをshellから叩く
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Wget Api Clinet for NiftyCloud | |
# 2012/01/03 @ysaotome | |
#=============================================== | |
# Settings | |
#=============================================== | |
## 公開鍵 | |
ACCESS_KEY='hoge_accesskey' | |
## 秘密鍵 | |
SECRET_KEY='hoge_secretkey' | |
## APIエンドポイント | |
ENDPOINT_URL='https://cp.cloud.nifty.com/api/' | |
## API認証バージョン 0 or 1 or 2 | |
SIGNATURE_VERSION='1' | |
## API認証ロジック HmacSHA1 or HmacSHA256 | |
SIGNATURE_METHOD='HmacSHA256' | |
## ユーザーエージェント | |
USER_AGENT='Wget for NiftyCloud' | |
## 最大リトライ回数 | |
MAX_RETRY='3' | |
## 接続タイムアウト(秒) | |
CONNECTION_TIMEOUT='30' | |
#=============================================== | |
## 入力 | |
ACTION='DescribeAvailabilityZones' | |
ACTION_PARAM='' | |
## 環境変数 | |
TIMESTAMP=$(date +%FT%T).$(printf '%03dZ' $(expr `date +%N` / 1000000)) | |
CMD_OPENSSL='/usr/bin/openssl' | |
## 関数 | |
urlencode () { | |
echo $* | nkf -eMQ | tr = % | |
} | |
## API認証ロジック決定 | |
case ${SIGNATURE_METHOD} in | |
HmacSHA1) | |
SIGNATURE_METHOD_SHA=sha1 | |
SIGNATURE_METHOD_STR=HmacSHA1 | |
;; | |
HmacSHA256|*) | |
SIGNATURE_METHOD_SHA=sha256 | |
SIGNATURE_METHOD_STR=HmacSHA256 | |
;; | |
esac | |
## API認証バージョン切り替え | |
case ${SIGNATURE_VERSION} in | |
0) | |
## StringToSign = Action値 + Timestamp値 | |
## Signature = Base64( HmacSHA1 (SecretAccessKey, StringToSign) ) | |
## ※METHODはSHA1固定 | |
STRING_TO_SIGN=${ACTION}${TIMESTAMP} | |
SIGNATURE=$(urlencode $(echo -n ${STRING_TO_SIGN} | ${CMD_OPENSSL} dgst -sha1 -binary -hmac ${SECRET_KEY} | ${CMD_OPENSSL} base64)) | |
;; | |
1) | |
## ※METHODはSHA1固定 | |
## StringToSign = パラメーター名1+ パラメーター値1 + パラメーター名2 + … + パラメーター値n | |
## Signature = Base64( HmacSHA1 (SecretAccessKey, StringToSign) ) | |
STRING_TO_SIGN='Action'${ACTION}${ACTION_PARAM}'AccessKeyId'${ACCESS_KEY}'SignatureVersion'${SIGNATURE_VERSION}'Timestamp'${TIMESTAMP}'Version1.8' | |
SIGNATURE=$(urlencode $(echo -n ${STRING_TO_SIGN} | ${CMD_OPENSSL} dgst -sha1 -binary -hmac ${SECRET_KEY} | ${CMD_OPENSSL} base64)) | |
;; | |
2|*) | |
## ※METHODはSHA1 or SHA256で切り替え | |
;; | |
esac | |
echo ${SIGNATURE_METHOD_SHA} | |
echo ${SIGNATURE_METHOD_STR} | |
echo ${STRING_TO_SIGN} | |
echo ${SIGNATURE} | |
## APIリクエスト実行 | |
/usr/bin/wget -O /tmp/result.txt -o /tmp/error.txt --ignore-length --save-headers \ | |
'--user-agent='"${USER_AGENT}" '--tries='${MAX_RETRY} '--timeout='${CONNECTION_TIMEOUT} ${ENDPOINT_URL}\ | |
'?Action='${ACTION}${ACTION_PARAM}\ | |
'&AccessKeyId='${ACCESS_KEY}'&SignatureVersion='${SIGNATURE_VERSION}'&Timestamp='$(urlencode ${TIMESTAMP})'&Version='$(urlencode '1.8')\ | |
'&Signature='${SIGNATURE} | |
#'&SignatureMethod='${SIGNATURE_METHOD_STR} | |
echo $? | |
##確認 | |
if /bin/grep '200 OK' /tmp/error.txt > /dev/null; then | |
echo 'Success' | |
cat /tmp/result.txt | |
else | |
echo 'Error' | |
fi | |
#rm -rf /tmp/errot.txt | |
#rm -rf /tmp/result.txt |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
書きかけ。。。