Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

前回の「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コマンドラインツールとシェルスクリプトを使うと 定期的に、別会社(ドメイン)へデータを同期して活用 することができます。お試しください。

ushiron
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした