【ブログ記事整理】バックアップを解析する【WordPress】

ブログ記事の整理プロジェクト続編です。
最初から読みたい変わり者はコチラへどうぞ → ブログ記事の整理プロジェクト

今回はブログの記事を取り出す方針を考えてみようと思います。

パッと思いつく方法としては以下の4種類。

  1. WordPressのREST APIで記事を取得する
  2. WordPressのデータベースから直接クエリで取り出す
  3. バックアップファイルから取り出す
  4. Webページに直接アクセスしてリンクを順に辿っていき記事のHTMLを取り出す

どれも中々面倒くさそうです。
1.はAPIを調べるのが面倒くさい。
2.はいちいち外向けにMySQLを解放しないといけないので面倒くさい
3.はクエリのバックアップなので取り除かないといけない文字がいっぱいありそうで面倒くさい
4.は何かちょっとコンプライアンス的によろしくない気がする

今回は折角バックアップとったので活用することにします。
普段は何もないとそのまま破棄されちゃいますしね。
今回はちゃんと使ってあげます。

というわけで3を採用。

※注意:このブログ記事整理プロジェクトは大失敗です。読むのは勝手ですが良い子は真似しないでください。
全体を読みたい方はこちらへどうぞ。

バックアップの使用

前回バックアップを取ったコイツを解凍します。

解凍方法は適当なフリーソフトでも使ってください。
中身が生まれました。

フォルダの中に下っていきます。ファイルがいます。

サイズが大きいので、もしかしたらそこらのエディタでは開けないかもしれません。
VSCodeで開きます。VSCodeも何か言い訳しています。

ずっと下に行くとwp_postsのテーブルにインサートしているところが見つかります。
この辺の値を取り出せば、ブログ記事が取り出せそうです。

改行コードやらhtmlタグを取り除く必要ありそうです。

本分の取り出し

切り出し方としてはINSERT文をうまく取り出しあげればよさそうです。
僕のページの例ですが、

INSERT INTO `wp_posts` VALUES (
~~~省略~~~
,'','inherit','closed','closed','','472-revision-v1','','','2017-06-12 03:34:47','2017-06-12 03:34:47','',472,'http://www.premium-tsubu-hero.net/uncategorized/472-revision-v1',0,'revision','',0);

辺りを切り出してあげれば良さそうです。

テーブルの定義が以下のようになっているので
うまくいけばタイトルを区別したり時期によって
僕の気持ちの変動が見えたりするかもしれません。
ちゃんと定期的に書いて置けばよかった・・・。

CREATE TABLE `wp_posts` (
  `ID` bigint unsigned NOT NULL AUTO_INCREMENT,
  `post_author` bigint unsigned NOT NULL DEFAULT '0',
  `post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `post_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `post_content` longtext COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `post_title` text COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `post_excerpt` text COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `post_status` varchar(20) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT 'publish',
  `comment_status` varchar(20) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT 'open',
  `ping_status` varchar(20) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT 'open',
  `post_password` varchar(255) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '',
  `post_name` varchar(200) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '',
  `to_ping` text COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `pinged` text COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `post_modified_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `post_content_filtered` longtext COLLATE utf8mb4_unicode_520_ci NOT NULL,
  `post_parent` bigint unsigned NOT NULL DEFAULT '0',
  `guid` varchar(255) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '',
  `menu_order` int NOT NULL DEFAULT '0',
  `post_type` varchar(20) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT 'post',
  `post_mime_type` varchar(100) COLLATE utf8mb4_unicode_520_ci NOT NULL DEFAULT '',
  `comment_count` bigint NOT NULL DEFAULT '0',
  PRIMARY KEY (`ID`),
  KEY `post_name` (`post_name`(191)),
  KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`),
  KEY `post_parent` (`post_parent`),
  KEY `post_author` (`post_author`)
) ENGINE=InnoDB AUTO_INCREMENT=5926 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

まとめ

さて、方針は決まりました。
次回、SQLのバックアップファイルからタイトルと投稿日と本文を抜き出します。
切り抜き方はwp_postsへのINSERT文で正規表現とかで取り出します。

本文中にHTMLファイルが含まれていることがわかったので、
見つかったタグから順に場当たり的に取り除いていきます。

では、次回ソフトを作っていきます。

【ブログ記事整理】バックアップを解析する【WordPress】

おわり

PR

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です