Implement comment convert for Acfun
This commit is contained in:
		
							parent
							
								
									9101a1fe1d
								
							
						
					
					
						commit
						9773269ece
					
				
					 1 changed files with 22 additions and 5 deletions
				
			
		
							
								
								
									
										27
									
								
								convert.py
									
										
									
									
									
								
							
							
						
						
									
										27
									
								
								convert.py
									
										
									
									
									
								
							|  | @ -2,6 +2,7 @@ | ||||||
| 
 | 
 | ||||||
| import argparse | import argparse | ||||||
| import colorsys | import colorsys | ||||||
|  | import json | ||||||
| import logging | import logging | ||||||
| import math | import math | ||||||
| import sys | import sys | ||||||
|  | @ -82,7 +83,7 @@ def WriteComment(f, c, row, width, height, bottomReserved, fontsize, lifetime): | ||||||
| def ProbeCommentFormat(f): | def ProbeCommentFormat(f): | ||||||
|     f.seek(0) |     f.seek(0) | ||||||
|     tmp = f.read(1) |     tmp = f.read(1) | ||||||
|     if tmp == '{': |     if tmp == '[': | ||||||
|         f.seek(0) |         f.seek(0) | ||||||
|         return 'Acfun' |         return 'Acfun' | ||||||
|     elif tmp == '<': |     elif tmp == '<': | ||||||
|  | @ -106,7 +107,6 @@ def ReadCommentsNiconico(f, fontsize): | ||||||
|     'Output format: [(timeline, timestamp, no, comment, pos, color, size, height, width)]' |     'Output format: [(timeline, timestamp, no, comment, pos, color, size, height, width)]' | ||||||
|     dom = xml.dom.minidom.parse(f) |     dom = xml.dom.minidom.parse(f) | ||||||
|     comment_element = dom.getElementsByTagName('chat') |     comment_element = dom.getElementsByTagName('chat') | ||||||
|     i = 0 |  | ||||||
|     for comment in comment_element: |     for comment in comment_element: | ||||||
|         try: |         try: | ||||||
|             c = str(comment.childNodes[0].wholeText) |             c = str(comment.childNodes[0].wholeText) | ||||||
|  | @ -125,14 +125,31 @@ def ReadCommentsNiconico(f, fontsize): | ||||||
|                 elif mailstyle in NiconicoColorMap: |                 elif mailstyle in NiconicoColorMap: | ||||||
|                     color = NiconicoColorMap[mailstyle] |                     color = NiconicoColorMap[mailstyle] | ||||||
|             yield (max(int(comment.getAttribute('vpos')), 0)*0.01, int(comment.getAttribute('date')), int(comment.getAttribute('no')), c, pos, color, size, (c.count('\n')+1)*size, CalculateLength(c)*size) |             yield (max(int(comment.getAttribute('vpos')), 0)*0.01, int(comment.getAttribute('date')), int(comment.getAttribute('no')), c, pos, color, size, (c.count('\n')+1)*size, CalculateLength(c)*size) | ||||||
|             i += 1 |  | ||||||
|         except (AssertionError, AttributeError, IndexError, TypeError, ValueError): |         except (AssertionError, AttributeError, IndexError, TypeError, ValueError): | ||||||
|             logging.warning('Invalid comment: %s' % comment.toxml()) |             logging.warning('Invalid comment: %s' % comment.toxml()) | ||||||
|             continue |             continue | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | def ReadCommentsAcfun(f, fontsize): | ||||||
|  |     'Output format: [(timeline, timestamp, no, comment, pos, color, size, height, width)]' | ||||||
|  |     comment_element = json.load(f) | ||||||
|  |     i = 0 | ||||||
|  |     for comment in comment_element: | ||||||
|  |         try: | ||||||
|  |             p = str(comment['c']).split(',') | ||||||
|  |             assert len(p) >= 6 | ||||||
|  |             assert p[2] in ('1', '2', '4', '5') | ||||||
|  |             c = str(comment['m']) | ||||||
|  |             size = int(p[3])*fontsize/25.0 | ||||||
|  |             yield (float(p[0]), int(p[5]), i, c, {'1': 0, '2': 0, '4': 2, '5': 1}[p[2]], int(p[1]), size, (c.count('\n')+1)*size, CalculateLength(c)*size) | ||||||
|  |             i += 1 | ||||||
|  |         except (AssertionError, AttributeError, IndexError, TypeError, ValueError): | ||||||
|  |             logging.warning('Invalid comment: %r' % comment) | ||||||
|  |             continue | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| def ReadCommentsBilibili(f, fontsize): | def ReadCommentsBilibili(f, fontsize): | ||||||
|     'Output format: [(timeline, timestamp, no, comment, type, color, size, height, width)]' |     'Output format: [(timeline, timestamp, no, comment, pos, color, size, height, width)]' | ||||||
|     dom = xml.dom.minidom.parse(f) |     dom = xml.dom.minidom.parse(f) | ||||||
|     comment_element = dom.getElementsByTagName('d') |     comment_element = dom.getElementsByTagName('d') | ||||||
|     i = 0 |     i = 0 | ||||||
|  | @ -210,7 +227,7 @@ if __name__ == '__main__': | ||||||
|     comments = [] |     comments = [] | ||||||
|     for i in args.file: |     for i in args.file: | ||||||
|         with open(i, 'r', encoding='utf-8') as f: |         with open(i, 'r', encoding='utf-8') as f: | ||||||
|             CommentProcesser = {None: None, 'Niconico': ReadCommentsNiconico, 'Bilibili': ReadCommentsBilibili}[ProbeCommentFormat(f)] |             CommentProcesser = {None: None, 'Niconico': ReadCommentsNiconico, 'Acfun': ReadCommentsAcfun, 'Bilibili': ReadCommentsBilibili}[ProbeCommentFormat(f)] | ||||||
|             if not CommentProcesser: |             if not CommentProcesser: | ||||||
|                 raise ValueError('Unknown comment file format: %s' % i) |                 raise ValueError('Unknown comment file format: %s' % i) | ||||||
|             for comment in CommentProcesser(f, args.fontsize): |             for comment in CommentProcesser(f, args.fontsize): | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Star Brilliant
						Star Brilliant