カスタム処理を利用して、CSV出力されるデータ構造を変更する

概要

カスタム処理を使用して、APIが標準で出力するデータを加工できます。 今回は、CSV形式で出力される記事一覧データに管理画面編集ページへのURLを追加します。 Image from Gyazo

学べること

APIを利用したCSV出力を以下の手順で加工します。

前提条件

このチュートリアルでは、コンテンツ一覧のエンドポイントに後処理でカスタム処理を適用し、対象のエンドポイントがCSV形式でレスポンスを返した場合にカスタム処理を実行します。
エンドポイントからCSV形式でレスポンスを得る方法は以下のドキュメントを参照ください。

カスタム処理を作成する

それではカスタム処理を作成します。

1. カスタム処理の一覧画面を表示する

メニューの[オペレーション] -> [カスタム処理] をクリックします。 Image from Gyazo

2. カスタム処理の編集画面を表示する

カスタム処理一覧画面の右上の [追加] をクリックします。 Image from Gyazo

すると、カスタム処理編集画面が表示されます。 Image from Gyazo

3. タイトル・識別子を記入する

それではカスタム処理を作成していきます。
まずはタイトルと識別子に記入します。今回は下記のように記入します。

  • タイトル:コンテンツCSV編集
  • 識別子:sample1_postprocess
  • トリガー: 未指定

タイトル・識別子は他のカスタム処理と重複できません。 実装対象のエンドポイント名など、他と重複しない内容で記入してください。

Image from Gyazo

4. データ操作処理を記述する

次に、実際の処理を記述します。

エディタ内にデータを追加する処理を記述していきます。

コンテンツIDを取得する処理を記述する
まずは、コンテンツIDを取得するためにヘッダー行を読み取ります。

利用できる変数は下記となります。

変数名説明
$json.csv_dataobjectコンテンツデータ

エディタに下記記入します。

{assign_array var=processed_list values=""}

{* CSVの場合 *}
{if $json.csv_data}
    {foreach from=$json.csv_data item=row name=csv_data}
        {if $smarty.foreach.csv_data.index eq 0}{* ヘッダー行 *}
            {foreach from=$row item=header_title name=header_data}
                {if $header_title eq 'コンテンツID'}
                    {* コンテンツID列を取得 *}
                    {assign var=contents_id_col_index value=$smarty.foreach.header_data.index}
                {/if}
            {/foreach}
            {append var=row value="編集ページURL"}
        {else}{* データ *}
            {assign var=url value=$smarty.const.ROOT_MNG_URL|cat:'/management/topics/topics_edit/?topics_id='|cat:$row.$contents_id_col_index}
            {append var=row value=$url}
        {/if}
        {append var=processed_list value=$row}
    {/foreach}
    {assign var=json.csv_data value=$processed_list}
{/if}

Image from Gyazo

編集したデータを出力する

変数名説明
$processed_jsonobjectコンテンツデータ
{assign var=processed_json value=$json}

Image from Gyazo

6. カスタム処理を保存する

処理の記述が完了したら、[追加する] ボタンをクリックして保存します。

Image from Gyazo

以上でカスタム処理の完成です。

エンドポイントにカスタム処理を登録する

作成したカスタム処理をエンドポイントの後処理に追加します。

Image from Gyazo

詳しくは、API後処理を参照してください。

動作確認

以下の手順で動作確認をします。

1. CSVファイルをダウンロードする。

設定したカスタム処理はCSVで出力した場合に動作するので、_output_format=csvのクエリパラメータを付けてエンドポイントにアクセスします。 上記でカスタム処理を登録したAPIエンドポイントへアクセスし、CSVファイルをダウンロードします。 https://[サイトキー].g.kuroco.app/rcms-api/**/topics/download?topics_group_id=**&_output_format=csv

以下3点はご自身のサイトのものを入力してください。

  • https://[サイトキー].g.kuroco.app
    サイトのAPIドメインを入力して下さい。
    [環境設定] > [アカウント設定]の画面で確認ができます。 Image from Gyazo

  • /rcms-api/**/topics/download
    エンドポイントにカスタム処理を登録するのステップでカスタム処理を登録したAPIエンドポイントを入力して下さい。

  • topics_group_id=**
    一覧にしたいコンテンツ定義のIDを**に入力して下さい。IDはコンテンツ定義一覧の画面から確認できます。 Image from Gyazo

2. ファイルの内容を確認する。

CSVがUTF-8で保存されるので、メモ帳で開く、もしくはエクセルでインポートして、「編集ページURL」の列が追加されていることを確認します。
Image from Gyazo

Image from Gyazo

以上で本チュートリアルは完了です。

注意点

出力するデータが大きくなる場合、メモリオーバーエラーやタイムアウトの発生する可能性があります。 この場合はバッチ処理化をご検討ください。

関連ドキュメント

お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。