[PYTHON] Deshalb werde ich die Kommentare aus der Parteiführerdebatte von Nico Nama im Repräsentantenhaus analysieren.

Hintergrund

Ich denke, dass das Verbot von Online-Wahlen aufgehoben wird und die Bereitstellung von Wahlinformationen über das Internet populärer wird und die Verwendung von schlechten Anweisungen auffällig ist. Wie geht es Ihnen heutzutage?

Am 29. November 2014 fand vor den Wahlen zum Repräsentantenhaus eine Debatte der Parteiführer mit Nico-Studenten statt. Ich möchte den Parteiführern meinen Tribut zollen, die auf der von Dr. Azumi erwähnten "voreingenommenen Videoseite" erschienen und sich an Diskussionen beteiligten und auch untersuchten, ob sie tatsächlich voreingenommen waren.

Quellcode https://github.com/mima3/analyze_election

Analyseergebnis

[Wahl des Repräsentantenhauses 2014] Debatte des Netto-Parteiführers

http://needtec.sakura.ne.jp/analyze_election/page/nicolive/lv200730443

Zusammenfassend lässt sich sagen, dass in den Meinungsumfragen von Zeitungen die schattige "nächste Generation" Aufmerksamkeit erregt, es gibt wilde Menschen, die allein Hunderte von Kommentaren abgeben, und es gibt mehr Yoshida-Führer der Sozialistischen Partei als Kaieda-Führer der Oppositionspartei. Das Ergebnis war, dass es ehrlich extrahiert wurde und auch ein Fehler.

Parteiführerdebatte im Japan Press Club (Jiji Press Channel)

http://needtec.sakura.ne.jp/analyze_election/page/nicolive/lv201303080

Wie erwartet ist die Anzahl der Kommentare geringer als am Samstagabend. Es gibt jedoch Leute, die allein etwa 200 Kommentare abgeben. Arbeit oder Schule.

Schließlich werden oft die Wörter "Abe" und "Next Generation" extrahiert. Es gibt jedoch eine Präsenz von "Kaieda" und "Democratic" aus der Zeit, als Nikosei es gesponsert hat.

Warum gibt es in der Parteiführerdebatte so viele Wörter wie "Tsubaki" und "Asahi" im Fall Tsubaki? (Stick)

So erhalten Sie Kommentare von Nico Nico Live Broadcast in Python

Um Kommentare zu Nico Nico Live Broadcasting zu erhalten, müssen Sie zuerst Premium-Mitglied sein. Für reguläre Mitglieder liegt die Obergrenze bei etwa 1000.

Danach können Sie es erhalten, indem Sie die folgenden Schritte ausführen.

  1. Melden Sie sich auf der Anmeldeseite mit Ihrer E-Mail-Adresse und Ihrem Passwort an, um user_session zu erhalten
  2. Rufen Sie http://watch.live.nicovideo.jp/api/getplayerstatus auf, um die IP und den Port des Nachrichtenservers sowie die Benutzer-ID abzurufen.
  3. Rufen Sie http://watch.live.nicovideo.jp/api/getwaybackkey auf, um den Waybackkey abzurufen. Sie können frühere Kommentare erhalten, indem Sie diesen Schlüssel mit Ihrer Benutzer-ID kombinieren.
  4. Stellen Sie eine Verbindung zum Nachrichtenserver her, um Kommentare zu erhalten. Zu diesem Zeitpunkt können Sie entweder eine Verbindung über HTTP oder SOCKET herstellen. Für die HTTP-Kommunikation muss eine Verbindung zu dem Port hergestellt werden, der durch Subtrahieren von 2725 von der Portnummer erhalten wird.
  5. Da Sie mit einem GET nur 1000 Elemente erhalten können, erhalten Sie alle Kommentare, während Sie sie entsprechend einstellen.

Der spezifische Code sieht folgendermaßen aus:

niconico.py


# coding: utf-8
import sys
import cookielib
import cgi
import urllib
import urllib2
from lxml import etree
import socket
import datetime
import time
import json

class NicoCtrl():
    def __init__(self, nicovideo_id, nicovideo_pw):
        self.nicovideo_id = nicovideo_id
        self.nicovideo_pw = nicovideo_pw
        #Einloggen
        cj = cookielib.CookieJar()
        self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
        req = urllib2.Request("https://secure.nicovideo.jp/secure/login")
        req.add_data( urllib.urlencode( {"mail": self.nicovideo_id, "password":self.nicovideo_pw} ))
        res = self.opener.open(req).read()
        if not 'user_session' in cj._cookies['.nicovideo.jp']['/']:
            raise Exception('PermissionError')

    def _getjson(self, url, errorcnt):
        #JSON wird möglicherweise abgeschnitten und kehrt auf den Weg zurück. Versuchen Sie es daher erneut
        try:
            res = self.opener.open(url, timeout=100).read()
            return json.loads(res)
        except ValueError:
            if errorcnt < 3:
                errorcnt = errorcnt + 1
                return self._getjson(url, errorcnt)
            else:
               raise

    def get_live_comment(self, movie_id):
        self.movie_id = movie_id


        #Holen Sie sich den Ort der Videoverteilung(getflv)
        res = self.opener.open("http://watch.live.nicovideo.jp/api/getplayerstatus?v="+self.movie_id).read()
        root = etree.fromstring(res)
        messageServers = root.xpath('//ms')
        if len(messageServers) == 0:
            raise Exception('UnexpectedXML')

        user_ids = root.xpath('//user_id')
        if len(user_ids) == 0:
            raise Exception('NotfoundUserId')
        user_id = user_ids[0].text

        thread_id = messageServers[0].find('thread').text
        addr = messageServers[0].find('addr').text
        port = int(messageServers[0].find('port').text) - 2725
        
        #Holen Sie sich Waybackkey
        waybackkeyUrl = ('http://watch.live.nicovideo.jp/api/getwaybackkey?thread=%s' % thread_id)
        req = urllib2.Request(waybackkeyUrl)
        res = self.opener.open(waybackkeyUrl).read()
        waybackkey = cgi.parse_qs(res)['waybackkey'][0]

        msUrl = 'http://%s:%d/api.json/thread?' % (addr, port)
        chats = []
        req = urllib2.Request(msUrl)
        when = '4294967295'
        while True:
            data = {
                'thread' : thread_id, 
                'version' : "20061206",
                'res_from' : '-1000',
                'waybackkey' : waybackkey,
                'user_id' : user_id,
                'when': when,
                'scores' : '1'
            }
            list = self._getjson(msUrl+urllib.urlencode(data), 0)
            chatcnt = 0
            insertdata = []
            for l in list:
                if 'chat' in l:
                    if chatcnt == 0:
                        when = int(l['chat']['date']) - 1
                    if l['chat']['content'] != '/disconnect':
                        insertdata.append(l['chat'])
                    chatcnt += 1
            chats = insertdata + chats
            if chatcnt == 0:
                break
        return chats


nicolive.py


# coding: utf-8
import sys
from niconico_ctrl import NicoCtrl
import json

def main(argvs, argc):
    if len(argvs) != 4:
        print ('python nicolive.py email pass lv142315925')
        return 1
    nicovideo_id = argvs[1]
    nicovideo_pw = argvs[2]
    move_id = argvs[3]

    t = NicoCtrl(nicovideo_id, nicovideo_pw)
    chats = t.get_live_comment(move_id)
    f = open(move_id + '.json', 'w')
    f.write(json.dumps(chats))
    f.close()
    return 0

if __name__ == '__main__':
    argvs = sys.argv
    argc = len(argvs)
    sys.exit(main(argvs, argc))

Dieses Skript generiert eine JSON-Datei mit Kommentarinformationen, indem Folgendes ausgeführt wird.

 python nicolive.py E-Mail-Adresse Passwort lv200730443

Danach können Sie Nicos Kommentare analysieren, indem Sie die Kommentare in der erstellten JSON-Datei morphologisch analysieren, Wörter extrahieren, für jeden Benutzer summieren und etwas anderes tun, Tae-chan.

Referenz

** niconico message (comment) Erklärung der Server-Tags und des Sendens ** http://blog.goo.ne.jp/hocomodashi/e/3ef374ad09e79ed5c50f3584b3712d61

** Erhalte Kommentare zu Nico Nico Videos ** http://d.hatena.ne.jp/MOOOVe/20120229/1330512626

Recommended Posts

Deshalb werde ich die Kommentare aus der Parteiführerdebatte von Nico Nama im Repräsentantenhaus analysieren.
Deshalb werde ich Tweets von den Wahlen zum Repräsentantenhaus nachschlagen
Deshalb analysiere ich die Homepages jeder Partei
Deshalb berechne ich die Anzahl der Sitze für den proportionalen Vertreter bei den Wahlen zum Repräsentantenhaus