Talend Data Integrator にて XML に含まれている Scene7 URI から画像をダウンロードする

少し大きめの XML ファイルのフォーマット変換が必要になり、かつその中に含まれている URI から画像をダウンロードしなければならない。その URI は Scene7 の画像 URL であり、重複行もあるのでそれをフィルターして効率よく処理したい。

ということで、Talend Data Integrator 使ってやってみた。Context Variables を利用すれば良いことはわかったものの、その使い方サンプルで良いものが見つけられず、手探りでなんとか達成。

この処理部分の最終形としてはこんな感じ。

Talend-File-Download-01

ポイントは Context として必要なパラメータを設定しておくこと。初期値は以前は “” として空白値を入れておく必要があったが、おそらく何も設定しない null でも問題ないと思う。

フロー

  1. tFileInputXML
    • XMLファイルを読み込み、XMLノードごとの値をフィールドとして取得
  2. tMap
    • XML から取得したフィールドを加工して URI と保存するための FILENAME に出力
  3. tAggregateRow
    • 重複行をまとめるための処理 (同じ URI 値にてグループ化)
  4. tJavaRow
    • tAggregateRow で GroupBy した後のフィールド値を Context に格納
  5. tFileFetch
    • Context を変数として URI と保存ファイル名に使用

いくつかポイントとなるフローの部分を以下に説明。

tMap

今回は URL と filename の二つがあればOKなので、サンプルのXMLからこの二つを設定。保存するためのファイル名はXMLになかったため、単純にURLから該当する部分を取得

  • image_link: XML から取得
  • filename: image_link の末尾に該当する部分があったためそれを取得 StringHandling.EREPLACE(row1.image_link,”.*\\/”,””)

tAggregateRow

Group by のキーに URI (image_link) を指定し、他の列データである filename も出力したいため Operations に指定。Operations の Function は初期値が count になっているので最初にマッチした値の first を設定。

Talend-File-Download-02-AggregateRow

tJavaRow

この処理にて input_row.image_link と input_row.filename を context.URL と context.FILENAME に格納

context.URL = input_row.image_link;
context.FILENAME = input_row.filename;
Talend-File-Download-03-JavaRow

tFileFetch

この処理にて Scene7 からイメージをダウンロード。この tFileFetch は POST か GET の指定ができるが、Scene7 は GET なので POST method のチェックを外し、URI パラメータを URI フィールドに直接指定して対応。

Talend-File-Download-04-FileFetch

これにて複数の画像URLが指定されているファイルからのダウンロード自動化が完了。

コメントを残す

メールアドレスが公開されることはありません。