[WordPress]メールを受信したらXML-RPCを使ってブログに自動投稿(下書き保存)

こんにちは。
BIG1等を当てたいサラリーマンです。

wp-logo3

外部からメールを受信したら、WordPressを使っている当ブログに記事を下書き保存する仕組みを構築します。
その過程を簡単なサンプルを交えて、エントリーしていきます。

概要

当ブログの、[BIGレポート]第xxx回BIG 購入結果と当選結果のタイトル記事は楽天totoの速報情報を参考にエントリーしています。
この記事ではコメント以外は、決まったフォーマットが有ります。
今は、エクセルで作ったフォーマットに必要情報を投入してHTML化して記事にしています。
以前から、この作業を自動化しようと考えていました。

以下の様なフローを実現したいと思います。

処理の流れ

  • メールを受信したらプログラムを実行する
  • HTMLメールのコンテンツをスクレイピング
  • Webページからコンテンツを取得
  • データベースからデータを取得する
  • アイキャッチ画像を作成する
  • エントリー用コンテンツを作成する
  • WordPressに下書きを保存する

メールを受信したらプログラムを実行する

メールを受信したら、PHPプログラムを自動実行させます。

Postfixでエイリアスを利用して自動実行させます。

こちらは参考になる、以前のエントリーです。

[Linux]メールを受信したらPHPで自動返信メールを送信する
こんにちは。 BIG1等を当てたいサラリーマンです。 aliases(エイリアス)を使ってメール受信をトリガーにPHPを実行する方法...

HTMLメールのコンテンツをスクレイピング

スクレイピングとは、コンテンツなどの塊を解析し必要なデータを抜き出す事です。

先ずは、HTMLメールからコンテツを取得します。
PHPのライブラリで、php-mime-mail-parserを使います。
扱いやすく、可読性もいいのでオススメです。

こちらは参考になる、以前のエントリーです。

[PHP]今や当たり前のComposerをLinuxにインストールしてphp-mime-mail-parserを使う
こんにちは。 先日、PEAR/Mail_MimeDecodeを使ったメール解析をエントリーしました。 今回は、Compose...

この執筆時の最新バージョンは、Version 2.2.2でimapも必要だったので以下のコマンドでインストールしました。

sudo yum --enablerepo=remi --enablerepo=remi-php56 install -y php-imap

php-mime-mail-parser/php-mime-mail-parser – Packagist

続いてスクレイピングには、phpQueryライブラリを使います。
jQuery風にDOM操作を行える優れものです。

スクレイピング/DOM操作をjQuery風に行う(phpQuery)

Webページからコンテンツを取得

Webページからのコンテンツを取集には、PHPのfile_get_contents関数を使います。
URLを指定して、Webページを文字列として取得する事ができます。
取得した文字列を解析し情報を集取します。
PHP: file_get_contents – Manual

データベースからデータを取得する

データはSQLiteで管理しているので、データベースから取得します。

こちらは参考になる、以前のエントリーです。

[PHP]SQLiteが好きになる!PDO接続してのあれこれレシピサンプル
SQLiteは、無償で利用できる軽量のデータベース(RDBMS)です。 単一のファイルにデータを格納するタイプなので非常に扱いやす...

アイキャッチ画像を作成する

画像生成はこちらで詳しくエントリーしました!

[PHP]ImageMagickライブラリーで簡単に画像処理!
こんにちは。 BIG1等を当てたいサラリーマンです。 今回は、ImageMagickライブラリーとImagickモジュールを使っての...

WordPressに下書きを保存する

WordPressへの投稿には、XML-RPC Libraryを使います。

ダウンロードして、同一ディレクトリ(任意でも可)に保存します。
The Incutio XML-RPC Library for PHP

XML-RPCライブラリの候補としてComposer経由でインストールできる、ZendframeworkのZend\XmlRpc\Clientも試しました。
可読性も良く単体ファイルから読み込めば利用できるお手軽でXML-RPC Libraryを採用しました。

しかし、作成者とカテゴリーはIDしてなので調べる必要があります。
MySQLのusersテーブル、termsテーブルから調べられます。

WordPressを外部サーバから投稿する方法 | 勉強したことのメモ
データベース構造 – WordPress Codex 日本語版

まとめ

実際には、かなり希望通りの実装ができました。
次回は、購入したくじ結果を取得するためにログイン後のページにアクセスできるよに挑戦したいと思います。

スポンサーリンク
レクタングル(大)
レクタングル(大)

コメントをどうぞ

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

CAPTCHA


次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>