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 colorsys
 | 
			
		||||
import json
 | 
			
		||||
import logging
 | 
			
		||||
import math
 | 
			
		||||
import sys
 | 
			
		||||
| 
						 | 
				
			
			@ -82,7 +83,7 @@ def WriteComment(f, c, row, width, height, bottomReserved, fontsize, lifetime):
 | 
			
		|||
def ProbeCommentFormat(f):
 | 
			
		||||
    f.seek(0)
 | 
			
		||||
    tmp = f.read(1)
 | 
			
		||||
    if tmp == '{':
 | 
			
		||||
    if tmp == '[':
 | 
			
		||||
        f.seek(0)
 | 
			
		||||
        return 'Acfun'
 | 
			
		||||
    elif tmp == '<':
 | 
			
		||||
| 
						 | 
				
			
			@ -106,7 +107,6 @@ def ReadCommentsNiconico(f, fontsize):
 | 
			
		|||
    'Output format: [(timeline, timestamp, no, comment, pos, color, size, height, width)]'
 | 
			
		||||
    dom = xml.dom.minidom.parse(f)
 | 
			
		||||
    comment_element = dom.getElementsByTagName('chat')
 | 
			
		||||
    i = 0
 | 
			
		||||
    for comment in comment_element:
 | 
			
		||||
        try:
 | 
			
		||||
            c = str(comment.childNodes[0].wholeText)
 | 
			
		||||
| 
						 | 
				
			
			@ -125,14 +125,31 @@ def ReadCommentsNiconico(f, fontsize):
 | 
			
		|||
                elif mailstyle in NiconicoColorMap:
 | 
			
		||||
                    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)
 | 
			
		||||
            i += 1
 | 
			
		||||
        except (AssertionError, AttributeError, IndexError, TypeError, ValueError):
 | 
			
		||||
            logging.warning('Invalid comment: %s' % comment.toxml())
 | 
			
		||||
            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):
 | 
			
		||||
    '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)
 | 
			
		||||
    comment_element = dom.getElementsByTagName('d')
 | 
			
		||||
    i = 0
 | 
			
		||||
| 
						 | 
				
			
			@ -210,7 +227,7 @@ if __name__ == '__main__':
 | 
			
		|||
    comments = []
 | 
			
		||||
    for i in args.file:
 | 
			
		||||
        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:
 | 
			
		||||
                raise ValueError('Unknown comment file format: %s' % i)
 | 
			
		||||
            for comment in CommentProcesser(f, args.fontsize):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue