Created
March 7, 2025 06:51
-
-
Save cocoabox/5c5ba12807ccb857c5820d6a405ae5f2 to your computer and use it in GitHub Desktop.
クロネコヤマト自動再配達依頼
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 | |
# --- | |
# クロネコヤマト自動再配達依頼 | |
# | |
# usage : bash redliver.sh [伝票番号] [個人情報ENVファイル] | |
# | |
# --- | |
# 2025-03-07 : initial version | |
# --- | |
# 伝票番号 | |
TRACKING_NUM="$1" | |
if [[ -z "$TRACKING_NUM" ]]; then | |
echo "need TRACKING_NUM" >&2 | |
TRACKING_NUM="000000000000" | |
fi | |
# 個人情報 | |
if [[ -f "$2" ]]; then | |
source "$2" | |
else | |
echo "using dummy personal information! please : $0 [TRACKING_NUMBER] [PERSONAL_INFO_ENV_FILE]" >&2 | |
LAST_NAME="日本" | |
FIRST_NAME="花子" | |
TEL="08055550000" | |
POSTCODE="1000013" | |
STATE="東京都" | |
CITY="千代田区" | |
STREET_NAME="霞が関" | |
STREET_NUM="2丁目" | |
ADDRESS_STREET_NUM_BAN=1 | |
ADDRESS_STREET_NUM_GOU=2 | |
ADDRESS3="${ADDRESS_STREET_NUM_BAN}番地${ADDRESS_STREET_NUM_GOU}号" | |
ADDRESS4="" | |
fi | |
# 再配達指示 | |
MSG="ガースメータボックスにてお願いいたします" | |
# 00 = 対面 | |
# 02 = 宅配BOX(未確認) | |
DELIVER_TO="00" | |
# 再配達希望日(YYYY-MM-DD 必須) | |
if [[ -z "$DATE" ]]; then | |
echo "env variable DATE is not set; using today" >&2 | |
DATE=$( date +%Y-%m-%d ) | |
fi | |
# 0099 = 以後在宅 | |
# 1820 = 18~20時 | |
DELIVER_TIME_CODE="0099" | |
# 以後在宅 | |
# 18時~20時 | |
DELIVER_TIME_STR="以後在宅" | |
set -e | |
num2weekday() { | |
case "$1" in | |
0) echo "日" ;; | |
1) echo "月" ;; | |
2) echo "火" ;; | |
3) echo "水" ;; | |
4) echo "木" ;; | |
5) echo "金" ;; | |
6) echo "土" ;; | |
*) echo "Unknown weekday number: $1" >&2 ;; | |
esac | |
} | |
if [[ `uname` == "Darwin" ]]; then | |
DATE_YYYYMMDD=$( date -j -f "%Y-%m-%d" "${DATE}" +"%Y%m%d" ) | |
WEEKDAY=$(num2weekday "$(date -j -f "%Y-%m-%d" "${DATE}" +"%w")" ) | |
DATE_TEXT="$(date -j -f "%Y-%m-%d" "${DATE}" +"%m月%d日(${WEEKDAY})")$([[ "$(date -j -f "%Y-%m-%d" "${DATE}" +"%Y-%m-%d")" == "$(date +"%Y-%m-%d")" ]] && echo "(本日)")" | |
elif [[ `uname` == "Linux" ]]; then | |
DATE_YYYYMMDD=$( date -d "${DATE}" +"%Y%m%d" ) | |
WEEKDAY=$(num2weeekday "$(date -j -f "%Y-%m-%d" "${DATE}" +"%u")" ) | |
DATE_TEXT="$( date -d "${DATE}" +"%m月%d日(${WEEKDAY})")$([[ "$(date -d "${DATE}" +"%Y-%m-%d")" == "$(date +"%Y-%m-%d")" ]] && echo "(本日)")" | |
else | |
echo "Please set DATE_YYYYMMDD and DATE_TEXT" >&2 | |
exit 1 | |
fi | |
package_info_json=$(curl 'https://member.kms.kuronekoyamato.co.jp/api/receive_parcel/v1/getParcelDetailInfo' \ | |
-# --compressed \ | |
-X POST \ | |
--data-raw "$(echo ' | |
{"nmtJho":{"okjNo":"'${TRACKING_NUM}'","uktHasKbn":"01"},"ktuJho":{ | |
"iriTs": "'$(date +"%Y-%m-%dT%H:%M:%S.000%z" | sed 's/\([+-][0-9]\{2\}\)\([0-9]\{2\}\)$/\1:\2/')'", | |
"tnmSbtCd":"1"}} | |
' | jq -r --ascii-output | |
)" \ | |
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:136.0) Gecko/20100101 Firefox/136.0' \ | |
-H 'Accept: application/json, text/plain, */*' \ | |
-H 'Content-Type: application/json;charset=utf-8' \ | |
-H 'X-SYSTEM-ID: NRC' \ | |
-H 'X-PG_ID: NRCWBRP0610' \ | |
-H 'X-PG-ID: NRCWBRP0610' \ | |
-H 'Origin: https://member.kms.kuronekoyamato.co.jp') | |
nmt_id=$( echo "$package_info_json" | jq -r '.result .nmtJho .nmtId' | |
) | |
echo "nmt_id = $nmt_id" >&2 | |
if [[ -z "$nmt_id" || "$nmt_id" == "null" ]]; then | |
echo "`tput setaf 1`Could not find your package using tracking number : $TRACKING_NUM`tput sgr0`" >&2 | |
echo "$package_info_json" | jq >&2 | |
exit 1 | |
fi | |
asc_post_body="$(echo '{ | |
"srcJho": { | |
"yno": "'${POSTCODE}'" | |
}, | |
"ktuJho": { | |
"iriTs": "'$(date +"%Y-%m-%dT%H:%M:%S.000%z" | sed 's/\([+-][0-9]\{2\}\)\([0-9]\{2\}\)$/\1:\2/')'", | |
"tnmSbtCd": "1" | |
} | |
}' | jq --ascii-output -r)" | |
echo "$asc_post_body" | jq >&2 | |
address_search_result_json=$(curl 'https://member.kms.kuronekoyamato.co.jp/api/member/v1/searchAddress?' \ | |
--silent -X POST -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:136.0) Gecko/20100101 Firefox/136.0' \ | |
-H 'Accept: application/json, text/plain, */*' \ | |
-H 'Content-Type: application/json;charset=utf-8' \ | |
-H 'X-SYSTEM-ID: NRC' -H 'X-PG_ID: NRCWBRP0400' -H 'X-PG-ID: NRCWBRP0400' \ | |
-H 'Origin: https://member.kms.kuronekoyamato.co.jp' \ | |
-H 'Referer: https://member.kms.kuronekoyamato.co.jp/parcel/receive/change/datetime' \ | |
--data-raw "$asc_post_body" ) | |
address_search_code=$(echo "$address_search_result_json" | jq -r ' | |
.result.stkKmkJhoLst[0].ktrJhoLst | .[] | select( | |
(.tdkNm=="'${STATE}'") and | |
(.skgCysNm=="'${CITY}'") and | |
(.oazTor=="'${STREET_NAME}'") | |
and (.azaCym=="'${STREET_NUM}'") | |
) | .cazCd | |
') | |
echo "address_search_code = $address_search_code" >&2 | |
if [[ -z "$address_search_code" ]]; then | |
echo -e "Could not find your address using postcode : $POSTCODE ; while searching for : ${STATE} > ${CITY} > ${STREET_NAME}\n\n$(echo "$address_search_result_json" | jq )\n" >&2 | |
exit 1 | |
fi | |
post_body="$(echo '{ | |
"uktHenTrkJho": { | |
"iriCd": "1", | |
"dnpNo": "'${TRACKING_NUM}'", | |
"tucYouNisKey": "", | |
"uktHenSniMtoSitKbn": "01", | |
"iriSyaUktHenKkuMlKboFlg": "0", | |
"scnHttKboBsyJho": { | |
"scnHttBsyCd": "'${DELIVER_TO}'", | |
"scnHttDay": "'${DATE_YYYYMMDD}'", | |
"scnHttJktCd": "'${DELIVER_TIME_CODE}'", | |
"scnHttDayNm": "'${DATE_TEXT}'", | |
"scnHttJktNm": "'${DELIVER_TIME_STR}'" | |
}, | |
"httKboBsyJho": {}, | |
"nmtId": "'${nmt_id}'", | |
"frCmntTxt": "'${MSG}'", | |
"digitalKeyFlg": "0", | |
"kdkKbn": "", | |
"iriSyaMlAdr": "", | |
"iriSyaSei": "'${LAST_NAME}'", | |
"iriSyaNm": "'${FIRST_NAME}'", | |
"iriSyaTel": "'${TEL}'", | |
"dstZipCd": "'${POSTCODE}'", | |
"dstAddress1": "'${STATE}'", | |
"dstAddress2": "'${CITY}${STREET_NAME}${STREET_NUM}'", | |
"dstAddress3": "'${ADDRESS3}'", | |
"dstAddress4": "'${ADDRESS4}'", | |
"dstMachiazaCd": "'${address_search_code}'", | |
"dstBanchiNo": "'${ADDRESS_STREET_NUM_BAN}'", | |
"dstGouNo": "'${ADDRESS_STREET_NUM_GOU}'" | |
}, | |
"ktuJho": { | |
"iriTs": "'$(date +"%Y-%m-%dT%H:%M:%S.000%z" | sed 's/\([+-][0-9]\{2\}\)\([0-9]\{2\}\)$/\1:\2/')'", | |
"tnmSbtCd": "1" | |
} | |
}' | jq --ascii-output -c | |
)" | |
echo "$post_body" | jq >&2 | |
curl -v 'https://member.kms.kuronekoyamato.co.jp/api/receive_parcel/v1/registChangeReceiveParcel?tnmSbtCd=1&' \ | |
-X POST -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:136.0) Gecko/20100101 Firefox/136.0' \ | |
-H 'Accept: application/json, text/plain, */*' \ | |
-H 'Content-Type: application/json;charset=utf-8' \ | |
-H 'X-SYSTEM-ID: NRC' -H 'X-PG_ID: NRCWBRP0410' -H 'X-PG-ID: NRCWBRP0410' \ | |
-H 'Origin: https://member.kms.kuronekoyamato.co.jp' \ | |
-H 'Referer: https://member.kms.kuronekoyamato.co.jp/parcel/receive/change/datetime/confirm' --data-raw "$post_body" | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment