def run(self): def pp(msg): self.item_changed_signal.emit( msg.encode(sys.stdin.encoding, 'ignore').decode(sys.stdin.encoding)) # self.sleep(1) # self.item_changed_signal.emit(msg.encode(sys.stdin.encoding, 'ignore').decode(sys.stdin.encoding)) # print(msg.encode(sys.stdin.encoding, 'ignore').decode(sys.stdin.encoding)) dmc = DanMuClient(self.url) if not dmc.isValid(): print('Url not valid') @dmc.danmu def danmu_fn(msg): pp(msg['Content']) # pp('[%s] %s' % (msg['NickName'], msg['Content'])) @dmc.gift def gift_fn(msg): pass # pp('[%s] sent a gift!' % msg['NickName']) @dmc.other def other_fn(msg): pass # pp('Other message received') dmc.start(blockThread=True)
def begin(roomID): # for roomID in anchor_roomId: # roomID = str(roomID) # print roomID roomID = str(roomID) dmc = DanMuClient('http://www.douyu.com/'+roomID) # dmc = DanMuClient(roomUrl) if not dmc.isValid(): print('Url not valid') @dmc.danmu def danmu_fn(msg): pp('[%s]: [%s] %s' % (roomID,msg['NickName'], msg['Content'])) # msg=",".join([str(time.time()),msg['NickName'], msg['Content']]) msg = str(msg['Content']) addMsg(msg,roomID); # @dmc.gift # def gift_fn(msg): # pp('[%s]:[%s] sent a gift!' % (roomId,msg['NickName'])) # msg=",".join([str(time.time()),msg['NickName'],"sent a gift!"]) # addMsg(msg); # @dmc.other # def other_fn(msg): # pp('[%s]:Other message received'% msg['NickName']) dmc.start(blockThread = True)
def start(cls,rid): dmc = DanMuClient('http://www.douyu.com/%s'%rid) cls.dmc_instance[rid]=dmc cls.mysql_instance[rid]= MySQLdb.connect( host='192.168.3.56', port=3306, db='grapes', user='******', passwd='0831@Bees', charset='utf8', cursorclass=MySQLdb.cursors.DictCursor) @dmc.danmu def danmu_fn(msg): #填充实时消息 try: if str(msg['uid']) not in uid: filter_msg(msg) if msg['enable']: cursor = cls.mysql_instance[rid].cursor() insert_data = "insert into chatdata(rid,txt,dteventtime) values('%s','%s','%s')" % ( msg['rid'], msg['Content'], datetime.datetime.now()) cursor.execute(insert_data) cls.mysql_instance[rid].commit() except: cls.mysql_instance[rid].close() cls.mysql_instance[rid] = MySQLdb.connect( host='192.168.3.56', port=3306, db='grapes', user='******', passwd='0831@Bees', charset='utf8', cursorclass=MySQLdb.cursors.DictCursor) dmc.start(blockThread=False)
def PlayGame(Model): global Time_re global retime global Log global dmc dmc = DanMuClient(URL) if not dmc.isValid(): print('Url not valid') Model = Model.lower() retime = time.time() Log = Stat(MATCH) if Model == 'freedom': Time_re = Thread(target=Time_Change, args=(Model, )) Time_re.start() if Model == 'democracy': Time_re = Thread(target=Time_load, args=(Model, )) Time_re.start() @dmc.danmu def danmu_fn(msg): button = msg['Content'].lower() print(msg) if button in MATCH: Log[button] += 1 if Model == 'freedom': shell.AppActivate("VisualBoyAdvance") time.sleep(.02) press(button) DataJ = DanmuRecord(msg['NickName'], button).json() requests.post("http://127.0.0.1:5000/record", data=DataJ) if Model == 'democracy': Log[button] += 1 dmc.start(blockThread=True)
def get_danmu(roomId): roomId = roomId dmc = DanMuClient('https://www.douyu.com/' + str(roomId)) if not dmc.isValid(): print('Url not valid') @dmc.danmu def danmu_fn(msg): db = dbOperation.DbOperation() db.insert_danmu(roomId, msg['NickName'], msg['Content']) # print(roomId, msg['NickName'], msg['Content']) dmc.start(blockThread=True)
def _run(self, room, game): """Run for multiprocessing.""" dmc = DanMuClient('http://www.douyu.com/{}'.format(room)) if not dmc.isValid(): self.log('http://www.douyu.com/{}'.format(room), "Url not valid") @dmc.default def danmu_fn(msg): """Dan mu function.""" res = "\t".join( (str(room), str(game), str(time.time()), msg["MsgType"], msg["NickName"], msg["Content"], "\n")) self.msg_queue.put(res) dmc.start(blockThread=False) time.sleep(3600) dmc.stop()
def begin(roomID): try: roomID = str(roomID) print "I was at the %s! %s" % (roomID, ctime()) dmc = DanMuClient('http://www.douyu.com/' + roomID) # dmc = DanMuClient(roomUrl) if not dmc.isValid(): print('Url not valid') @dmc.danmu def danmu_fn(msg): pp('[%s]: [%s] %s' % (roomID, msg['NickName'], msg['Content'])) # msg=",".join([str(time.time()),msg['NickName'], msg['Content']]) msg = str(msg['Content']) addMsg(msg, roomID) dmc.start(blockThread=True) # dmc.start() except Exception as e: print(e)
def start(cls, rid): dmc = DanMuClient('http://www.douyu.com/%s' % rid) cls.dmc_instance[rid] = dmc @dmc.danmu def danmu_fn(msg): #填充实时消息 try: if str(msg['uid']) not in uid: filter_msg(msg) if msg['enable']: cursor = conn.cursor() insert_data = "insert into chatdata(rid,txt,dteventtime) values('%s','%s','%s')" % ( msg['rid'], msg['Content'], datetime.datetime.now()) cursor.execute(insert_data) conn.commit() except: print "error" dmc.start(blockThread=False)
def begin(): dmc = DanMuClient('http://www.douyu.com/' + roomID) if not dmc.isValid(): print('Url not valid') @dmc.danmu def danmu_fn(msg): pp('[%s] %s' % (msg['NickName'], msg['Content'])) msg = ",".join([str(time.time()), msg['NickName'], msg['Content']]) addMsg(msg) @dmc.gift def gift_fn(msg): pp('[%s] sent a gift!' % msg['NickName']) msg = ",".join([str(time.time()), msg['NickName'], "sent a gift!"]) addMsg(msg) @dmc.other def other_fn(msg): pp('Other message received') dmc.start(blockThread=True)
def start_danmu(live_url, relation): ''' 开始运行弹幕监听 :param live_url: :return: ''' client = MongoClient(host=danmu_config.MONGO_HOST, port=danmu_config.MONGO_PORT) db = client[danmu_config.MONGO_DB] dmc = DanMuClient(live_url) if not dmc.isValid(): client.close() pass @dmc.danmu def danmu_fn(msg): # info = msg.encode(sys.stdin.encoding, 'ignore').decode(sys.stdin.encoding) data, coll_name = save_danmu(live_url, msg, relation) if data is not None and coll_name is not None: coll = db[coll_name] try: coll.insert(data) except Exception: pass @dmc.gift def gift_fn(msg): # info = msg.encode(sys.stdin.encoding, 'ignore').decode(sys.stdin.encoding) data, coll_name = save_gift(live_url, msg, relation) if data is not None and coll_name is not None: coll = db[coll_name] try: coll.insert(data) except Exception: pass dmc.start(blockThread=True) client.close()
def start(cls, rid): dmc = DanMuClient('http://www.douyu.com/%s' % rid) cls.dmc_instance[rid] = dmc cls.dmc_data[rid] = cStringIO.StringIO() @dmc.danmu def danmu_fn(msg): #填充实时消息 try: if str(msg['uid']) not in uid: data = cls.msg_handle(msg['Content']) if data: # cursor = conn.cursor() # insert_data = "insert into chatdata(rid,txt,dteventtime) values('%s','%s','%s')" % ( # msg['rid'], msg['Content'], datetime.datetime.now()) # cursor.execute(insert_data) # conn.commit() data = msg['rid'], msg[ 'Content'], datetime.datetime.now() cls.dmc_data[rid].write() except: pass dmc.start(blockThread=False)
def main(url, log): dmc = DanMuClient(url) if not dmc.isValid(): print('Url not valid') else: logger = DanmuLogger(url, log) logger.print("Start to crawler %s ..." % url) @dmc.danmu def danmu_fn(msg): message = make_message('[%s] %s' % (msg['NickName'], msg['Content'])) logger.print(message) @dmc.gift def gift_fn(msg): message = make_message('[%s] sent a gift!' % msg['NickName']) logger.print(message) @dmc.other def other_fn(msg): message = make_message('Other message received') logger.print(message) dmc.start(blockThread=True)
import time, sys from danmu import DanMuClient def pp(msg): print(msg.encode(sys.stdin.encoding, 'ignore'). decode(sys.stdin.encoding)) dmc = DanMuClient('http://www.douyu.com/lslalala') if not dmc.isValid(): print('Url not valid') @dmc.danmu def danmu_fn(msg): pp('[%s] %s' % (msg['NickName'], msg['Content'])) @dmc.gift def gift_fn(msg): pp('[%s] sent a gift!' % msg['NickName']) @dmc.other def other_fn(msg): pp('Other message received') dmc.start(blockThread = True)
f.writelines([encodedmsg, '\n']) f.close() elif encodedmsg[0:3] == 'dgb': f = open("gift%s.txt" % programstarttime, "a") f.writelines([encodedmsg, '\n']) f.close() else: pass dmc = DanMuClient('http://www.douyu.com/916749') @dmc.danmu def danmu_fn(msg): pp('%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s' % (msg['type'], time.time(), msg['uid'], msg['nn'], msg['txt'], msg['cid'], msg['level'], msg['bnn'], msg['bl'], msg['brid'])) # 数据含义:消息类型 时间戳 发送者UID 发送者昵称 弹幕文本 弹幕ID 用户等级 徽章昵称 徽章等级 徽章房间ID @dmc.gift def gift_fn(msg): pp('%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s' % (msg['type'], time.time(), msg['gfid'], msg['uid'], msg['nn'], msg['bnn'], msg['bl'], msg['brid'])) # 数据含义:消息类型 时间戳 礼物ID 发送者UID 发送者昵称 徽章昵称 徽章等级 徽章房间ID dmc.start(blockThread=True)
class OperatorQueue: REQUEST_PATTERN = '(?:进攻|防守) *(.+)' def __init__(self, url, keyword): OperatorQueue.REQUEST_PATTERN = keyword + OperatorQueue.REQUEST_PATTERN print(OperatorQueue.REQUEST_PATTERN) self.changed = False self._dmc = DanMuClient(url) if not self._dmc.isValid(): raise ValueError('Invalid url') self._attacker_nick_name = [] for o in Attacker.OP_NAME_DICT.values(): for nn in o: self._attacker_nick_name.append(nn) self._defender_nick_name = [] for o in Defender.OP_NAME_DICT.values(): for nn in o: self._defender_nick_name.append(nn) self._attacker_queue = [] self._defender_queue = [] @self._dmc.danmu def danmu_fn(msg): self.process(msg) self._dmc.start(blockThread=False) def find_operator_queue(self, nickname): if nickname.lower() in self._attacker_nick_name: return self._attacker_queue elif nickname.lower() in self._defender_nick_name: return self._defender_queue else: return None def process(self, msg): print('Processing: ') print('[{0}] \"{1}\"'.format(msg['NickName'], msg['Content'])) m = re.match(OperatorQueue.REQUEST_PATTERN, msg['Content'].lower()) if m: self.changed = True q = self.find_operator_queue(m.group(1)) if q is None: print('Illegal operator name: ' + m.group(1)) return find = False for operator in q: if operator.match_name(m.group(1)): operator.update(msg['NickName']) find = True break if not find: try: new_operator = Attacker(m.group(1), msg['NickName']) if q == self._attacker_queue \ else Defender(m.group(1), msg['NickName']) q.append(new_operator) except ValueError as e: print(e) return heapq.heapify(q) print(' ' + repr(self._attacker_queue)) print(' ' + repr(self._defender_queue)) def peek_3(self, side): q = self._attacker_queue if side == 'attacker' \ else self._defender_queue if side == 'defender' else None if len(q) < 3: return q lst = q[0:3] if q[1] > q[2]: lst[1], lst[2] = q[2], q[1] return lst def next_attacker(self): if len(self._attacker_queue) > 0: self._attacker_queue.pop(0) self.changed = True else: print('Attacker queue is empty!') def next_defender(self): if len(self._defender_queue) > 0: self._defender_queue.pop(0) self.changed = True else: print('Defender queue is empty!') def get_text(self): if not self.changed: return None self.changed = False text = 'ATTACKERS:\n' for op in self.peek_3('attacker'): text += ' ' + op.name.upper() + '\n' for _ in range(3 - len(self.peek_3('attacker'))): text += ' --\n' text += 'DEFENDERS:\n' for op in self.peek_3('defender'): text += ' ' + op.name.upper() + '\n' for _ in range(3 - len(self.peek_3('defender'))): text += ' --\n' return text.rstrip()
class VideoPlayer(object): def __init__(self): self.video_window = VideoWindow(self.video_window_closed_handler) import locale locale.setlocale(locale.LC_NUMERIC, "C") self.mpv = mpv.MPV( wid=str(int(self.video_window.winId())), keep_open="yes", idle="yes", osc="yes", cursor_autohide="1000", # input_cursor="no", input_cursor="yes", input_default_bindings="no", config="yes", config_dir=cur_dir, hwdec="videotoolbox", # display_fps="60", ) self.danmaku_client = None self.danmaku_fd = None self.sub_loded = False self.cache = [] self.sub_alive = False # _gSignals.video_window_closed.connect(self.video_window_closed_handler) def play(self, url, title=""): self.init_danmaku(url) url = Bilibili.get_live_address(url, index=2) print(url) self.mpv.command("loadfile", url) self.video_window.show() self.video_window.setWindowTitle(title) def video_window_closed_handler(self): print('video_window_closed_handler') self.sub_alive = False self.mpv.command("stop") if self.danmaku_client: self.danmaku_client.stop() self.danmaku_client = None if self.danmaku_fd: self.danmaku_fd.close() self.sub_loded = False self.cache[:] = [] def sub_add(self, filename): self.mpv.command("sub-add", filename) def sub_reload(self): self.mpv.command("sub-reload") def init_danmaku(self, url): print("init_danmaku") print(type(url)) print(url) self.danmaku_client = DanMuClient(url) self.danmaku_client.danmu(self.handle_danmu) self.danmaku_client.start() self.danmaku_fd = open("danmaku_temp.ass", "w") width = 1280 height = 720 # fontface = "STHeiti" # fontface = "Arial Unicode" fontface = "Kaiti" # fontsize = 24 self.fontsize = 30 # alpha = 0.7 alpha = 1 styleid = "test" WriteASSHead(self.danmaku_fd, width=width, height=height, fontface=fontface, fontsize=self.fontsize, alpha=alpha, styleid=styleid) WriteComment(self.danmaku_fd, "welcome", 1, 0, width, 3, "test") self.danmaku_fd.close() def reload_sub_schedule(self): while self.sub_alive: time.sleep(1) self.sub_reload() def handle_danmu(self, danmu): t = self.mpv.time_pos if not t: return if not self.sub_loded: self.mpv.sub_add("danmaku_temp.ass") self.sub_loded = True thread = Thread(target=self.reload_sub_schedule) self.sub_alive = True thread.start() text = danmu['Content'] # print(text, len(text)) width = 1280 row = 10 valid_row = self.danmaku_engine(t, len(text) * 4) self.danmaku_fd = open("danmaku_temp.ass", "a") WriteComment(self.danmaku_fd, text, t, valid_row, width, 10, "test") self.danmaku_fd.close() # self.mpv.sub_reload() def danmaku_engine(self, t, length): font_size = 24 font_size = self.fontsize danmaku = { "t": t, "len": length, "row": 10, "speed": length / (16 / font_size), } valid_row = None index = 0 for i, danmu in enumerate(self.cache): t1 = t - danmu['t'] # print("speed", danmu["speed"]) l = t1 * danmu['speed'] # print("l", l) # print("len", danmu['len']) if l > danmu['len']: # print("l > len") valid_row = danmu['row'] # print("valid row", valid_row) index = i break if valid_row is not None: danmaku['row'] = valid_row self.cache.pop(index) self.cache.append(danmaku) return valid_row else: if len(self.cache) > 10: first = self.cache.pop(0) valid_row = first['row'] danmaku['row'] = valid_row self.cache.append(danmaku) return valid_row else: valid_row = (len(self.cache) + 0) * 36 danmaku['row'] = valid_row self.cache.append(danmaku) return valid_row