RailsからWordPressのDBにデータを直接投入する

技術的なこと

こんにちは、Heywaです。

僕はこのブログとは別にいくつかのブログを運営しているのですが、

そっちでは以下のような形式で自動化あるいは半自動化することで効率化して記事を投稿するようにしています。

図がわかりにくくて申し訳ありませんが、

①各Webサイトをスクレイピングして、情報を収集。収集した情報をRailsでWebとして見せる。

②情報から記事を作成(ここは僕が手作業で文章を入力したり、バッチ処理で自動作成したりします。)

③作成した記事データをWordPressのDBに直接入れ込み、ブログ記事として公開

という流れで処理しています。

今回、上記の③の部分を作成するにあたり、情報が見つからなかったりつまづいたりすることが多かったため、

WordPressのDBに直接データをインポートし、記事投稿する方法について流れを備忘も兼ねて整理していきたいと思います。

技術的に拙いのと、説明下手なのとあり見苦しい部分もありますが、

ご了承ください。

スポンサーリンク

WordPressのDBに直接データ挿入する場合に利用するテーブルについて

 

主なテーブルについて

 

データを挿入して記事投稿する前に、WordPressが使っているテーブルについて理解しておく必要があります。

僕が作成した際に利用したテーブルを簡単な説明とともに記載します。

wp_posts…投稿記事データのほか、画像ファイルを投稿する際にも利用します。

wp_postmeta…主にカスタム投稿フィールドを利用する際に使います。

wp_terms、wp_term_taxonomy…タグ・カテゴリのデータを格納

wp_term_relationships…タグ・カテゴリと記事を関連付けるためのテーブル

全テーブルについては、

詳しくは以下のページをチェックしてください。

データベース構造 - WordPress Codex 日本語版

 

WordPressのブログが利用しているDB・テーブルを確認する

 

WordPressが利用するテーブルを理解したうえで、対象のブログが利用しているDB名とテーブル名を確認します。

DB名の確認

 

アクセスの際にDB名が確認なので、以下サイトを参考に、

「wp-config.php」からDB名を確認しましょう。

データベースのユーザー名やパスワードを確認する方法 | 西沢直木のIT講座
レンタルサーバーの「簡単インストール」メニューからWordPressをインストールすると、データベースを自動作成してくれるので便利ですが、データベースのユーザー名やパスワードがわからなくなる場合があります。 この記事では、インストール済みのWordPressについて、データベースのユーザー名やパスワードを確認する方法...

ユーザ名、パスワードはインストール時に利用しているので、覚えていれば大丈夫です。

テーブル名の確認(マルチサイト運用している人は特に注意。)

 

1サイトのみ運用している方は前述したテーブル名を指定すれば問題ないと思いますが、

マルチサイト運用をしている場合、元サイトと子サイトではテーブルがどうも異なるようです。

「WordPress Codex 」の「サイト固有のテーブル」の項をご確認ください。

データベース構造 - WordPress Codex 日本語版

「wp_posts」テーブルの場合、「wp_2_posts」のように、

連番が間に付与された形式になります。

テーブル名については良く確認のうえ、次項の記事投稿処理の作成に取り組まれた方が良いと思います。(経験者談……)

記事を投稿する(即時投稿)

 

いよいよDBにデータを挿入してみます。

前記事にて必要な情報が整っていることが前提です。

DBに接続する。

 

まずはActiveRecordを利用して、MySQLのサーバへ接続していきます。

テーブル名「wp_posts」は前手順で確認したもので置き換えてくださいね。

 

参考URL

ActiveRecordを単体で使うには
さくっとDBにアクセスするバッチやスクリプトを、rubyで書きたいなぁと思うことはないですか? Railsで使われている O/R

ActiveRecordを利用して記事データを新規投稿する。

 

Mysqlのテーブルへデータを投入していく。ポイントは、項目のうち、IDについては自動採番のため、自分では採番しないこと。

当たり前のことなのかもしれないけど、僕はこのことを知らずに自分で採番してしまい、記事が投稿できなくなりました。

「post_status」デフォルト値が「publish(公開済み)」なので、即時公開の場合は指定しなくても問題ありません。

一旦下書きで保存したい場合などは指定しておかないと誤爆してしまうと思いますw。

次に、挿入したレコードにGUIDを挿入します。

挿入後、IDが採番されるので、GUIDを挿入する。

 

以上で記事の投稿は完了です。WordPressの管理画面から記事が投稿されたことを確認しましょう。

記事にカテゴリ・タグを設定する①「カテゴリの新規作成」

 

次に、投稿した記事にカテゴリ・タグを設定してみます。

今回は新規にカテゴリを作ることを想定して作業します。

まずは「wp_terms」テーブルへデータを挿入します。

記事にカテゴリ・タグを設定する②「投稿とカテゴリを関連付ける」

最後に、作成したカテゴリと投稿を関連付けてあげれば完了です。

関連付けの際は、 「wp_term_relationships」を利用します。

以上、Heywaでした。

RailsからMysqlを操作するというのがかなりムダな感じがしなくもないのですが、想定以上に勉強になっているので良しと考えております。

似たようなことをしようと考えている方の参考になれば幸いなのと、

効率のよい方法についてご存知のかたがいらっしゃいましたら、コメントなどでアドバイスいただければ幸いです。

上記の手順で記事の投稿は出来ましたが、サムネイル(アイキャッチ)が設定されていないため、トップページなどから見ると格好わるい状態になっています、

本記事にてサムネイルの設定方法についても記載したいと思ったのですが、

こちらは難儀したこともあり少々長くなってしまうと思うので、

次回の記事で記載していきたいと思います。

また、各Webサイトをスクレイピングする過程については、

以下の本を読みながら勉強しました。

良著だと思いますので、

Rubyでスクレイピングを行うことを考えている方にはおすすめします。

コメント