Skip to content

Instantly share code, notes, and snippets.

@ysaotome
Created January 2, 2012 23:37
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ysaotome/1552641 to your computer and use it in GitHub Desktop.
Save ysaotome/1552641 to your computer and use it in GitHub Desktop.
ニフティクラウド(NiftyCloud)のREST APIをshellから叩く
#!/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
@ysaotome
Copy link
Author

ysaotome commented Jan 2, 2012

書きかけ。。。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment