Kyoto Tycoonを各種スクリプト言語で使う最も簡単な方法 の bash + cURL 版

http://fallabs.com/mikio/tech/promenade.cgi?id=111

なんで cURL がないのかと思えたので書き留めておこう。いや、 ktutilmgr とか使えばいいんだけれど…。

#!/bin/bash

# FIXME: eval される文字列をチェック
# FIXME: URL エンコード
# FIXME: HTTP ヘッダエンコード

# サーバ接続情報
kt_handle() {
	echo "local host=${1:-127.0.0.1}"
	echo "local port=${2:-1978}"
	echo "local timeout=${3:-30}"
}

# レコードを格納する
kt_set() {
	eval "${1:?}"
	local key="${2:?}" value="${3:?}" xt="$4"
	if [[ -n "$xt" ]]; then
	  curl -fLsSv -m "$timeout" "http://$host:$port/$key" -H "X-Kt-Xt: $xt" -T - <<< "$value"
	else
	  curl -fLsSv -m "$timeout" "http://$host:$port/$key" -T - <<< "$value"
	fi
}

# レコードを削除する
kt_remove() {
	eval "${1:?}"
	local key="${2:?}"
	curl -fLsSv -m "$timeout" "http://$host:$port/$key" -X DELETE
}

# レコードの値を取得する
kt_get() {
	eval "${1:?}"
	local key="${2:?}"
	curl -fLsSv -m "$timeout" "http://$host:$port/$key"
}

# Keep-Alive で複数のレコードの値を取得する
kt_get_multi() {
	eval "${1:?}"
	local i=0 urls
	while (( 2<=$# )); do
		urls[$((i++))]="http://$host:$port/$2"
		shift
	done
	curl -fLsSv -m "$timeout" "${urls[@]}"
}

# 使い方
kt_test() {
	kt="$(kt_handle localhost 1978)"

	kt_set "$kt" japan tokyo "$(date -R --date=tomorrow)"
	kt_get "$kt" japan
	kt_remove "$kt" japan

	kt_set "$kt" aaa AAA
	kt_set "$kt" bbb BBB
	kt_set "$kt" ccc CCC
	kt_get_multi "$kt" aaa bbb ccc
}