FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

ブログのフィードをmBaaSのデータストアに登録する

f:id:mbaasdevrel:20180517151601p:plain

アプリの中でニュースやお知らせなどのコンテンツを使いたい時はよくあります。そうした時にデータを直接編集するのではなく、ブログを使うことでコンテンツの作成や配信が簡単になります。

アプリからブログを直接読み込むこともできますが、mBaaSを使うことでもっと手軽になります。今回はその方法を紹介します。

mBaaSを使うメリット

アプリのアクセスは各端末単位で行われます。10万ダウンロードされていれば、10万端末からサーバに一気にアクセスされる可能性があります(プッシュ通知を送った直後など特に)。mBaaSを使うことでサーバの負荷を気にせずに運用できるようになります。

また、SDKを提供していますので、アプリ内の他のデータと同じようにフィードを扱えます。フィードはXMLベースなので、他のデータモデルと異なる操作をしなければならないことも少なくありません。そうした使い勝手の違いを吸収してくれます。

Monacaアプリの場合、外部のリソースがCORSによって制御されている場合があります。mBaaSはそういった心配なく、アプリからデータの取得や更新が可能です。

同期スクリプトの作成

※ここでいう「スクリプト」はニフクラ mobile backendのスクリプト機能のことではなく、別途サーバやローカル環境などで動かすためのものとなります。

今回はJavaScript SDKを使いますのでNode.jsで作成します。まずフォルダを作ります。

$ mkdir feed2mbaas
$ cd feed2mbaas

ライブラリをインストールします。

$ npm i feedme -S
$ npm i ncmb -S

スクリプトは次のようになります。まずライブラリの読み込みとNCMBの初期化を行います。

const FeedMe = require('feedme');
const https = require('https');
const url = 'RSSフィード(今回はAtom)のURL';

const applicationKey = 'YOUR_APPLICATION_KEY';
const clientKey = 'YOUR_CLIENT_KEY';
const NCMB = require('ncmb');
const ncmb = new NCMB(applicationKey, clientKey);
const News = ncmb.DataStore('News'); // 取り込み先のデータストアのクラス
https.get(url, (res) => {
  if (res.statusCode != 200) {
    console.error(new Error(`status code ${res.statusCode}`));
    return;
  }
  var parser = new FeedMe();
  parser.on('item', (item) => {
    // 記事アイテムごとに呼ばれます
  });
  res.pipe(parser);
});

記事ごとに呼ばれるitemイベントにて次のように処理をします。まず、すでに登録されていないかチェックします。

News
  .equalTo(url, item.id)
  .fetch()
  .then((data) => {
    // すでにある場合はスキップ
    if (Object.keys(data).length > 0) return;
    
    // 登録処理
  })
  .then(() => {
    console.log('Saved.')
  })
  .catch((e) => console.error(e))

登録処理は次のようになります。データストアはデフォルトですべてユーザ(ログインしていないユーザ含む)に対しても書き込み権限がついてしまいます。そこでAdminロールにのみ書き込み権限を与えています。

itemの形式についてはAtom/RSS1.0/RSS2.0などによって多少形式が異なりますので、自分のRSSフィードに合わせて調整してください。

const acl = new ncmb.Acl;
acl
  .setPublicReadAccess(true)
  .setRoleWriteAccess('Admin', true);
const article = new News;
return article
  .set('title', item.title)
  .set('content', item.content.text)
  .set('url', item.id)
  .set('published', new Date(item.published))
  .set('acl', acl)
  .save()

ここまでの処理でフィードがmBaaSに登録されます。このスクリプトを適宜実行することで、アプリへのお知らせ配信などがとても簡単になるでしょう。

f:id:mbaasdevrel:20180517150530p:plain

まとめ

ブログに限らずCMSなどはRSSフィードを配信しています。そうしたコンテンツは様々な場面で使えるでしょう。mBaaSにデータを登録することで、より使いやすくなります。ぜひアプリ開発で使ってください。

今回のコードは NCMBMania/feed2mbaas: RSSフィードをニフクラ mobile backendに取り込むスクリプト にアップロードしてあります。実装時の参考にしてください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。