SlideShare a Scribd company logo
Post by Email
for Pulse CMS
2016/12/16
at Pulse CMS Meetup in Osaka
刀祢邦芳(Tone, Kuniyoshi)
自己紹介
● ITエンジニア歴42年
○ IBMメインフレーム→Windows→UNIX→Web
● 現在の仕事ではOSSと安価な商用ソフトがメイン
○ Tableau
○ Office365, Power BI with Azure(安価ではないが・・)
○ Pentaho (Spoon)
○ Zabbix & OpManager
○ PHPRunner
○ WinAutomation
○ Redmine, Magento など少々 ● CMS遍歴
○ Zope & Plone
○ XOOPS
○ Nucleus
○ WordPress
○ Drupal 6, 7, 8
○ Gatsby
紹介記事 https://goo.gl/axUFsD 
● そして・・・Pulse CMS
● 言語遍歴
○ Powershell, bash, awk ...
○ JavaScript, Google Apps Script
○ COBOL, FORTRAN, PL/1, Basic
○ マクロ・アセンブラ(6502, System/370)
○ Elixir 勉強中
○ PHPは見よう見まね
○ Java,C,C#,VB,PHP,ruby,python,Perlはあん
まり使ってません
● JS Framework遍歴
○ Meteor
○ React
○ Riot 勉強中
● DBMS遍歴
○ Sybase
○ MS SQL
○ MySQL
○ Snowflake
やりたいこと
● Drupal 7で作った同窓会掲示板サイトの移植
○ メンバー個人のアカウントでログインして投稿・閲覧する人はごく少数
■ ログインの殆どがゲストアカウントで閲覧のみ
○ だから、メール投稿&新着配信機能も追加(これが大変だった)
○ 今もバグがあるけど修正は困難だし、 Drupalのアップデートも頻繁で面倒
● 結局メール投稿&配信がメインでおまけとして過去ログの閲覧検索ができればよ
い
○ 保守のためログインするのは管理者だけ
○ その他のメンバーは全員共通の Basic認証でも可
○ セキュリティが強固な静的サイトに近いものを公開したい
○ メールを記事に変換し易いように1記事1ファイルがよい
● Pulse CMSがぴったり
○ 完全なGeneratorの「Gatsby」も面白そうだがReactベースなのでカスタマイズは難しそう
本番システム構成
● Windows 2012 Server on VPS(by Contabo https://contabo.com )
○ 全員65才以上の同窓生のため私以外に Linuxを使いこなせる人は見当たらない
○ Windows PCの延長としてRemote Desktopで操作できるサーバーなら誰かに引き継げる
● Bitnami WAMP Stack (MySQLは不要だが) + Pulse CMS V4.6
● Node.js V6.6
○ 勉強を兼ねて、受信メールからブログファイルの作成に使用
● Talend Open Studio(無償)
○ GUIで種々のバッチ処理が作成できるので保守しやすい
○ まずはメール送信や Google SpreadsheetのAPIを使う予定
○ 将来の引き継ぎを考えて今後は極力これを使用する
★でも本当はNode.js版をGithub公開したい(将来の夢)
・4 core
・12 GB RAM
・300GB SSD
・100 Mbps
・14.98 € /Month
デモ
● 本日はlocalhostでデモ
● Blog 表示 http://localhost:8081/pulse/blog
● Admin画面 http://localhost:8081/pulse/admin
● 受信メールを未読に設定
● 受信用バッチの起動
○ もう一度起動すると未読がゼロなので何も処理されない
● Blogに1件新規投稿されている
処理の流れ「未読メールの取得と投稿」
● 「inbox」モジュールを用いて、
○ 受信ボックスから未読メールを 1件だけ取得し、メールのソースをファイル出力
○ そのメールを既読とする
● 「mailparser」モジュールを用いて、
○ メールソースを解析
○ 件名、送信日付、送信者アドレス、本文( HTMLまたはTEXT)、添付ファイルを取得
● Pulse CMSのブログファイルのテンプレートを読込む
○ テンプレート内のキーワードを件名などで置換したテキストを Pulse CMSのcontent/blogに書き込
む
○ 添付ファイルは別途保存し、リンクを本文の末尾に追加する(これは現在未完)
● Pulse CMSは追加されたファイルをすぐに認識し、ページリフレッシュでブログの
ページに表示してくれる。本文はHTMLでもよい。
<素晴らしい!>
inbox による処理
● user & passwordを与えてIMAPサーバ(ここではGmail)に接続
○ でもuser & passwordをソースに埋め込むのは良くないので
● searchメソッドで未読メールのUIDを取得
● fetchdataで該当UIDのソースを取得
● ソースをmail.txtに書き込む
○ ファイルを経由せずブログ投稿まで一気に処理もできるが単体テストしやすいようにファイルをインタ
フェースとする
(Node.jsは基本が非同期なのでこれらを順番に同期して処理するのが実は面倒です)
var client = inbox.createConnection(false, 'imap.gmail.com', { // gmail接続
secureConnection: true,
auth: {
user: process.argv[2], // node実行時の第2パラメータ
pass: process.argv[3] // 第3パラメータ
}
});
ブログ用テンプレート
#title#
#date#
#datetime#
投稿者 #from#
#body#
mailparserによる処理
● テンプレートblogtemplate.htmlをstringに読込む
● mail.txtにあるメールのソースをstringに読込み、
mailparserオブジェクトに渡し、解析させる
● 解析終了時に作成されるmail_object内の、
○ subject, headers.date, headers.fromをテンプレート内の#title#などの文字列と置換
○ mail_object.htmlをテンプレート内の#body#と置換
(undefinedならばmail_object.textを使用)
● 作成されたブログ用文字列をPulseのcontent/blogフォルダーに出力
○ ファイル名は
「プレフィックス」+「連番」+yyyymmdd-hhmmss.txt
○ 最終的にはこのプレフィックスをキーにして投稿通知メールへの返信をコメントとして追記する予定
苦労&工夫したところ
● ブログに投稿日時まで表示させる
○ config.phpを修正しデフォルトの日付を非表示にする
○ テンプレートの#datetime#文字列をyyyy/mm/dd hh:mmで置換
● Node.jsでの同期処理
○ 単純に順番に処理を実行していくのが実は面倒
● Mail Parserでのiso-2022対応
○ 簡単な対応法があるので今後対応
// BLOG
$result_per_page = 5; // Blog posts per page
$disqus_comments = false; // Turn on/off blog comments (Disqus)
$disqus_shortname = "sample-name"; // Your disqus account name
// $date_format = "M j, Y"; // More: https://php.net/manual/en/function.date.php
$date_format = " "; // More: https://php.net/manual/en/function.date.php // date is not displayed
今後の予定
● 投稿者のメールアドレスのチェック
○ 名簿データベース(Google Spreadsheet使用)との存在チェック
● 投稿メールをメンバーに送信する
● リプライをコメントと見なして本文に追加する
● URLをファイル名のみにする(このカスタマイズ機能追加希望)
○ 日本語の件名がURLにあるのは若干不安
○ ファイル名に時分秒まで持たせるので重複はまず発生しない
● 別途目次ページを作成する
○ Pulse CMSがページナビゲーション対応しても数百ページのナビゲーションは大変
○ それよりは数百行が 1ページになった目次ページを作る
○ 1ページにするとタイトルや日付検索はとりあえずブラウザで可能になる
● 全文検索
● 一番大変な既存のサイトからの移行
完

More Related Content

What's hot (7)

PPTX
Slackって何ができるんだっけ
Quikky
 
PDF
WP Performance Optimization
masaaki komori
 
PDF
apachehereというPHPのBuiltin Serverっぽいやつをつくった
Junichi Ishida
 
PPTX
Lesson2 サイト定義
s-karasawa
 
PDF
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
Enpel
 
PDF
Nora mark 2014-02-13
Satoshi KOJIMA
 
PDF
2 TomcatによるWebアプリケーションサーバ構築 第3章 Apacheの構成
Enpel
 
Slackって何ができるんだっけ
Quikky
 
WP Performance Optimization
masaaki komori
 
apachehereというPHPのBuiltin Serverっぽいやつをつくった
Junichi Ishida
 
Lesson2 サイト定義
s-karasawa
 
2 TomcatによるWebアプリケーションサーバ構築 第1章 Tomcatのインストールと設定
Enpel
 
Nora mark 2014-02-13
Satoshi KOJIMA
 
2 TomcatによるWebアプリケーションサーバ構築 第3章 Apacheの構成
Enpel
 

Viewers also liked (20)

PDF
2016年を振り返る
Kuniyoshi Tone
 
PDF
第二回 クラウドサーバー管理者若葉の会
masayoshi shiraishi
 
PDF
Economic performance management approach, itc ltd sustainability report 2006
varsha nihanth lade
 
PDF
死闘!Og mailinglist
Kuniyoshi Tone
 
PPTX
Meteor kitchen で楽々ウェブアプリ開発
Junji Yamada
 
PPT
Drupal8を体験しよう Drupal8 & Docker
惠 紀野
 
PDF
What's Drupal & Drupal as a Employee App Platform
惠 紀野
 
PDF
Drupal補完計画
Kuniyoshi Tone
 
PDF
Recovery: Job Growth and Education Requirements Through 2020
CEW Georgetown
 
PDF
African Americans: College Majors and Earnings
CEW Georgetown
 
PDF
The Online College Labor Market
CEW Georgetown
 
PDF
Game Based Learning for Language Learners
Shelly Sanchez Terrell
 
PDF
Teaching Students with Emojis, Emoticons, & Textspeak
Shelly Sanchez Terrell
 
PDF
What's Trending in Talent and Learning for 2016?
Skillsoft
 
PDF
SXSW 2016: The Need To Knows
Ogilvy Consulting
 
PDF
Digitized Student Development, Social Media, and Identity
Paul Brown
 
PDF
GAME ON! Integrating Games and Simulations in the Classroom
Brian Housand
 
PPTX
Connecting With the Disconnected
Chris Wejr
 
PDF
Responding to Academically Distressed Students
Mr. Ronald Quileste, PhD
 
PDF
Study: The Future of VR, AR and Self-Driving Cars
LinkedIn
 
2016年を振り返る
Kuniyoshi Tone
 
第二回 クラウドサーバー管理者若葉の会
masayoshi shiraishi
 
Economic performance management approach, itc ltd sustainability report 2006
varsha nihanth lade
 
死闘!Og mailinglist
Kuniyoshi Tone
 
Meteor kitchen で楽々ウェブアプリ開発
Junji Yamada
 
Drupal8を体験しよう Drupal8 & Docker
惠 紀野
 
What's Drupal & Drupal as a Employee App Platform
惠 紀野
 
Drupal補完計画
Kuniyoshi Tone
 
Recovery: Job Growth and Education Requirements Through 2020
CEW Georgetown
 
African Americans: College Majors and Earnings
CEW Georgetown
 
The Online College Labor Market
CEW Georgetown
 
Game Based Learning for Language Learners
Shelly Sanchez Terrell
 
Teaching Students with Emojis, Emoticons, & Textspeak
Shelly Sanchez Terrell
 
What's Trending in Talent and Learning for 2016?
Skillsoft
 
SXSW 2016: The Need To Knows
Ogilvy Consulting
 
Digitized Student Development, Social Media, and Identity
Paul Brown
 
GAME ON! Integrating Games and Simulations in the Classroom
Brian Housand
 
Connecting With the Disconnected
Chris Wejr
 
Responding to Academically Distressed Students
Mr. Ronald Quileste, PhD
 
Study: The Future of VR, AR and Self-Driving Cars
LinkedIn
 
Ad

Similar to Post by email for pulse cms (7)

PPTX
Fluxflex meetup 2011 in Tokyo
Kyosuke Inoue
 
PDF
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
Masayuki Ishikawa
 
PPTX
fluxflex meetup in Tokyo
Kyosuke Inoue
 
PDF
ヤフー発のメッセージキュー「Pulsar」のご紹介
Yahoo!デベロッパーネットワーク
 
PDF
ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118
Nozomi Kurihara
 
PPTX
プラグイン作者脳になろう ~実案件で学ぶプラグイン開発フロー~
Takeuchi Yuichi
 
PDF
Patch101
Tetsuyuki Kobayashi
 
Fluxflex meetup 2011 in Tokyo
Kyosuke Inoue
 
サンタクロースを支えるIT技術 @M_Ishikawa #yapcasia
Masayuki Ishikawa
 
fluxflex meetup in Tokyo
Kyosuke Inoue
 
ヤフー発のメッセージキュー「Pulsar」のご紹介
Yahoo!デベロッパーネットワーク
 
ヤフー発のメッセージキュー 「Pulsar」のご紹介@jjug ccc 20171118
Nozomi Kurihara
 
プラグイン作者脳になろう ~実案件で学ぶプラグイン開発フロー~
Takeuchi Yuichi
 
Ad

Post by email for pulse cms

  • 1. Post by Email for Pulse CMS 2016/12/16 at Pulse CMS Meetup in Osaka 刀祢邦芳(Tone, Kuniyoshi)
  • 2. 自己紹介 ● ITエンジニア歴42年 ○ IBMメインフレーム→Windows→UNIX→Web ● 現在の仕事ではOSSと安価な商用ソフトがメイン ○ Tableau ○ Office365, Power BI with Azure(安価ではないが・・) ○ Pentaho (Spoon) ○ Zabbix & OpManager ○ PHPRunner ○ WinAutomation ○ Redmine, Magento など少々 ● CMS遍歴 ○ Zope & Plone ○ XOOPS ○ Nucleus ○ WordPress ○ Drupal 6, 7, 8 ○ Gatsby 紹介記事 https://goo.gl/axUFsD  ● そして・・・Pulse CMS ● 言語遍歴 ○ Powershell, bash, awk ... ○ JavaScript, Google Apps Script ○ COBOL, FORTRAN, PL/1, Basic ○ マクロ・アセンブラ(6502, System/370) ○ Elixir 勉強中 ○ PHPは見よう見まね ○ Java,C,C#,VB,PHP,ruby,python,Perlはあん まり使ってません ● JS Framework遍歴 ○ Meteor ○ React ○ Riot 勉強中 ● DBMS遍歴 ○ Sybase ○ MS SQL ○ MySQL ○ Snowflake
  • 3. やりたいこと ● Drupal 7で作った同窓会掲示板サイトの移植 ○ メンバー個人のアカウントでログインして投稿・閲覧する人はごく少数 ■ ログインの殆どがゲストアカウントで閲覧のみ ○ だから、メール投稿&新着配信機能も追加(これが大変だった) ○ 今もバグがあるけど修正は困難だし、 Drupalのアップデートも頻繁で面倒 ● 結局メール投稿&配信がメインでおまけとして過去ログの閲覧検索ができればよ い ○ 保守のためログインするのは管理者だけ ○ その他のメンバーは全員共通の Basic認証でも可 ○ セキュリティが強固な静的サイトに近いものを公開したい ○ メールを記事に変換し易いように1記事1ファイルがよい ● Pulse CMSがぴったり ○ 完全なGeneratorの「Gatsby」も面白そうだがReactベースなのでカスタマイズは難しそう
  • 4. 本番システム構成 ● Windows 2012 Server on VPS(by Contabo https://contabo.com ) ○ 全員65才以上の同窓生のため私以外に Linuxを使いこなせる人は見当たらない ○ Windows PCの延長としてRemote Desktopで操作できるサーバーなら誰かに引き継げる ● Bitnami WAMP Stack (MySQLは不要だが) + Pulse CMS V4.6 ● Node.js V6.6 ○ 勉強を兼ねて、受信メールからブログファイルの作成に使用 ● Talend Open Studio(無償) ○ GUIで種々のバッチ処理が作成できるので保守しやすい ○ まずはメール送信や Google SpreadsheetのAPIを使う予定 ○ 将来の引き継ぎを考えて今後は極力これを使用する ★でも本当はNode.js版をGithub公開したい(将来の夢) ・4 core ・12 GB RAM ・300GB SSD ・100 Mbps ・14.98 € /Month
  • 5. デモ ● 本日はlocalhostでデモ ● Blog 表示 http://localhost:8081/pulse/blog ● Admin画面 http://localhost:8081/pulse/admin ● 受信メールを未読に設定 ● 受信用バッチの起動 ○ もう一度起動すると未読がゼロなので何も処理されない ● Blogに1件新規投稿されている
  • 6. 処理の流れ「未読メールの取得と投稿」 ● 「inbox」モジュールを用いて、 ○ 受信ボックスから未読メールを 1件だけ取得し、メールのソースをファイル出力 ○ そのメールを既読とする ● 「mailparser」モジュールを用いて、 ○ メールソースを解析 ○ 件名、送信日付、送信者アドレス、本文( HTMLまたはTEXT)、添付ファイルを取得 ● Pulse CMSのブログファイルのテンプレートを読込む ○ テンプレート内のキーワードを件名などで置換したテキストを Pulse CMSのcontent/blogに書き込 む ○ 添付ファイルは別途保存し、リンクを本文の末尾に追加する(これは現在未完) ● Pulse CMSは追加されたファイルをすぐに認識し、ページリフレッシュでブログの ページに表示してくれる。本文はHTMLでもよい。 <素晴らしい!>
  • 7. inbox による処理 ● user & passwordを与えてIMAPサーバ(ここではGmail)に接続 ○ でもuser & passwordをソースに埋め込むのは良くないので ● searchメソッドで未読メールのUIDを取得 ● fetchdataで該当UIDのソースを取得 ● ソースをmail.txtに書き込む ○ ファイルを経由せずブログ投稿まで一気に処理もできるが単体テストしやすいようにファイルをインタ フェースとする (Node.jsは基本が非同期なのでこれらを順番に同期して処理するのが実は面倒です) var client = inbox.createConnection(false, 'imap.gmail.com', { // gmail接続 secureConnection: true, auth: { user: process.argv[2], // node実行時の第2パラメータ pass: process.argv[3] // 第3パラメータ } });
  • 9. mailparserによる処理 ● テンプレートblogtemplate.htmlをstringに読込む ● mail.txtにあるメールのソースをstringに読込み、 mailparserオブジェクトに渡し、解析させる ● 解析終了時に作成されるmail_object内の、 ○ subject, headers.date, headers.fromをテンプレート内の#title#などの文字列と置換 ○ mail_object.htmlをテンプレート内の#body#と置換 (undefinedならばmail_object.textを使用) ● 作成されたブログ用文字列をPulseのcontent/blogフォルダーに出力 ○ ファイル名は 「プレフィックス」+「連番」+yyyymmdd-hhmmss.txt ○ 最終的にはこのプレフィックスをキーにして投稿通知メールへの返信をコメントとして追記する予定
  • 10. 苦労&工夫したところ ● ブログに投稿日時まで表示させる ○ config.phpを修正しデフォルトの日付を非表示にする ○ テンプレートの#datetime#文字列をyyyy/mm/dd hh:mmで置換 ● Node.jsでの同期処理 ○ 単純に順番に処理を実行していくのが実は面倒 ● Mail Parserでのiso-2022対応 ○ 簡単な対応法があるので今後対応 // BLOG $result_per_page = 5; // Blog posts per page $disqus_comments = false; // Turn on/off blog comments (Disqus) $disqus_shortname = "sample-name"; // Your disqus account name // $date_format = "M j, Y"; // More: https://php.net/manual/en/function.date.php $date_format = " "; // More: https://php.net/manual/en/function.date.php // date is not displayed
  • 11. 今後の予定 ● 投稿者のメールアドレスのチェック ○ 名簿データベース(Google Spreadsheet使用)との存在チェック ● 投稿メールをメンバーに送信する ● リプライをコメントと見なして本文に追加する ● URLをファイル名のみにする(このカスタマイズ機能追加希望) ○ 日本語の件名がURLにあるのは若干不安 ○ ファイル名に時分秒まで持たせるので重複はまず発生しない ● 別途目次ページを作成する ○ Pulse CMSがページナビゲーション対応しても数百ページのナビゲーションは大変 ○ それよりは数百行が 1ページになった目次ページを作る ○ 1ページにするとタイトルや日付検索はとりあえずブラウザで可能になる ● 全文検索 ● 一番大変な既存のサイトからの移行
  • 12.