mark.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from .set_mark.namu import namu
  2. from .set_mark.markdown import markdown
  3. import re
  4. import html
  5. import sqlite3
  6. import urllib.parse
  7. import threading
  8. import multiprocessing
  9. def load_conn2(data):
  10. global conn
  11. global curs
  12. conn = data
  13. curs = conn.cursor()
  14. def send_parser(data):
  15. if not re.search('^<br>$', data):
  16. data = html.escape(data)
  17. javascript = re.compile('javascript:', re.I)
  18. data = javascript.sub('', data)
  19. while 1:
  20. re_data = re.search('&lt;a(?: (?:(?:(?!&gt;).)*))?&gt;(?P<in>(?:(?!&lt;).)*)&lt;\/a&gt;', data)
  21. if re_data:
  22. re_data = re_data.groups()[0]
  23. data = re.sub('&lt;a(?: (?:(?:(?!&gt;).)*))?&gt;(?P<in>(?:(?!&lt;).)*)&lt;\/a&gt;', '<a href="/w/' + urllib.parse.quote(re_data).replace('/','%2F') + '">' + re_data + '</a>', data, 1)
  24. else:
  25. break
  26. return data
  27. def plusing(data):
  28. for data_in in data:
  29. curs.execute("select title from back where title = ? and link = ? and type = ?", [data_in[1], data_in[0], data_in[2]])
  30. if not curs.fetchall():
  31. curs.execute("insert into back (title, link, type) values (?, ?, ?)", [data_in[1], data_in[0], data_in[2]])
  32. def namumark(title = '', data = None, num = 0):
  33. curs.execute('select data from other where name = "markup"')
  34. rep_data = curs.fetchall()
  35. if rep_data[0][0] == 'namumark':
  36. data = namu(conn, data, title, num)
  37. elif rep_data[0][0] == 'markdown':
  38. data = markdown(conn, data, title, num)
  39. else:
  40. data = ['', '', []]
  41. if num == 1:
  42. data_num = len(data[2])
  43. data_in_num = int(data_num / multiprocessing.cpu_count())
  44. data_in = []
  45. for i in range(multiprocessing.cpu_count()):
  46. if i != multiprocessing.cpu_count() - 1:
  47. data_in += [data[2][data_in_num * i:data_in_num * (i + 1)]]
  48. else:
  49. data_in += [data[2][data_in_num * i:]]
  50. for data_in_for in data_in:
  51. thread_start = threading.Thread(target = plusing, args = [data_in_for])
  52. thread_start.start()
  53. thread_start.join()
  54. conn.commit()
  55. return data[0] + data[1]