# 易經數字占卜Chatbot

2017-03-19
## 前言
根據Simon Sinek的[**黃金圈**][1]理論，從裡到外分為三個階層，
分別是why、how以及what；

why代表領導者或品牌的理念和目標，

how是執行理念的方法與過程，

what則代表最終呈現出的產品以及領導風格。

![alt tag](https://static1.squarespace.com/static/53da8a0fe4b0d5d5360f89d8/t/5435ad12e4b0b2542430f8a0/1412803864140/The-Golden-Circle.jpg?format=750w)

Simon Sinek的名言

>People don't buy what you do; they buy why you do it.


受到Simon Sinek的黃金圈理論所啟發，這次打算從Why開始寫起。

Why 的部分說明為何要做易經數字占卜Chatbot

How 的部分會簡單敘述我的製作過程

What 的部分可以看到我目前的成果


# Why ?
為何要做易經數字占卜Chatbot呢?

這就要從去年輔大校慶前，梅大在臉書上的po文說起
> 今年校慶無法到校見到系友, 特別開放網路占卦三天(12/3-12/5). 若有需要請私訊

然後我錯過了!!!
-----
留言的部分老師提到
> 要排隊了. Po 文後, 一直占卦, 還沒停下來

當時我想 何不做一個占卜的Chatbot呢？

但由於那時的我對易經一無所知，所以果斷放棄 (´_ゝ`)

這學期剛好有修梅大的[易經資訊學][2]，沒想到第一堂課，老師就教了如何用易經占卜

在興趣使然下，我開始了開發易經數字占卜Chatbot的旅程


# How ?

在去年FB Chatbot剛推出的時候，我剛好有走過tutorial，所以我直接有現成的bot可以改改

Server的部分，我將Chatbot部署在[Heroku][4]上

易經資料的部分由於沒有找到現成的Api可以call，所以打算自己硬幹

在網路上有查到[**易學網**][3]有現成的易經今解可以用，

http://www.eee-learning.com/book/neweee01

從網址的結尾發現是有規律的 neweee01到 neweee64，
這樣一來資料的部分就解決一大半了，在來面臨的問題是先天八卦表要怎麼mapping呢？ 我的解法比較暴力xDD

我直接看64掛表來一個個掛寫上對應的數字wwwwww

接著只要照簡易數字卦占卜的規則，就能找出卦來

最後使用Cards的形式附加上易學網的易經今解網址就完成了

但是這樣使用者還是無從得知爻辭的部分要參考哪一個

在設計上還需要再friendly一些，

可是要如何得知道變爻的部分呢？

在看了幾篇易經今解後，我找出了內容上大致上的規律

每一篇大致上都會以經文作為開頭
> 乾，元亨利貞。初九，潛龍勿用。九二，見龍在田，利見大人。九三，君子終日乾乾，夕惕若，厲无咎。九四，或躍在淵，无咎。九五，飛龍在天，利見大人。上九，亢龍有悔。用九，見群龍无首，吉。

從這篇經文中可以看出它的規律可以使用句點將其拆開為
>乾，元亨利貞。

>初九，潛龍勿用。

>九二，見龍在田，利見大人。

>九三，君子終日乾乾，夕惕若，厲无咎。

>九四，或躍在淵，无咎。

>九五，飛龍在天，利見大人。

>上九，亢龍有悔。用九，見群龍无首，吉。

找到規律後，我用python寫了爬蟲，

將易學網上共64卦的易經今解資料給爬下來，並輸出成txt，仔細看了這些爬下來的資料，

發現並不是所有的經文都符合上述的規則 (╯‵□′)╯︵┴─┴

像是
>元亨，利牝馬之貞。君子有攸往，先迷，後得主利。西南得朋，東北喪朋，安貞吉。初六，履霜，堅冰至。六二，直方大，不習无不利。六三，含章可貞，或從王事，无成有終。六四，括囊，无咎无譽。六五，黃裳，元吉。上六，龍戰于野，其血玄黃。用六，利永貞。

拆解完會得到

>元亨，利牝馬之貞。

>君子有攸往，先迷，後得主利。

>西南得朋，東北喪朋，安貞吉。

>初六，履霜，堅冰至。

>六二，直方大，不習无不利。

>六三，含章可貞，或從王事，无成有終。

>六四，括囊，无咎无譽。

>六五，黃裳，元吉。

>上六，龍戰于野，其血玄黃。

>用六，利永貞。

但看似大部分的經文都符合此規則，因此我使用了excel的資料剖析精靈，將txt的資料丟入後，以句號將資料分割成不同的欄位，然後把不合規則的欄位做手動調整，才得出乾淨的資料。

由於這些資料都是只是顯示而已，沒有必要用到資料庫，本來想說直接用js去讀csv，但查了資料感覺好麻煩，還是用json格式最方便，在網路上找了excel to json
的線上工具做了轉換。

最後在js的程式中去讀json的資料。



# What ?
以下截圖為目前成果

![alt tag](https://s19.postimg.cc/b402krsv7/2017_03_20_2_13_51.png)

![alt tag](https://s19.postimg.cc/4wooklx43/螢幕快照_2017_03_20_上午2_40_33.png)

點擊 查看爻辭 會跳轉到 http://www.eee-learning.com/book/neweee33


![alt tag](https://s19.postimg.cc/7bl5is2qr/2017_03_20_11_27_43.png)

點擊 查看卦辭 會跳轉到 http://www.eee-learning.com/simple64/33

# 後記

### 近期 ToDoList

+ 加入使用正規表達式
+ 直接在Cards裡顯示爻辭與卦辭的解釋
+ 加入privacy policy
+ 招募測試人員
+ 提交應用程式進行審查

目前在使用者輸入的部分還沒有做正規表達式的部分，
此外在Cards裡顯示的資訊也不夠完整，我打算再寫爬蟲把
易學網上的資料爬下來進行分析。

在梅大的文中，Alan學長有提到privacy policy的部分，這點要特別注意，由於這個Chatbot有可能變向收集使用者的資料，所以加上privacy policy會比較保險。

在正式上線前會先進行測試，有興趣成為測試者的歡迎mail我  ( **kevinhu@weco.net** )，你們的feedback非常重要!!


## 未來展望
+ 解卦者的串接
+ 加入Payments的功能

目前自己使用這個Chatbot發現有個問題，
卜卦者可能會看不懂爻辭的解釋，

會需要有經驗的解卦人來做進一步的解釋。
像是我上次占卜要不要換駕訓班的教練，

得到的結果是***井卦 (水風井) 的九三***
> 九三，井渫不食，為我心惻。可用汲，王明，並受其福。

>《象》曰：井渫不食，行惻也；求王明，受福也。

> 水井再次湧出甘甜的泉水，可以為人所飲用，然而因為之前水井壞掉，壞名聲在前，所以還不能讓人所接納。若有英明而有眼光的大王來取用，眾人也可以同享福報。

> 井渫不食，為我心惻：井水清澈乾淨，卻沒人飲用，讓人感到傷心。比喻君子修德有成，但仍懷才不遇，道德不行。渫，音謝，除去污泥，說明井水已經乾淨清澈，可以飲用。心惻，傷心。惻，傷心的樣子。

> 王明，並受其福：君王英明，有智慧，眾人將會因此而得到其福祉。有智慧的英明君王，當能選用人才，因此而福惠人民。

看完爻辭後，發現還是霧煞煞 ┐(´д`)┌

因此未來如果有機會的話，會想去串接一些有經驗的解卦人，

來為這個服務加值，同時導入[Payments][5]的功能，讓這個Chatbot的更加完善。

[1]:http://tedxtaipei.com/articles/simon_sinek_how_great_leaders_inspire_action-2/

[2]: https://sls.weco.net/s17-IChing

[3]: http://www.eee-learning.com

[4]: https://www.heroku.com/

[5]:https://developers.facebook.com/docs/messenger-platform/complete-guide/payments
