ブログ記事の整理プロジェクト – WordPressの記事の取り出し

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

ブログの記事を整理するために形態素解析の準備をしています。
何を言っているかわからない方、その感覚は正しい。
でも、深く考えない方がよいと思います。
ブログの整理がイヤで趣味に走ってる感は否めません。

前回記事の取出方法の候補を4つ挙げました。
諸般の事情により3の方針でいきます。

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

簡単な手順

  1. バックアップファイルを準備する
  2. アプリでバックアップファイルを読み込み一個のファイルにつなげる

詳細手順

バックアップファイルを準備する

以前の記事でバックアップを取得しました。
取得したバックアップのdump.sql.gzを解凍しておきます。
解凍しておきます・・・なんだか料理サイトみたい。

ファイルには、データベース復旧のために必要なデータが全て入ってます。

  • DDL(Data Definition Language)
  • DML(Data Manipulation Language)
  • DCL(Data Control Language)

と呼ばれる内容です。

↓ファイルの中身のイメージ。

アプリでバックアップファイルを読み込み一個のファイルにつなげる

今回DMLのINSERT文から必要な内容のデータを抜いていきます。
出来上がったソフトはこんな感じです。3分クッキングっぽい。
MainWindowって・・・やる気の無さが目に沁みます。

先程のバックアップファイルを読み込んでみます。
イイ感じ。

需要は全くないと思いますが、一応成果物をUPしておきます。
ちゃんと動くかは知りません。
一応PhpMyAdnubのdumpからでも行ける事を想定しています。
後日、確認します。

お役立ち情報

ここまで、やったことを並べただけのスカスカ記事なので、
ちょっとお役立ち情報を展開しておきます。
人類約78億人いるので1人くらいの役には立てるでしょう。

お役立ち情報①

WordPressの記事が保存されているテーブルの定義。

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 */;

変更履歴やら付属情報も登録されています。
post_typeがpostのものだけを残すと良い感じに最新版の記事だけ残ります。

解説はコチラのページがよさそうです → WORDPRESS Codex日本語版

お役立ち情報②

以下の正規表現でINSERT INTO wp_posts VALUES (7,1,'2017-・・・)
の(7,1,'2017-・・・)が取りだせます。

string match_pattern
= @"\((\d*?),(\d*?),('\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d'),('\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d'),('.*?'),('.*?'),('.*?'),('.*?'),('.*?'),('.*?'),('.*?'),('.*?'),('.*?'),('.*?'),('\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d'),('\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d'),('.*?'),(.*?),('.*?'),(.*?),('.*?'),('.*?'),(.*?)\)";// (.*?),\d*\)";

実際に取れましたが迷作です。力技な感じが残念。
目的のためには手段を選ばない!!
とか言っておけば色々うやむやになる?

構文解析なので、本来BNFとかを使用するのでしょうが、
僕はBNFにあまり詳しくないので正規表現の力技解析です。

コツは気合と根性。

総括

さて、全記事を抽出して一つのテキストにまとめることができました。
ついでにHTMLタグも取り除いています
→ ※後でわかったのですが、次に使用するKH CoderはHTMLタグを取り除いてくれるので不要

いくつかUbuntu関連のコマンドとかは残ってますがそのまま放置して次にいきます。

さて、次はお楽しみの形態素解析です。

おわり

コメントする

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