SlideShare a Scribd company logo
1 of 12
Download to read offline
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

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

What's hot (7)

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

Viewers also liked

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

Viewers also liked (20)

2016年を振り返る
2016年を振り返る2016年を振り返る
2016年を振り返る
 
第二回 クラウドサーバー管理者若葉の会
第二回 クラウドサーバー管理者若葉の会第二回 クラウドサーバー管理者若葉の会
第二回 クラウドサーバー管理者若葉の会
 
Economic performance management approach, itc ltd sustainability report 2006
Economic performance  management approach, itc ltd   sustainability report 2006Economic performance  management approach, itc ltd   sustainability report 2006
Economic performance management approach, itc ltd sustainability report 2006
 
死闘!Og mailinglist
死闘!Og mailinglist死闘!Og mailinglist
死闘!Og mailinglist
 
Meteor kitchen で楽々ウェブアプリ開発
Meteor kitchen で楽々ウェブアプリ開発Meteor kitchen で楽々ウェブアプリ開発
Meteor kitchen で楽々ウェブアプリ開発
 
Drupal8を体験しよう Drupal8 & Docker
Drupal8を体験しよう Drupal8 & DockerDrupal8を体験しよう Drupal8 & Docker
Drupal8を体験しよう Drupal8 & Docker
 
What's Drupal & Drupal as a Employee App Platform
What's Drupal & Drupal as a Employee App PlatformWhat's Drupal & Drupal as a Employee App Platform
What's Drupal & Drupal as a Employee App Platform
 
Drupal補完計画
Drupal補完計画Drupal補完計画
Drupal補完計画
 
Recovery: Job Growth and Education Requirements Through 2020
Recovery: Job Growth and Education Requirements Through 2020Recovery: Job Growth and Education Requirements Through 2020
Recovery: Job Growth and Education Requirements Through 2020
 
African Americans: College Majors and Earnings
African Americans: College Majors and Earnings African Americans: College Majors and Earnings
African Americans: College Majors and Earnings
 
The Online College Labor Market
The Online College Labor MarketThe Online College Labor Market
The Online College Labor Market
 
Game Based Learning for Language Learners
Game Based Learning for Language LearnersGame Based Learning for Language Learners
Game Based Learning for Language Learners
 
Teaching Students with Emojis, Emoticons, & Textspeak
Teaching Students with Emojis, Emoticons, & TextspeakTeaching Students with Emojis, Emoticons, & Textspeak
Teaching Students with Emojis, Emoticons, & Textspeak
 
What's Trending in Talent and Learning for 2016?
What's Trending in Talent and Learning for 2016?What's Trending in Talent and Learning for 2016?
What's Trending in Talent and Learning for 2016?
 
SXSW 2016: The Need To Knows
SXSW 2016: The Need To KnowsSXSW 2016: The Need To Knows
SXSW 2016: The Need To Knows
 
Digitized Student Development, Social Media, and Identity
Digitized Student Development, Social Media, and IdentityDigitized Student Development, Social Media, and Identity
Digitized Student Development, Social Media, and Identity
 
GAME ON! Integrating Games and Simulations in the Classroom
GAME ON! Integrating Games and Simulations in the Classroom GAME ON! Integrating Games and Simulations in the Classroom
GAME ON! Integrating Games and Simulations in the Classroom
 
Connecting With the Disconnected
Connecting With the DisconnectedConnecting With the Disconnected
Connecting With the Disconnected
 
Responding to Academically Distressed Students
Responding to Academically Distressed StudentsResponding to Academically Distressed Students
Responding to Academically Distressed Students
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 

Similar to Post by email for pulse cms

Intalio Cloud Workshop
Intalio Cloud Workshop Intalio Cloud Workshop
Intalio Cloud Workshop Daisuke Sugai
 
Powershell勉強会 v4 (もっと新しいバージョンがあります。)
Powershell勉強会 v4 (もっと新しいバージョンがあります。)Powershell勉強会 v4 (もっと新しいバージョンがあります。)
Powershell勉強会 v4 (もっと新しいバージョンがあります。)Tetsu Yama
 
Contao Open Source CMS / Contao 3.3を越えて
Contao Open Source CMS / Contao 3.3を越えてContao Open Source CMS / Contao 3.3を越えて
Contao Open Source CMS / Contao 3.3を越えてTakahiro Kambe
 
MTDDC Tokyo テーマ編 プレゼン資料
MTDDC Tokyo テーマ編 プレゼン資料MTDDC Tokyo テーマ編 プレゼン資料
MTDDC Tokyo テーマ編 プレゼン資料Toshihito Gamo
 
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」ericsagnes
 
panagenda MarvelClientとケートリック XPages マスターテンプレートのご紹介
panagenda MarvelClientとケートリック XPages マスターテンプレートのご紹介panagenda MarvelClientとケートリック XPages マスターテンプレートのご紹介
panagenda MarvelClientとケートリック XPages マスターテンプレートのご紹介Mitsuru Katoh
 
Powershell基礎_20180521用
Powershell基礎_20180521用Powershell基礎_20180521用
Powershell基礎_20180521用Tetsu Yama
 
Windows Server 2016 Essentials TP4の強化ポイントと PowerShellの使いどころ
Windows Server 2016 Essentials TP4の強化ポイントとPowerShellの使いどころWindows Server 2016 Essentials TP4の強化ポイントとPowerShellの使いどころ
Windows Server 2016 Essentials TP4の強化ポイントと PowerShellの使いどころSatoru Nasu
 
SQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP OverviewSQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP OverviewMasayuki Ozawa
 
OCaml でデータ分析
OCaml でデータ分析OCaml でデータ分析
OCaml でデータ分析Akinori Abe
 
ユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイントユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイントMasaki NIWA
 
Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Kazuto Kusama
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門sandai
 
Xml rpc を使ってブログ投稿
Xml rpc を使ってブログ投稿Xml rpc を使ってブログ投稿
Xml rpc を使ってブログ投稿Fumito Mizuno
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用Shinya Okano
 
Sinatraアプリをherokuにアップ
SinatraアプリをherokuにアップSinatraアプリをherokuにアップ
SinatraアプリをherokuにアップHiroshi Oyamada
 
Xoopsサイト制作セミナー 20120922
Xoopsサイト制作セミナー 20120922Xoopsサイト制作セミナー 20120922
Xoopsサイト制作セミナー 20120922Toshihiro Takehara
 
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota WatabeInsight Technology, Inc.
 

Similar to Post by email for pulse cms (20)

Intalio Cloud Workshop
Intalio Cloud Workshop Intalio Cloud Workshop
Intalio Cloud Workshop
 
Powershell勉強会 v4 (もっと新しいバージョンがあります。)
Powershell勉強会 v4 (もっと新しいバージョンがあります。)Powershell勉強会 v4 (もっと新しいバージョンがあります。)
Powershell勉強会 v4 (もっと新しいバージョンがあります。)
 
Webサーバ、HTML
Webサーバ、HTMLWebサーバ、HTML
Webサーバ、HTML
 
Contao Open Source CMS / Contao 3.3を越えて
Contao Open Source CMS / Contao 3.3を越えてContao Open Source CMS / Contao 3.3を越えて
Contao Open Source CMS / Contao 3.3を越えて
 
MTDDC Tokyo テーマ編 プレゼン資料
MTDDC Tokyo テーマ編 プレゼン資料MTDDC Tokyo テーマ編 プレゼン資料
MTDDC Tokyo テーマ編 プレゼン資料
 
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」
 
panagenda MarvelClientとケートリック XPages マスターテンプレートのご紹介
panagenda MarvelClientとケートリック XPages マスターテンプレートのご紹介panagenda MarvelClientとケートリック XPages マスターテンプレートのご紹介
panagenda MarvelClientとケートリック XPages マスターテンプレートのご紹介
 
Powershell基礎_20180521用
Powershell基礎_20180521用Powershell基礎_20180521用
Powershell基礎_20180521用
 
Windows Server 2016 Essentials TP4の強化ポイントと PowerShellの使いどころ
Windows Server 2016 Essentials TP4の強化ポイントとPowerShellの使いどころWindows Server 2016 Essentials TP4の強化ポイントとPowerShellの使いどころ
Windows Server 2016 Essentials TP4の強化ポイントと PowerShellの使いどころ
 
WindowsでMySQL入門
WindowsでMySQL入門WindowsでMySQL入門
WindowsでMySQL入門
 
SQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP OverviewSQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP Overview
 
OCaml でデータ分析
OCaml でデータ分析OCaml でデータ分析
OCaml でデータ分析
 
ユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイントユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイント
 
Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
Xml rpc を使ってブログ投稿
Xml rpc を使ってブログ投稿Xml rpc を使ってブログ投稿
Xml rpc を使ってブログ投稿
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
 
Sinatraアプリをherokuにアップ
SinatraアプリをherokuにアップSinatraアプリをherokuにアップ
Sinatraアプリをherokuにアップ
 
Xoopsサイト制作セミナー 20120922
Xoopsサイト制作セミナー 20120922Xoopsサイト制作セミナー 20120922
Xoopsサイト制作セミナー 20120922
 
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
 

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.