2
0

dump-html.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!/usr/bin/env python3
  2. # -*- coding: UTF-8 -*-
  3. import sys
  4. import argparse
  5. import logging
  6. from common.textutil import ensure_unicode
  7. from wechat.parser import WeChatDBParser
  8. from wechat.res import Resource
  9. from wechat.render import HTMLRender
  10. logger = logging.getLogger("wechat")
  11. def get_args():
  12. parser = argparse.ArgumentParser()
  13. parser.add_argument('name', help='name of contact')
  14. parser.add_argument('--output', help='output html file', default='output.html')
  15. parser.add_argument('--db', default='decoded.db', help='path to decoded database')
  16. parser.add_argument('--avt', default='avatar.index', help='path to avatar.index file')
  17. parser.add_argument('--res', default='resource', help='reseource directory')
  18. args = parser.parse_args()
  19. return args
  20. if __name__ == '__main__':
  21. args = get_args()
  22. name = ensure_unicode(args.name)
  23. output_file = args.output
  24. parser = WeChatDBParser(args.db)
  25. try:
  26. chatid = parser.get_id_by_nickname(name)
  27. except KeyError:
  28. sys.stderr.write(u"Valid Contacts: {}\n".format(
  29. u'\n'.join(parser.all_chat_nicknames)))
  30. sys.stderr.write(u"Couldn't find the chat {}.".format(name));
  31. sys.exit(1)
  32. res = Resource(parser, args.res, args.avt)
  33. msgs = parser.msgs_by_chat[chatid]
  34. logger.info(f"Number of Messages: {len(msgs)}")
  35. assert len(msgs) > 0
  36. render = HTMLRender(parser, res)
  37. htmls = render.render_msgs(msgs)
  38. if len(htmls) == 1:
  39. with open(output_file, 'w') as f:
  40. f.write(htmls[0])
  41. else:
  42. assert output_file.endswith(".html")
  43. basename = output_file[:-5]
  44. for idx, html in enumerate(htmls):
  45. with open(basename + '.{}'.format(idx) + '.html', 'w') as f:
  46. f.write(html)
  47. res.emoji_cache.flush()