情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsでWordPressブログから記事を取得するには?

2016/04/17

WordPressブログから記事を取得するにはWordPress APIを呼び出さなければなりません。

WordPress APIを呼び出すにはnode-wordpressパッケージのwordpressモジュールを利用します。

まず、wordpress.createClient関数でWordPressブログのクライアントを作成します。

第1引数にクライアントの設定をオブジェクトとして指定します。

設定として重要なのは下の3つです。

  • url・・・WordPressブログのURLです。
  • username・・・WordPressブログにアクセスする際のユーザー名です。
  • password・・・WordPressブログにアクセスする際のパスワードです。

返り値としてクライアントを表すwordpress.Clientクラスのインスタンスが得られます。

クライアントが作成できたら、wordpress.Client.getPosts関数でWordPressブログから記事を取得します。

第1引数に取得する記事に対するフィルタをオブジェクトとして指定します。フィルタは指定しなくても構いません。

フィルタとして重要なのは下の4つです。

  • orderby・・・どのフィールドで並び替えを行うかです。
  • order・・・並び替えが降順か昇順かです。降順にする場合にはDESCを指定し、昇順にする場合にはASCを指定します。デフォルトはDESCです。
  • offset・・・並び替え後の最初の記事から数えて幾つの記事を飛ばす(取得しない)かです。つまり、最初の記事から数えてoffset + 1番目の記事から取得します。デフォルトは0です。
  • number・・・幾つの記事を取得するかです。デフォルトは10です。

第2引数に取得するフィールドを配列として指定します。フィールドは指定しなくても構いません。指定しなかった場合には全てのフィールドを取得します。

第3引数にコールバック関数を指定します。この関数の第1引数はエラーオブジェクトであり、第2引数はそれぞれの記事の内容を表すオブジェクトが格納されている配列です。

サンプルコード1

コマンドライン引数として与えられたoffsetnumberにより特定のWordPressブログから記事を取得し、標準出力に出力します。

wordpress-getposts.js

var wordpress = require('wordpress');
var util = require('util');

if (process.argv.length < 4) {
    console.error('lack argument.');
    process.exit(1);
}
if (!isFinite(process.argv[2]) || process.argv[2] < 0) {
    console.error('invalid argument.');
    process.exit(1);
}
if (!isFinite(process.argv[3]) || process.argv[3] < 0) {
    console.error('invalid argument.');
    process.exit(1);
}

var client = wordpress.createClient({
    url: 'http://info-i.net/',
    username: 'user',
    password: 'pass'
});

client.getPosts({
    offset: process.argv[2],
    number: process.argv[3]
}, function (err, posts) {
    if (err) {
        console.error(err);
        process.exit(1);
    }
    else {
        console.log(util.inspect(posts, {depth: null}));
    }
});

使用パッケージ

  • node-wordpress
    npm install wordpressでインストールします。

実行結果

offsetとして3を指定し、numberとして2を指定すると、最新記事から数えて4記事目の記事から2記事が取得されます。

また、私はブログの記事をMarkdownで記述し、Markdown形式のままで投稿しています(WordPressのプラグインを使ってブログを閲覧した際には記事内容がHTMLとして出力されるようにしています)。そのため、contentに格納されている記事内容はMarkdown形式のままです。

C:\work\node>node wordpress-getposts.js 3 2
[ { id: '64',
    title: 'Node.jsでプログラムを終了する',
    date: Fri Feb 05 2016 16:20:37 GMT+0900 (東京 (標準時)),
    modified: Sat Feb 06 2016 16:38:29 GMT+0900 (東京 (標準時)),
    status: 'publish',
    type: 'post',
    name: 'process-exit',
    author: '1',
    password: '',
    excerpt: '',
    content: '### サンプルコード\r\n\r\n**<span style="color:blue">▼</span>使用関数**\r\n\r\n* `process.argv`・・・コマ
ンドライン引数を取得します。→[コマンドライン引数を取得する](http://info-i.net/process-argv)\r\n* `console.error`・・・標準エラー出力に文字列を出力しま
す。→[標準エラー出力に文字列を出力する](http://info-i.net/console-error)\r\n* `process.exit`・・・プログラムを終了します。→下の解説\r\n* `co
nsole.log`・・・標準出力に文字列を出力します。→[標準出力に文字列を出力する](http://info-i.net/console-log)\r\n\r\n**<span style="color
:blue">▼</span>process-exit.js**\r\n\r\n```js\r\nif (process.argv.length &lt; 3) {\r\n\tconsole.error(&
#039;lack argument.&#039;);\r\n\tprocess.exit(1);\r\n}\r\n\r\nconsole.log(process.argv[2]);\r\n```\r\n\
r\n### 実行結果\r\n\r\n```\r\nC:\\work\\node&gt;node process-exit.js\r\nlack argument.\r\n\r\nC:\\work\\nod
e&gt;node process-exit.js arg\r\narg\r\n```\r\n\r\n### 解説\r\n\r\n`process.exit`関数でプログラムを実行しているプロセスを終了しま
す。\r\n\r\n第1引数にリターンコードを指定します。リターンコードは正常終了の場合には`0`とし、異常終了の場合には`1`以上とするのが普通です。\r\n\r\n上のコードではコマンドライン引数の数が
少な過ぎる場合に標準エラー出力にエラーメッセージを出力し、プログラムを終了するようにしています。コマンドライン引数を使うプログラムではよく使うパターンではないかと思います。',
    parent: '0',
    link: 'http://info-i.net/process-exit',
    menuOrder: 0,
    commentStatus: 'open',
    pingStatus: 'open',
    sticky: false,
    thumbnail:
     { attachment_id: '17',
       date_created_gmt: Wed Jan 20 2016 14:58:23 GMT+0900 (東京 (標準時)),
       parent: 13,
       link: 'http://info-i.net/wp-content/uploads/2016/01/screenshot.1.jpg',
       title: 'screenshot.1',
       caption: '',
       description: '',
       metadata:
        { width: 480,
          height: 270,
          file: '2016/01/screenshot.1.jpg',
          sizes:
           { thumbnail:
              { file: 'screenshot.1-150x150.jpg',
                width: 150,
                height: 150,
                'mime-type': 'image/jpeg' },
             medium:
              { file: 'screenshot.1-300x169.jpg',
                width: 300,
                height: 169,
                'mime-type': 'image/jpeg' },
             'post-thumbnail':
              { file: 'screenshot.1-480x198.jpg',
                width: 480,
                height: 198,
                'mime-type': 'image/jpeg' } },
          image_meta:
           { aperture: 0,
             credit: '',
             camera: '',
             caption: '',
             created_timestamp: 0,
             copyright: '',
             focal_length: 0,
             iso: 0,
             shutter_speed: 0,
             title: '',
             orientation: 1,
             keywords: [] } },
       type: 'image/jpeg',
       thumbnail: 'http://info-i.net/wp-content/uploads/2016/01/screenshot.1-150x150.jpg' },
    format: 'standard',
    terms:
     [ { term_id: '4',
         name: 'Node.js',
         slug: 'nodejs',
         term_group: '0',
         term_taxonomy_id: '4',
         taxonomy: 'category',
         description: '',
         parent: '0',
         count: 12,
         filter: 'raw' } ],
    customFields: [ { id: '532', key: 'views', value: '7' } ] },
  { id: '61',
    title: 'Node.jsでコマンドライン引数を取得する',
    date: Thu Feb 04 2016 15:58:17 GMT+0900 (東京 (標準時)),
    modified: Sat Feb 06 2016 16:26:52 GMT+0900 (東京 (標準時)),
    status: 'publish',
    type: 'post',
    name: 'process-argv',
    author: '1',
    password: '',
    excerpt: '',
    content: '### サンプルコード\r\n\r\n**<span style="color:blue">▼</span>使用関数**\r\n\r\n* `process.argv`・・・コマ
ンドライン引数を取得します。→下の解説\r\n* `console.log`・・・標準出力に文字列を出力します。→[標準出力に文字列を出力する](http://info-i.net/console-log)
\r\n\r\n**<span style="color:blue">▼</span>process-argv.js**\r\n\r\n```js\r\nfor (var i = 0; i &lt; pro
cess.argv.length; i++) {\r\n\tconsole.log(process.argv[i]);\r\n}\r\n```\r\n\r\n### 実行結果\r\n\r\n```\r\nC
:\\work\\node&gt;node process-argv.js argument1 aaaa\r\nC:\\Program Files\\nodejs\\node.exe\r\nC:\\work
\\node\\process-argv.js\r\nargument1\r\naaaa\r\n```\r\n\r\n### 解説\r\n\r\nコマンドライン引数は`process.argv`に格納されて
います。`n`番目のコマンドライン引数は`process.argv[n]`のようにして取得することができます。\r\n\r\n1番目の引数は起動した`node.exe`のパスです。\r\n\r\n2番目の引
数は`node.exe`が実行しているJavaScriptファイルのパスです。\r\n\r\n3番目以降の引数は`node.exe`を起動する際に追加で指定した引数です。',
    parent: '0',
    link: 'http://info-i.net/process-argv',
    menuOrder: 0,
    commentStatus: 'open',
    pingStatus: 'open',
    sticky: false,
    thumbnail:
     { attachment_id: '17',
       date_created_gmt: Wed Jan 20 2016 14:58:23 GMT+0900 (東京 (標準時)),
       parent: 13,
       link: 'http://info-i.net/wp-content/uploads/2016/01/screenshot.1.jpg',
       title: 'screenshot.1',
       caption: '',
       description: '',
       metadata:
        { width: 480,
          height: 270,
          file: '2016/01/screenshot.1.jpg',
          sizes:
           { thumbnail:
              { file: 'screenshot.1-150x150.jpg',
                width: 150,
                height: 150,
                'mime-type': 'image/jpeg' },
             medium:
              { file: 'screenshot.1-300x169.jpg',
                width: 300,
                height: 169,
                'mime-type': 'image/jpeg' },
             'post-thumbnail':
              { file: 'screenshot.1-480x198.jpg',
                width: 480,
                height: 198,
                'mime-type': 'image/jpeg' } },
          image_meta:
           { aperture: 0,
             credit: '',
             camera: '',
             caption: '',
             created_timestamp: 0,
             copyright: '',
             focal_length: 0,
             iso: 0,
             shutter_speed: 0,
             title: '',
             orientation: 1,
             keywords: [] } },
       type: 'image/jpeg',
       thumbnail: 'http://info-i.net/wp-content/uploads/2016/01/screenshot.1-150x150.jpg' },
    format: 'standard',
    terms:
     [ { term_id: '4',
         name: 'Node.js',
         slug: 'nodejs',
         term_group: '0',
         term_taxonomy_id: '4',
         taxonomy: 'category',
         description: '',
         parent: '0',
         count: 12,
         filter: 'raw' } ],
    customFields: [ { id: '496', key: 'views', value: '5' } ] } ]

サンプルコード2

特定のWordPressブログから更新日時の昇順に記事を取得し、標準出力に出力します。ただし、取得するのはIDとタイトルと投稿日時と更新日時のみです。

wordpress-getposts-2.js

var wordpress = require('wordpress');
var util = require('util');

var client = wordpress.createClient({
    url: 'http://info-i.net/',
    username: 'user',
    password: 'pass'
});

client.getPosts({
    orderby: 'modified', 
    order: 'ASC'
}, [
    'id', 
    'title', 
    'date', 
    'modified'
], function (err, posts) {
    if (err) {
        console.error(err);
        process.exit(1);
    }
    else {
        console.log(util.inspect(posts, {depth: null}));
    }
});

使用パッケージ

  • node-wordpress
    npm install wordpressでインストールします。

実行結果

C:\work\node>node wordpress-getposts-2.js
[ { id: '13',
    title: 'Node.jsのインストール',
    date: Thu Jan 21 2016 01:40:34 GMT+0900 (東京 (標準時)),
    modified: Thu Jan 21 2016 01:42:53 GMT+0900 (東京 (標準時)) },
  { id: '24',
    title: 'cURLのインストール',
    date: Thu Jan 28 2016 01:32:28 GMT+0900 (東京 (標準時)),
    modified: Thu Jan 28 2016 01:36:23 GMT+0900 (東京 (標準時)) },
  { id: '44',
    title: 'これだけは押さえておきたいテクニカル分析6個のポイント',
    date: Wed Feb 03 2016 01:05:01 GMT+0900 (東京 (標準時)),
    modified: Wed Feb 03 2016 01:06:21 GMT+0900 (東京 (標準時)) },
  { id: '101',
    title: '暗号通貨の採掘方式',
    date: Mon Feb 08 2016 16:26:42 GMT+0900 (東京 (標準時)),
    modified: Mon Feb 08 2016 16:26:42 GMT+0900 (東京 (標準時)) },
  { id: '133',
    title: 'JavaのBigIntergerをバイト配列に変換した結果',
    date: Tue Feb 16 2016 23:23:49 GMT+0900 (東京 (標準時)),
    modified: Tue Feb 16 2016 23:23:49 GMT+0900 (東京 (標準時)) },
  { id: '137',
    title: 'JavaでBigIntegerをバイト配列として扱う',
    date: Tue Feb 16 2016 23:30:47 GMT+0900 (東京 (標準時)),
    modified: Tue Feb 16 2016 23:30:47 GMT+0900 (東京 (標準時)) },
  { id: '140',
    title: '暗号通貨開発日誌 1日目',
    date: Wed Feb 17 2016 23:54:57 GMT+0900 (東京 (標準時)),
    modified: Wed Feb 17 2016 23:54:57 GMT+0900 (東京 (標準時)) },
  { id: '159',
    title: '暗号通貨開発日誌 2日目',
    date: Thu Feb 25 2016 23:54:10 GMT+0900 (東京 (標準時)),
    modified: Sat Feb 27 2016 23:18:54 GMT+0900 (東京 (標準時)) },
  { id: '168',
    title: '暗号通貨開発日誌 3日目',
    date: Sat Feb 27 2016 23:20:43 GMT+0900 (東京 (標準時)),
    modified: Sat Feb 27 2016 23:20:43 GMT+0900 (東京 (標準時)) },
  { id: '130',
    title: 'Node.jsでテキストファイルに同期的に書き込む',
    date: Mon Feb 15 2016 23:45:46 GMT+0900 (東京 (標準時)),
    modified: Mon Feb 29 2016 22:54:11 GMT+0900 (東京 (標準時)) } ]

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js