21
22

More than 5 years have passed since last update.

ニコニコ生放送のコメントを取得する

Posted at

コメビュを自分で作りたいときなんかに用います

comment.py
#!/usr/bin/python
#-*- coding:utf8 -*-
import os
import re
import yaml
import socket
import cookielib
from mechanize import Browser
from BeautifulSoup import BeautifulSoup

yml = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'config.yaml')
CONFIG = yaml.load(open(yml))

br = Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.open('https://secure.nicovideo.jp/secure/login_form')

br.select_form(nr=0)
br['mail'] = CONFIG['mail']
br['password'] = CONFIG['password']
br.submit()

lv = '' # set lv id e.g. lv00000000
br.open('http://watch.live.nicovideo.jp/api/getplayerstatus?v=%s' % lv) 
soup = BeautifulSoup(br.response().read())

thread = int(soup.find('thread').renderContents())
addr = soup.find('addr').renderContents()
port = int(soup.find('port').renderContents())

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((addr, port))
sock.send('<thread thread="%d" version="20061206" res_from="-1"/>¥0' % thread)

data = sock.recv(2048)

while True:
    data = sock.recv(2048)[:-1]
    d = BeautifulSoup(data)
    chat = d.find('chat')
    num = dict(chat.attrs)['no']
    comment = chat.renderContents()
    if not 'mail' in dict(chat.attrs): print num, comment
    else:
        if re.compile('nottalk|hidden').search(dict(chat.attrs)['mail']): continue
        else: print num, comment
    if comment == u"/disconnect": break

21
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
22