途中でめんどくさくなったので、コードだけ。
package.json
{
"name": "wpapi-elastic",
"version": "1.0.0",
"description": "",
"main": "handler.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"local": "./node_modules/serverless/bin/serverless invoke local -f hello",
},
"keywords": [],
"author": "",
"license": "MIT",
"dependencies": {
"lodash": "^4.17.4",
"striptags": "^3.0.1",
"superagent": "^3.5.2",
"wpapi": "^1.1.2"
},
"devDependencies": {
"serverless": "^1.19.0"
}
}
serverless.yml
service: oreyome-elastic
provider:
name: aws
runtime: nodejs6.10
functions:
hello:
handler: handler.hello
handler.js
configの値を適当に変えて使ってください。
'use strict';
const _ = require('lodash');
const WPAPI = require('wpapi');
const striptags = require('striptags');
const request = require('superagent');
const config = {
site: 'example-com',
url: 'https://example.com/',
esUrl: 'https://example.us-east-1.es.amazonaws.com',
};
function put(url, body = {}) {
return new Promise((resolve, reject) => {
return request.put(url)
.send(body)
.end((err, response) => {
if (err) {
console.log(err);
reject(err);
} else if (response.status > 299) {
reject(response);
} else {
resolve(response);
}
});
});
}
function doPost(post) {
const url = `${config.esUrl}/${config.site}/${post.type}/${post.id}`;
return put(url, post);
}
module.exports.hello = (event, context, callback) => {
const apiPromise = WPAPI.discover(config.url);
apiPromise.then(function( site ) {
return site.posts().perPage( 100 )
}).then(function( posts ) {
const parsed = _.map(posts, function (value, key) {
const content = value.content.rendered.split('<!-- Begin Yuzo -->');
value.content.rendered = content[0];
const data = {
title: striptags(value.title.rendered),
content: striptags(content[0]),
id: value.id,
date: value.date,
type: value.type
}
return data;
});
return parsed;
}).then(function(posts) {
return Promise.all(posts.map(doPost))
}).then(function(json) {
callback(null, json);
}).catch ((err) => {
callback(err);
});
};
やるつもりだったこと
- WordPressのコンテンツの分析 -> kibanaでのビジュアライズ方法がよくわからなかった
- Serverless Frameworkでのバッチインポート -> kibanaでめげたから後回し
- config系をserverless.ymlにうつす -> kibanaでめげたから後回し