So-net無料ブログ作成
検索選択

Talend Open Studio (ETLツール) でデータ統合(13)~kintoneにファイルを添付する [BI]

ファイル取得(GET)までやったので、ついでにファイル添付(PUT)のやり方も載せておきます。どちらかというと動かせるだろうということを確認したぐらいなので、実用するにはもう少しいじる必要がある設定になっていますが、誰かの参考になるかもしれないので載せておきます。

○ファイルをアップロードし、ファイルキーを取得
ジョブの左側のほうです。ファイルは"c:\tmp\test.zip"です。tLogRowでつないでいますが、サーバの応答を見ているだけで、実際に欲しいデータのfileKeyはこんな感じに設定すると、"c:\tmp\logs_file.log"に取得されます。
kp1.png
kp2.png

○アップロードしたファイルをAppに紐づける
この時点ではまだテンポラリ領域にファイルがアップされただけです。なので、紐づけるJSONをRESTで送ります。
kp3.png
とりあえずこれでZIPファイルを転送して、kintoneの画面からダウンロードしたものが壊れず開けることまでは確認しました。ただ、今回は特に連続処理とかする予定がなかったのでBODYにそのままfileKeyを埋め込んでいます。実際にちゃんとしたjobを組む場合はfileKeyとapp-id,record-idの一覧から毎回JSONに変換するというコードを記述する必要があります。これは実際にやる必要ができたら試してみようと思います。

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
メッセージを送る

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