LoginSignup
7
7

More than 5 years have passed since last update.

kintoneコマンドラインツールでデータ登録してみた

Last updated at Posted at 2016-02-05

前回の「kintoneコマンドラインツールでサブテーブルを操作してみた」では、サブテーブル付きのkintoneアプリからデータを書き出すことをしてみました。今回は、kintoneの異なるアプリのデータを定期的に別のアプリにコピーする方法を紹介したいと思います。しかし、データをコピーするシーンってどんな時でしょうかね。

  1. 運用中のアプリをバックアップしたい
  2. 必要なデータのみを別のアプリで管理したい
  3. 情報管理の都合上、別会社(ドメイン)へデータを同期して活用したい

など、もっとあるかもしれませんが、その中でも「情報管理の都合上、別会社(ドメイン)へデータを同期して活用したい」を試してみたいと思います。

イメージ

img20160205-104244no-00.png

次の処理をシェルスクリプトで実現してみます。
1. アプリAから条件を絞り込んでCSVに出力する
2. 出力したCSVのフィールドコードをアプリBに合わせる
3. アプリBに登録する

kintoneコマンドラインツールを取得する

kintoneコマンドラインツール」を使います
次のようなことが Windows, Linux, Macからできるコマンドツールです。
データの取得方法は「kintoneコマンドラインツールでサブテーブルを操作してみた」で記載していますので、ご覧ください。

2つのアプリを用意する

異なるドメインでkintoneアプリをそれぞれ 1つずつ用意します。
kintoneの環境を持っていない!という方、cybozu.com developer networkで無償の開発者ライセンスを取得しておきましょう。

アプリの構成

アプリA

フィールドコード フィールドタイプ
TitleA 文字列(1行)
NumberA 数値

アプリB

フィールドコード フィールドタイプ
TitleB 文字列(1行)
NumberB 数値

レコード登録画面

(フィールド名とフィールドコードを同じにしています)
アプリA

img_20160203095822.png

アプリB

img_20160203095924.png

kintoneコマンドラインツールに必要な情報

アプリA

パラメータ ここで実験する値
-a アプリID 85 ※IDはURLに表示されています。
-d サブドメイン名 sample1.cybozu.com ※サブドメイン名は各自異なります。
-t APIトークン De5Xb3TM1TDccdqEM20eP1dpesjuBLckOx6AyM4n ※アプリの管理画面から発行できます。

アプリB

パラメータ ここで実験する値
-a アプリID 822 ※IDはURLに表示されています。
-d サブドメイン名 sample2.cybozu.com ※サブドメイン名は各自異なります。
-t APIトークン BoNFRmX0oDoKQMSrTiZC7hbEmb9QaZa1vYVfnyD4 ※アプリの管理画面から発行できます。

それぞれの値は環境によって異なります。

いよいよ本題!シェルスクリプトを実行してみよう

Linux環境の場合、次のシェルスクリプトをUTF-8で保存しましょう。
ここでのファイル名は「import.sh」にしておきます。

説明

  • --- self setting ---で囲まれた部分の変更のみです。
  • # APP_ID_A内の変数にアプリAの情報を設定
  • # APP_ID_B内の変数にアプリBの情報を設定
  • # Mapping 内の変数にコピー元のフィールド:コピー先のフィールドを設定
    • TitleAからTitleBにコピーする際には、TitleA:TitleB と書きます
    • $idなど「$」を使う際にはエスケープしましょう
    • コピーするフィールドに応じて増やしましょう

プログラム

#!/bin/bash

# --- self setting ---
# character encoding
OUTPUT_TYPE="sjis"
#OUTPUT_TYPE="utf-8"

# APP_A
APP_ID_A="85"
SUB_DOMAIN_A="sample1"
API_TOKEN_A="De5Xb3TM1TDccdqEM20eP1dpesjuBLckOx6AyM4n"
QUERY_A="Created_datetime = THIS_MONTH()" #"$id < 100 and Created_datetime = TODAY()"

# APP_B
APP_ID_B="822"
SUB_DOMAIN_B="sample2"
API_TOKEN_B="BoNFRmX0oDoKQMSrTiZC7hbEmb9QaZa1vYVfnyD4"

# Mapping
declare -a ARR_MAPPING=()
ARR_MAPPING+=("TitleA:TitleB") #sample:\$id,Title,Number,...
ARR_MAPPING+=("NumberA:NumberB")

# --- self setting ---

# set cli-kintone files
CLI_FILES="cli-kintone"
BASE_DIR=$(cd $(dirname $0); pwd)
if [ ! -f "$BASE_DIR/$CLI_FILES" ]; then
    echo "Not found $CLI_FILES files."
    exit 1
fi

# set header fields
declare -a ARR_FIELDS_A=()
declare -a ARR_FIELDS_B=()
for i in "${ARR_MAPPING[@]}"
do
   ARR_FIELDS_A+=(`echo $i | cut -d":" -f1 | cut -d":" -f1`)
   strB=\"`echo $i | cut -d":" -f2 | cut -d":" -f1`\"
   ARR_FIELDS_B+=($strB)
done
OUTPUT_FIELDS="$(IFS=,; echo "${ARR_FIELDS_A[*]}")"
INPUT_FIELDS="$(IFS=,; echo "${ARR_FIELDS_B[*]}")"

# set datetime file
DATETIME=`date +%Y%m%d%H%M%S.%2N`
OUTPUT_FILE="output$DATETIME.csv"
OUTPUT_PATH=$BASE_DIR/$OUTPUT_FILE

# excute output file
./$CLI_FILES -a $APP_ID_A -d $SUB_DOMAIN_A -t $API_TOKEN_A -e $OUTPUT_TYPE -c "$OUTPUT_FIELDS" -q "$QUERY_A" >> $OUTPUT_PATH

# change csv header
IMPORT_FILE="Import$DATETIME.csv"
find . -name "$OUTPUT_FILE" | sed -i -e "1,1d" $OUTPUT_FILE
find . -name "$OUTPUT_FILE" | sed -i -e "1i $INPUT_FIELDS" $OUTPUT_FILE
find . -name "$OUTPUT_FILE" | mv "$OUTPUT_FILE" "$IMPORT_FILE"
echo "Import file: $IMPORT_FILE"

# excute import file
./$CLI_FILES -a $APP_ID_B -d $SUB_DOMAIN_B -t $API_TOKEN_B -e $OUTPUT_TYPE -f "$IMPORT_FILE"

echo "Finished."

シェルスクリプトを実行してみる

$ ./import.sh

コピーできた!!
インポート対象のファイルは、import~.csv というファイルで、保存するようにしています。
img_20160203171507.png

さいごに

いかがでしたでしょうか。kintoneコマンドラインツールとシェルスクリプトを使うと 定期的に、別会社(ドメイン)へデータを同期して活用 することができます。お試しください。

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7