script/utils/export_chat_zoom.py
changeset 1548 39186950a53e
parent 1542 82b5f22448f6
equal deleted inserted replaced
1547:7182d370c05f 1548:39186950a53e
   185             'minutes': int(parts[1]),
   185             'minutes': int(parts[1]),
   186             'seconds': int(parts[2]) if len(parts)>2 else 0
   186             'seconds': int(parts[2]) if len(parts)>2 else 0
   187         }
   187         }
   188         return int(round(datetime.timedelta(**time_params).total_seconds()*1000))
   188         return int(round(datetime.timedelta(**time_params).total_seconds()*1000))
   189 
   189 
   190 CHAT_REGEXP = re.compile(r"^(?P<created_at>\d{2}:\d{2}:\d{2})\t\sFrom\s{2}(?P<user>.+?)\s:\s(?P<text>.*)$", re.DOTALL)
   190 # CHAT_REGEXP = re.compile(r"^(?P<created_at>\d{2}:\d{2}:\d{2})\t\sFrom\s{2}(?P<user>.+?)\s:\s(?P<text>.*)$", re.DOTALL)
   191 CHAT_LINE_REGEXP = re.compile(r"^\d{2}:\d{2}:\d{2}\t\sFrom\s{2}.+?\s:")
   191 CHAT_REGEXP = re.compile(r"^(?P<created_at>\d{2}:\d{2}:\d{2})\t(?:(?:\sFrom\s{2}(?P<user_from>.+?)\s)|(?P<user>[^:]+)):\s(?P<text>.*)$", re.DOTALL)
       
   192 CHAT_LINE_REGEXP = re.compile(r"^\d{2}:\d{2}:\d{2}\t(?:(?:\sFrom\s{2}.+?\s)|(?:[^:]+)):")
   192 CHAT_DM_REGEXP = re.compile(r"\(Direct Message\)", re.IGNORECASE)
   193 CHAT_DM_REGEXP = re.compile(r"\(Direct Message\)", re.IGNORECASE)
   193 
   194 
   194 def parse_chat_line(chat_id, chat_line):
   195 def parse_chat_line(chat_id, chat_line):
   195     if (m := CHAT_REGEXP.match(chat_line)) is not None:
   196     if (m := CHAT_REGEXP.match(chat_line)) is not None:
   196         res = {k: v.replace('\r','\n') if k == 'text' else v for k,v in m.groupdict().items()}
   197         res = {k: v.replace('\r','\n') if k == 'text' else v for k,v in m.groupdict().items()}
   197         res['id'] = chat_id
   198         res['id'] = chat_id
       
   199         if user_str := res.get('user_from'):
       
   200             res['user'] = user_str
   198         res['tags'] = re.findall('#(\w+)',res['text'])
   201         res['tags'] = re.findall('#(\w+)',res['text'])
   199         return res
   202         return res
   200     else:
   203     else:
   201         return {}
   204         return {}
   202 
   205 
   462 
   465 
   463         chat_content_lines = read_chat_file(options.database.strip())
   466         chat_content_lines = read_chat_file(options.database.strip())
   464         for i,chat_line in enumerate(chat_content_lines):
   467         for i,chat_line in enumerate(chat_content_lines):
   465 
   468 
   466             cht = parse_chat_line("%04d" % (i+1) ,chat_line.strip())
   469             cht = parse_chat_line("%04d" % (i+1) ,chat_line.strip())
   467 
       
   468             #TODO parse chat line
   470             #TODO parse chat line
   469             cht_ts_dt = cht['created_at']
   471             cht_ts_dt = cht['created_at']
   470             default_date = start_date or datetime.now()
   472             default_date = start_date or datetime.now()
   471             cht_ts = parse_date(cht_ts_dt, item_tz, default_date.replace(tzinfo=item_tz))
   473             cht_ts = parse_date(cht_ts_dt, item_tz, default_date.replace(tzinfo=item_tz))
   472             if start_date is None:
   474             if start_date is None: