コイン3枚法で作ってみました。
解説にリンクが欲しかったので、
tankyuu.net
1percent-better.com
ekikyo.net
ekikyou-dokugaku.com
の4サイトさんの爻辞へのリンクを作ってます。
こんな感じの表示になります。
import datetime import random import re from IPython.display import HTML random.seed() # 本卦 爻 honka_raw = [[random.randint(0,1) for j in range(3)] for i in range(6)] honka = [1 if sum(raw)>=2 else 0 for raw in honka_raw] kou = [n for n, raw in enumerate(honka_raw) if sum(raw)==0 or sum(raw)==3 ] # 之卦 sika = [abs(k-1) if n in kou else k for n,k in enumerate(honka) if len(kou)>0] # 互卦 goka = honka[1:4] + honka[2:5] # 賓卦 hinka = honka[::-1] # 裏卦 rika = [abs(i-1) for i in honka] ke_list = [['01', '43', '14', '34', '09', '05', '26', '11'], ['10', '58', '38', '54', '61', '60', '41', '19'], ['13', '49', '30', '55', '37', '63', '22', '36'], ['25', '17', '21', '51', '42', '03', '27', '24'], ['44', '28', '50', '32', '57', '48', '18', '46'], ['06', '47', '64', '40', '59', '29', '04', '07'], ['33', '31', '56', '62', '53', '39', '52', '15'], ['12', '45', '35', '16', '20', '08', '23', '02']] ke_list2 = [['乾為天', '沢天夬', '火天大有', '雷天大壮', '風天小畜', '水天需', '山天大畜', '地天泰'], ['天沢履', '兌為沢', '火沢睽', '雷沢帰妹', '風沢中孚', '水沢節', '山沢損', '地沢臨'], ['天火同人', '沢火革', '離為火', '雷火豊', '風火家人', '水火既済', '山火賁', '地火明夷'], ['天雷无妄', '沢雷随', '火雷噬嗑', '震為雷', '風雷益', '水雷屯', '山雷頤', '地雷復'], ['天風姤', '沢風大過', '火風鼎', '雷風恒', '巽為風', '水風井', '山風蠱', '地風升'], ['天水訟', '沢水困', '火水未済', '雷水解', '風水渙', '坎為水', '山水蒙', '地水師'], ['天山遯', '沢山咸', '火山旅', '雷山小過', '風山漸', '水山蹇', '艮為山', '地山謙'], ['天地否', '沢地萃', '火地晋', '雷地豫', '風地観', '水地比', '山地剥', '坤為地']] ke_list3 = ['keniten', 'koniti', 'suiraityun', 'sansuimou', 'suitenzyu', 'tensuisyou', 'tisuisi', 'suitihi', 'fuutensyoutiku', 'tentakuri', 'titentai', 'tentihi', 'tenkadouzin', 'katentaiyuu', 'tizanken', 'raitiyo', 'takuraizui', 'sanpuuko', 'titakurin', 'fuutikan', 'karaizeigou', 'sankahi', 'santihaku', 'tiraifuku', 'tenraimumou', 'santentaitiku', 'sanraii', 'takufuutaika', 'kanisui', 'riika', 'takuzankan', 'raifuukou', 'tenzanton', 'raitentaisou', 'katisin', 'tikameii', 'fuukakazin', 'katakukei', 'suizanken', 'raisuikai', 'santakuson', 'fuuraieki', 'takutenkai', 'tenpuukou', 'takutisui', 'tifuusyou', 'takusuikon', 'suifuusei', 'takkakaku', 'kafuutei', 'sinirai', 'gonisan', 'fuuzanzen', 'raitakukimai', 'raikahou', 'kazanryo', 'sonifuu', 'daitaku', 'fuusuikan', 'suitakusetu', 'fuutakutyuufu', 'raizansyouka', 'suikakisei', 'kasuibisei'] ke_list4 = ['36_meii', '9_shouchiku', '5_ju', '33_ton', '62_shoka', '41_son', '8_hi', '29_kan', '26_taichiku', '16_yo', '19_rin', '54_kimai', '3_chun', '15_ken', '11_tai', '47_kon', '43_kai', '20_kan', '34_taiso', '28_taika', '7_shi', '40_kai', '61_chufu', '38_kei', '24_fuku', '46_shou', '39_ken', '6_shou', '44_kou', '45_sui', '50_tei', '60_setsu', '22_hi', '48_sei', '56_ryo', '42_eki', '2_kon', '25_mubo', '59_kan', '53_zen', '4_mou', '32_kou', '12_hi', '1_ken', '55_hou', '51_shin', '64_bisei', '17_zui', '14_taiyu', '13_doujin', '37_kajin', '21_zeigou', '58_da', '35_shin', '49_kaku', '57_son', '30_ri', '18_ko', '23_haku', '63_kisei', '27_i', '31_kan', '10_ri', '52_gon'] hatike=[[1, 1, 1], [1, 1, 0], [1, 0, 1], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 0, 1], [0, 0, 0]] hatike_list=[['乾', 'https://ekikyo.net/8ka/ken.html'], ['兌', 'https://ekikyo.net/8ka/da.html'], ['離', 'https://ekikyo.net/8ka/ri.html'], ['震', 'https://ekikyo.net/8ka/sin.html'], ['巽', 'https://ekikyo.net/8ka/son.html'], ['坎', 'https://ekikyo.net/8ka/kan.html'], ['艮', 'https://ekikyo.net/8ka/gon.html'], ['坤', 'https://ekikyo.net/8ka/kon.html']] def hatikeHTML(list_in): return f'<a href="{hatike_list[hatike.index(list_in[:3])][1]}"target="_blank">{hatike_list[hatike.index(list_in[:3])][0]}</a>',f'<a href="{hatike_list[hatike.index(list_in[3:])][1]}"target="_blank">{hatike_list[hatike.index(list_in[3:])][0]}</a>' def ekikyonet(list_in): return f'<a href="https://ekikyo.net/64ka/{ke_list[hatike.index(list_in[:3])][hatike.index(list_in[3:])]}.html"target="_blank">{ke_list2[hatike.index(list_in[:3])][hatike.index(list_in[3:])]}</a>' def ekikyodokugaku(list_in,k1='',k2=''): return f'<a href="https://ekikyou-dokugaku.com/{ke_list3[int(ke_list[hatike.index(list_in[:3])][hatike.index(list_in[3:])])-1]}{k1}.html"target="_blank">{ke_list2[hatike.index(list_in[:3])][hatike.index(list_in[3:])]}{k2}</a>' def tankyuunet(list_in): return f'<a href="https://tankyuu.net/eki/iching{int(ke_list[hatike.index(list_in[:3])][hatike.index(list_in[3:])])}.html"target="_blank">{ke_list2[hatike.index(list_in[:3])][hatike.index(list_in[3:])]}</a>' def one_percent(list_in): list_out = ke_list[hatike.index(list_in[:3])][hatike.index(list_in[3:])] if list_out[0] == "0": list_out = list_out[1:] for t in ke_list4: if re.match(list_out+"_",t): return f'<a href="https://1percent-better.com/oriental_wisdom/iching/hexagram/{t}/"target="_blank">{ke_list2[hatike.index(list_in[:3])][hatike.index(list_in[3:])]}</a>' if len(kou)>0: koudic={0:'初', 1:'二', 2:'三', 3:'四', 4:'五', 5:'上',} if len(kou)==1: kou_text=f' {koudic[kou[0]]}爻' kou4=kou[0]+1 else: kou_text='' kou4='' kou3='' for s in kou: kou3 = kou3 + koudic.get(s) +" " sikaHTML=f'<tr><td>之卦</td>\ <td>{tankyuunet(sika)}</td>\ <td>{one_percent(sika)}</td>\ <td>{ekikyonet(sika)}</td><td>{kou3}爻変</td>\ <td>{ekikyodokugaku(sika)}</td>\ <td>今後の状態</td>\ <td>{hatikeHTML(sika)[1]}</td><td>{hatikeHTML(sika)[0]}</td></tr>' else: kou='' kou_text='' sikaHTML='' kou4='' sinreki=[str(s).zfill(2) for s in [19,11,34,43,1,44,33,12,20,23,2,24]] kyuureki=(sinreki+sinreki)[1:13] if ke_list[hatike.index(honka[:3])][hatike.index(honka[3:])] in sinreki: syousoku=f'新暦 {1+sinreki.index(ke_list[hatike.index(honka[:3])][hatike.index(honka[3:])])}月、旧暦 {1+kyuureki.index(ke_list[hatike.index(honka[:3])][hatike.index(honka[3:])])}月' else: syousoku='' def printhtml(): display(HTML(f'<h3>{datetime.datetime.now()}</h3>\ <h1>{naiyou}</h1>\ <table>\ <tr>\ <td></td>\ <td>tankyuu.net</td>\ <td>1percent-better.com</td>\ <td>ekikyo.net</td><td></td>\ <td>ekikyou-dokugaku.com</td>\ <td>{syousoku}</td>\ <td>上爻</td><td>下爻</td>\ </tr>\ <tr>\ <td>本卦</td>\ <td>{tankyuunet(honka)}</td>\ <td>{one_percent(honka)}</td>\ <td>{ekikyonet(honka)}</a></td><td>{kou_text}</td>\ <td>{ekikyodokugaku(honka,k1=kou4,k2=kou_text)}</td>\ <td>今の状態</td>\ <td>{hatikeHTML(honka)[1]}</td><td>{hatikeHTML(honka)[0]}</td>\ </tr>\ {sikaHTML}\ <tr>\ <td>互卦</td>\ <td>{tankyuunet(goka)}</td>\ <td>{one_percent(goka)}</td>\ <td>{ekikyonet(goka)}</td><td></td>\ <td>{ekikyodokugaku(goka)}</a></td>\ <td>今の補足</td>\ <td>{hatikeHTML(goka)[1]}</td><td>{hatikeHTML(goka)[0]}</td>\ </tr>\ <tr>\ <td>賓卦</td>\ <td>{tankyuunet(hinka)}</td>\ <td>{one_percent(hinka)}</td>\ <td>{ekikyonet(hinka)}</td><td></td>\ <td>{ekikyodokugaku(hinka)}</td>\ <td>相手の状態</td>\ <td>{hatikeHTML(hinka)[1]}</td><td>{hatikeHTML(hinka)[0]}</td></td>\ </tr>\ <tr><td>裏卦</td>\ <td>{tankyuunet(rika)}</td>\ <td>{one_percent(rika)}</td>\ <td>{ekikyonet(rika)}</td><td></td>\ <td>{ekikyodokugaku(rika)}</a></td>\ <td>裏の意味</td>\ <td>{hatikeHTML(rika)[1]}</td><td>{hatikeHTML(rika)[0]}</td>\ </tr>\ </table>')) # 内容 naiyou="ここに占いたい内容を書く" printhtml()
リンク周りを書くにあたっては selenium でスクレイピングしてきたリンクアドレスをリスト化しております。
いろいろと書き直したらもうちょっとスマートになると思うのですが、とりあえず動くのでよしとして、よくわからない課金?サイトにいかなくて良くなったので良かった良かった。
ちなみに Google Colaboratory で動かしたら、re.match がうんたら言って動かなかったのでオンプレミスで*1
*1:よくわかっていないけれど、オンプレミスって言ってみたかった。