Exemple #1
0
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)
Exemple #2
0
    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 __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)
Exemple #4
0
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)
Exemple #5
0
    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()
Exemple #6
0
 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)
Exemple #7
0
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)
Exemple #8
0
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)
Exemple #9
0
    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)
Exemple #10
0
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)
Exemple #11
0
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()
Exemple #12
0
    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)
Exemple #13
0
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)
Exemple #14
0
    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()
Exemple #15
0
# -*- coding:utf-8 -*-
import time
import json
import confluent_kafka
from danmu import DanMuClient


def error_cb(err):
    print('Error: %s' % err)


dmc = DanMuClient('http://www.douyu.com/sunyalong')


@dmc.danmu
def produce(msg):
    """
    生产数据到broker
    :param msg: 弹幕数据
    :param producer:
    :return:
    """
    data = dict()
    data['content'] = msg['Content'].encode('utf-8', 'ignore')
    data['nickname'] = msg['NickName'].encode('utf-8', 'ignore')
    data['uid'] = msg['uid']
    data['level'] = msg['level']
    data['create_time'] = time.time()
    try:
        producer.produce('danmu', value=json.dumps(data))
        # time.sleep(random.randint(1, 2))
Exemple #16
0
import time, sys, json
from danmu import DanMuClient

def out(p):
    sys.stdout.write(json.dumps(p) + "\n")
    sys.stdout.flush()

dmc = DanMuClient(sys.argv[1])
if not dmc.isValid(): print('Url invalid')

@dmc.danmu
def danmu_fn(msg):
    out({'type': 'danmu', 'data': msg})

@dmc.gift
def gift_fn(msg):
    out({'type': 'gift', 'data': msg})

@dmc.other
def other_fn(msg):
    out({'type': 'other', 'data': msg})

dmc.start(blockThread = True)
Exemple #17
0
'''

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') #pass
# dmc = DanMuClient('http://www.huya.com/baozha') #fail
# dmc = DanMuClient('https://live.bilibili.com/392') #pass
# dmc = DanMuClient('https://www.quanmin.tv/333') #pass
dmc = DanMuClient('https://www.panda.tv/1258651')  #pass

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
Exemple #18
0
import time, sys

from danmu import DanMuClient


def pp(msg):
    print(msg.encode(sys.stdin.encoding, 'ignore').decode(sys.stdin.encoding))


dmc = DanMuClient('https://www.douyu.com/32892')
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)
Exemple #19
0
        n = "[%s]" % (title[msg["nl"]])
    if "col" not in msg:
        msg["col"] = "0"
    
    width, height = os.get_terminal_size()
    len_msg = len(msg['nn'] + msg['txt']) + 28
    if width < len_msg:
        msg['txt'] = msg['txt'][:width - len(msg['nn']) - 28]

    txt = "[%s] :: %s > %s" % (t_col(msg["level"]), 
            c.cyan(msg["nn"], style="underline"), color[msg["col"]](msg["txt"]))
    
    return n + b + txt

try:
    dmc = DanMuClient(sys.argv[1])
    if not dmc.isValid():
        raise Exception("Invalid URL")
except IndexError as ie:
    print(c.red("No enough parameters."))
    exit(1)
except Exception as e:
    print(c.red(e.args[1]))
    exit(1)

@dmc.danmu
def danmu_fn(msg) -> None:
    try:
        print(col(msg), end="\n")
    except Exception as e:
        print(e)
Exemple #20
0
import time, sys
from danmu import DanMuClient
'''
文档
http://danmu.readthedocs.io/zh_CN/latest/
'''


def pp(msg):
    print(msg.encode(sys.stdin.encoding, 'ignore').decode(sys.stdin.encoding))


dmc = DanMuClient(
    'https://www.douyu.com/4095712')  #//https://www.douyu.com/4095712   699689
if not dmc.isValid(): print('Url not valid')


@dmc.danmu
def danmu_fn(msg):
    # nick =msg['NickName']
    # content =msg['Content']
    # if nick.len
    pp('[%s] %s' % (msg['NickName'].ljust(15, '一'), msg['Content']))


# @dmc.gift
# def gift_fn(msg):
#     pp('[%s] sent a gift!' % msg['NickName'])

# @dmc.other
# def other_fn(msg):
Exemple #21
0
import time, sys

from danmu import DanMuClient


def pp(msg):
    print(msg.encode(sys.stdin.encoding, 'ignore').decode(sys.stdin.encoding))


#dmc = DanMuClient('https://www.douyu.com/32892')
dmc = DanMuClient('https://live.bilibili.com/7976172')
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)
Exemple #22
0
import Queue
from bdt2s import T2S
from Player import Player

import time, sys, random
from danmu import DanMuClient
from utils import *

random.seed(None)
color = Colored()

if len(sys.argv) < 2 or sys.argv[1] == '-h':
    print('Usage: python %s <roomId>' % __file__)
    sys.exit(0)

dmc = DanMuClient('http://www.douyu.com/{}'.format(sys.argv[1]))
if not dmc.isValid(): print('Url not valid')

t2s = T2S("./config")
t2s.initT2S()

TASK_QUEUE = Queue.Queue(10)
player = Player(TASK_QUEUE)
player.daemon = True

def pp(msg):
    colors = ['red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white', 'black']
    color_name = random.choice(colors)
    color_render = getattr(color, color_name)
    msg = msg.encode(sys.stdin.encoding, 'ignore').decode(sys.stdin.encoding)
    print(color_render(msg))
	while True:
		time.sleep(10)
		print "process{}:{}room_listening_to".format(process_number,threading.active_count()/3+1)


def start_process(dmcs):
	process = 0
	processes_need = len(dmcs)/700+1
	for process_number in range(processes_need):
		p = Process(target=start_thread, args=(dmcs,process_number,))
		p.daemon = True
		p.start()
		process += 1
		print "process started:{}".format(process)

if __name__ == "__main__":

	all_rooms = get_live_rooms(2,100)
	dmcs_unvalid = map(lambda x: (DanMuClient(x),x),all_rooms)
	dmcs = filter(lambda x: x[0].isValid(), dmcs_unvalid) #dmc is the tuple that contains(dmc,rom)
	process_queue = Process_queue()
	start_process(dmcs)
	# connect to MongoDB
	DBclient = MongoClient()
	danmu_db = DBclient['danmu']
	danmu_info = danmu_db['test']
	while True:
		item = process_queue.get()
		danmu_info.insert_one(item).inserted_id

Exemple #24
0
import time, sys

from danmu import DanMuClient

def pp(msg):
    print(msg.encode(sys.stdin.encoding, 'ignore').decode(sys.stdin.encoding))
dmc = DanMuClient('https://www.panda.tv/575757')
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)
Exemple #25
0
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
Exemple #26
0
import sys

from danmu import DanMuClient

dmc = DanMuClient('http://www.douyu.com/sunyalong')


@dmc.danmu
def danmu_fn(msg):
    # level = msg['level']
    # uid = msg['uid']
    # message = '[%s] %s' % (msg['NickName'], msg['Content'])
    with open("danmu.txt", 'a') as f:
        f.write(msg['Content'].encode('utf-8', 'ignore') + '\n')
    # print message.encode(sys.stdin.encoding, 'ignore').decode(sys.stdin.encoding)


dmc.start(blockThread=True)
Exemple #27
0
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.huomao.com/9695')
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)
Exemple #28
0
                            'ignore').decode(sys.stdin.encoding)
    # print(encodedmsg)
    if encodedmsg[0:7] == 'chatmsg':
        print(encodedmsg)
        f = open("danmu%s.txt" % programstarttime, "a")
        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']))
Exemple #29
0
@author: root
"""
import time, sys

from danmu import DanMuClient


def pp(msg):
    print(msg)


#    print(msg.encode(sys.stdin.encoding, 'ignore').
#        decode(sys.stdin.encoding))

dmc = DanMuClient('http://www.panda.tv/27337')
if not dmc.isValid(): print('Url not valid')


@dmc.danmu
def danmu_fn(msg):
    pp('[%s] %s' % (msg['NickName'], msg['Content']))
    print(msg)


@dmc.gift
def gift_fn(msg):
    pp('[%s] sent a gift!' % msg['nn'])


@dmc.other
Exemple #30
0
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)
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()