macro.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. from bottle import request, app
  2. from bottle.ext import beaker
  3. from urllib import parse
  4. import time
  5. import datetime
  6. import re
  7. import json
  8. import sqlite3
  9. session_opts = {
  10. 'session.type': 'dbm',
  11. 'session.data_dir': './app_session/',
  12. 'session.auto': 1
  13. }
  14. app = beaker.middleware.SessionMiddleware(app(), session_opts)
  15. def get_time():
  16. now = time.localtime()
  17. date = "%04d-%02d-%02d %02d:%02d:%02d" % (now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec)
  18. return(date)
  19. def ip_check():
  20. session = request.environ.get('beaker.session')
  21. try:
  22. if(session.get('Now') == 1):
  23. ip = format(session['DREAMER'])
  24. else:
  25. if(request.environ.get('HTTP_X_FORWARDED_FOR')):
  26. ip = request.environ.get('HTTP_X_FORWARDED_FOR')
  27. else:
  28. ip = request.environ.get('REMOTE_ADDR')
  29. except:
  30. ip = 'None'
  31. return(ip)
  32. def savemark(data):
  33. data = re.sub("\[date\(now\)\]", get_time(), data)
  34. if(not re.search("\.", ip_check())):
  35. name = '[[사용자:' + ip_check() + '|' + ip_check() + ']]'
  36. else:
  37. name = ip_check()
  38. data = re.sub("\[name\]", name, data)
  39. return(data)
  40. def macro(data):
  41. data = savemark(data)
  42. data = re.sub("\[anchor\((?P<in>[^\[\]]*)\)\]", '<span id="\g<in>"></span>', data)
  43. data = re.sub("\[nicovideo\((?P<in>[^,)]*)(?:(?:,(?:[^,)]*))+)?\)\]", "[[http://embed.nicovideo.jp/watch/\g<in>]]", data)
  44. data = re.sub('\[ruby\((?P<in>[^\,]*)\,\s?(?P<out>[^\)]*)\)\]', '<ruby>\g<in><rp>(</rp><rt>\g<out></rt><rp>)</rp></ruby>', data)
  45. data = re.sub("\[br\]", '<br>', data)
  46. while(1):
  47. com = re.compile("\[youtube\(([^, )]*)(,[^)]*)?\)\]")
  48. m = com.search(data)
  49. if(m):
  50. src = ''
  51. width = '560'
  52. height = '315'
  53. time = '0'
  54. result = m.groups()
  55. if(result[0]):
  56. yudt = re.search('(?:\?v=(.*)|\/([^/?]*)|^([a-zA-Z0-9\-_]*))$', result[0])
  57. if(yudt):
  58. if(yudt.groups()[0]):
  59. src = yudt.groups()[0]
  60. elif(yudt.groups()[1]):
  61. src = yudt.groups()[1]
  62. elif(yudt.groups()[2]):
  63. src = yudt.groups()[2]
  64. else:
  65. src = ''
  66. if(result[1]):
  67. mdata = re.search('width=([0-9%]*)', result[1])
  68. if(mdata):
  69. width = mdata.groups()[0]
  70. mdata = re.search('height=([0-9%]*)', result[1])
  71. if(mdata):
  72. height = mdata.groups()[0]
  73. mdata = re.search('start=([0-9]*)', result[1])
  74. if(mdata):
  75. time = mdata.groups()[0]
  76. data = com.sub('<iframe width="' + width + '" height="' + height + '" src="https://www.youtube.com/embed/' + src + '?start=' + time + '" frameborder="0" allowfullscreen></iframe><br>', data, 1)
  77. else:
  78. break
  79. now_time = get_time()
  80. data = re.sub('\[date\]', now_time, data)
  81. time_data = re.search('^([0-9]{4}-[0-9]{2}-[0-9]{2})', now_time)
  82. time = time_data.groups()
  83. age_data = re.findall('\[age\(([0-9]{4}-[0-9]{2}-[0-9]{2})\)\]', data)
  84. for age in age_data:
  85. old = datetime.datetime.strptime(time[0], '%Y-%m-%d')
  86. will = datetime.datetime.strptime(age, '%Y-%m-%d')
  87. e_data = old - will
  88. data = re.sub('\[age\(([0-9]{4})-([0-9]{2})-([0-9]{2})\)\]', str(int(int(e_data.days) / 365)), data, 1)
  89. dday_data = re.findall('\[dday\(([0-9]{4}-[0-9]{2}-[0-9]{2})\)\]', data)
  90. for dday in dday_data:
  91. old = datetime.datetime.strptime(time[0], '%Y-%m-%d')
  92. will = datetime.datetime.strptime(dday, '%Y-%m-%d')
  93. e_data = old - will
  94. if(re.search('^-', str(e_data.days))):
  95. e_day = str(e_data.days)
  96. else:
  97. e_day = '+' + str(e_data.days)
  98. data = re.sub('\[dday\(([0-9]{4}-[0-9]{2}-[0-9]{2})\)\]', e_day, data, 1)
  99. return(data)