2015年6月25日木曜日

Embulkを使ってWordPressのデータを出力してみる

はじめに

こんにちは、井下です。

今までに何度かEmbulkについて書いてきましたが、プラグインの使い方が主な内容だったので、今回はEmbulkを使って何をするかに焦点を当ててみようと思います。

そこでタイトルの通り、Embulkを使い、ウェブサイトやブログの構築によく利用されているWordPressからデータを出力してみます。

WordPressは元々エクスポート機能を備えていますが、定期的に出力しているようなケースであれば、Embulkを使うことで作業の効率化を見込めます。

例えば、毎日のユーザ登録数の推移を見てみたい、という場合、毎日管理画面にログインしてデータをエクスポートするより、自動でデータがファイルにまとめられていて、そのファイルを見るだけになっている方が楽ですよね。

そういったちょっとした手間を省けるようになります。

※過去の関連ブログ
データ転送のOSS「Embulk」を使って、MysqlからデータをCsvに落としてみる
embulk-filter-evalでどんなデータ変換ができるのか試してみる

Embulkの準備

Embulkをまだインストールしていないのであれば、下記のクイックスタートを参考にして、Embulkが利用できるように準備します。
https://github.com/embulk/embulk#quick-start

Embulkについての情報を集めたいのであれば、下記のまとめを利用しましょう。
http://qiita.com/hiroysato/items/397f36c4838a0a93e352

Embulkはデータのインプット・アウトプット先をプラグインによって拡張する仕組みになっています。WordPressは各データの管理をMySQLで行っているため、MySQLをインプット先にできるように、embulk-input-mysqlプラグインをインストールしておきます。
https://github.com/embulk/embulk-input-jdbc/tree/master/embulk-input-mysql

embulk-input-mysqlプラグインはEmbulkをインストールした後、下記のコマンドによってインストールできます。

C:\~>embulk gem install embulk-input-mysql

WordPressのテーブル設計について

Embulkの準備が完了した後は、WordPressからどんなデータを取得するのかを決めておきます。
下記のWordPressの標準インストールで作成されるテーブル一覧を参考にして、欲しいデータがどのテーブルのどのカラムにあるのかを確認します。
http://wpdocs.osdn.jp/データベース構造#.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.E4.B8.80.E8.A6.A7

なお、プラグイン等の拡張によって追加された機能は、別途テーブルを作成しているので、その場合は機能ごとに対応したテーブルを調べる必要があります。

今回は例として、標準インストールで作成されるusersテーブルのID、user_login、user_registeredの3カラムを出力対象として話を進めていきます。

Embulkの実行

Embulkの実行は基本として、下記のコマンドで行います。

C:\~>embulk run config.yml

"config.yml"を入力パラメータとするような形式です。この"config.yml"にインプット・アウトプット先などを定義します。("config.yml"は固定名ではなく、任意の名前に変更しても大丈夫です。)

サンプルとして、usersテーブルのID、user_login、user_registeredをcsvファイルに出力する設定のymlファイルを記載します。


in:
  type: mysql
  host: localhost
  user: dbuser
  password: "password"
  database: wordpress
  query: |
    SELECT ID, user_login, user_email
    FROM wp_users
exec: {}
out:
  type: file
  path_prefix: ./users
  file_ext: .csv
  formatter:
    type: csv
    header_line: true
    charset: UTF-8
    newline: CRLF

※緑色の文字の箇所は環境によって置き換える必要があります

サンプルのymlファイルを"config.yml"としてカレントディレクトリに保存し、Embulkの実行コマンドを実行すると、カレントディレクトリに"users.000.00.csv"ファイルが生成されます。
"users.000.00.csv"ファイルにusersテーブルのID、user_login、user_registeredの情報が出力されています。

定期的な出力サンプル

Embulkを実行するバッチもしくはスクリプトを作成し、Windows環境のA-AUTO 50基本ライセンスか、Linux環境のリモートライセンスから実行制御することで、定期的にWordPressからファイルを出力することができます。

なお、前回実行時との差分データだけ出力したい場合、Embulk自体に前回どこまで読み込んだかを指定する機能がないため、実行時にymlファイルを書き換えるバッチもしくはスクリプトを組むなど、工夫が必要になります。
※インプットがファイルであれば、ファイル名を参照して、どのファイルを読み込み対象にするかを識別できます

今回はサンプルとして、週次で実行日の1~8日前の7日間で、WordPressにユーザ登録したユーザのデータを出力するためのymlファイルとスクリプトを記載します。バッチで実行したい場合は、スクリプトをご参考ください。
ymlファイル(config.yml)
in:
  type: mysql
  host: localhost
  user: dbuser
  password: "password"
  database: wordpress
  query: |
    SELECT ID, user_login, user_email
    FROM wp_users
    
WHERE user_registered >= START_DATE AND user_registered <= END_DATE
exec: {}
out:
  type: file
  path_prefix: ./users
  file_ext: .csv
  formatter:
    type: csv
    header_line: true
    charset: UTF-8
    newline: CRLF

スクリプト(任意のファイル名)
#!/bin/sh

START_DATE=`date +""%Y-%m-%d"" --date "8 day ago"`
END_DATE=`date +""%Y-%m-%d"" --date "1 day ago"`

YML_ROOT=/XXXXX

EMBULK_EXPORT_FILE=users.000.00.csv
EXPORT_DIR=/YYYY
EXPORT_FILE=`date +"%Y%m%d"`.csv

\cp -f $YML_ROOT/config.yml $YML_ROOT/tmp.yml
sed -i -e "s/START_DATE/'$START_DATE'/g" $YML_ROOT/tmp.yml
sed -i -e "s/END_DATE/'$END_DATE'/g" $YML_ROOT/tmp.yml

embulk run $YML_ROOT/tmp.yml

mv -f $EMBULK_EXPORT_FILE $EXPORT_DIR/$EXPORT_FILE
rm -f $YML_ROOT/tmp.yml

※緑色の文字の箇所は環境によって置き換える必要があります。なお、作成したymlファイルはスクリプトで定義している変数"YML_ROOT"に配置します。

仕組みとしては、ymlファイルのSQL内でWHEREによる絞り込みを設定し、週次で動くスクリプトが具体的な日付を書き換えてから、Embulkを起動するようになっています。

もっと応用したい場合は

WordPressからデータを出力してみましたが、これはほんの一例です。Embulkはファイル以外にも様々な出力先を定義することができますし、出力前にデータの加工を行うこともできます。

機能拡張の肝となるプラグインは随時追加・更新されていますので、気になる方は下記のプラグイン一覧をご確認ください。
http://www.embulk.org/plugins/

0 件のコメント:

コメントを投稿