SSブログ

Talend Open Studio (ETLツール) でデータ統合(12)~kintoneの添付ファイルをごっそり抜く [BI]

社内でとあるアイデアコンテストを開催し、投稿先をkintoneにしていたのですが、思いのほか件数が集まってしまったのでちまちまやるのは面倒くさいな~ということで一念発起でジョブを作りました。

○処理内容: 以下の(1)、(3)を
(1)とあるアプリのid,fileKey,ファイル名を取得し、テキストファイルで保存
(2)ファイル名に重複がある場合はリネームする(これは手動)
(3)上記のテキストファイルを元にファイルを連続ダウンロードする

○参考URL
https://developers.cybozu.com/ja/kintone-api/apprec-readapi.html

(1)とあるアプリのid,fileKey,ファイル名を取得し、テキストファイルで保存
全体はこんな感じです
12-1.png

○RESTコンポーネント(tREST)
・URL
ここにアプリID、クエリをエンコードして記述します。例ではid=511のアプリに対して2つのフィールド("レコード番号($id)"と"filename")をOffset100をかけて持ってくるクエリを記述しています。
"https://(要変更).cybozu.com/k/v1/records.json?app=511&fields%5b0%5d=filename&fields%5b1%5d=$id&query=offset%20100"
※注意点1:&field[0]=ファイルのような形でエンコードしますが、
・"="や"&"はエンコードしない
・日本語のフィールドコードはUTF8でエンコードする
※注意点2:$idはtalendのJSONパーサーでエラーになりますので後段にtReplaceを配置。
・HTTPメソッド
 GETを指定
・HTTPヘッダー
ログイン方法に応じてAuthorizationを指定、base64でユーザー名:パスワード をエンコードします。Hostも必須。

○tReplace
talendのJSONパーサーが"$"を扱えないので変換をかけます。ここではレコード番号の$idをidに変更しました。
12-2.png

○JSON変換(tExtractJSONFields)
・kintoneのJSONはトップにrecords(複数レコード抽出の場合)、その下にフィールドの構造がありますので、"フィールド名/value"のように指定します。
12-3.png

○テキスト保存
UTF8で3カラム分保存します。

これを実行すると、fileKey、ファイル名、IDが出力されます。100件以上ある場合はtRESTのクエリでoffsetをかけながらループをしてテキストファイルに追記モードで追加してください。

(2)ファイル名に重複がある場合はリネームする(これは手動)
上手く動いた!と思ったらファイル名重複でファイル数不足、、、的なことがあったのでご注意ください。
面倒なので今回は手でリストをリネームしました。

(3)上記のテキストファイルを元にファイルを連続ダウンロードする
テキストファイルをUTF8でInputから流します
○tFlowToIterate
テキストファイルのデータをグローバル変数に入れて繰り返しを発生させます。後段とはIterateで繋いでください。
12-4.png

○tFileFetch
画像のような感じで設定すると、ファイル単位で連続処理が行われます。
12-5.png
nice!(2)  コメント(1)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 2

コメント 1

@kuwazzy

今更ですがJDBCドライバ使えば出来ますよ
https://qiita.com/TomoyoH/items/9472b5a615aa4adde9a5
by @kuwazzy (2018-01-18 17:36) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。