[PYTHON] Lassen Sie Voiceroid die TL von Twitter lesen

Einführung

Seit dem 16. August 2018 hat sich die API von Twitter geändert und UserStream ist nicht mehr verfügbar. Daher funktioniert der unten beschriebene Quellcode nicht ordnungsgemäß. </ font> Die aktuelle Antwort ist unentschlossen, aber anstelle von Userstream Es kann sinnvoll sein, die Listen-API zu verwenden, die 900 Mal / 15 Minuten (Stand: 27. September) verwendet werden kann.

Das Vorlesen ist sogar mit dem Plug-In zum Lesen von Sticks möglich, was einfacher ist. Aber ich wusste nicht, wie ich verhindern sollte, dass RT vorgelesen wird, also schrieb ich es angemessen. ~~ Eigentlich wäre es am besten, wenn es unter Linux statt unter Windows laufen könnte ... ~~

Ausführungsumgebung

  • Windows10
  • Python3.5.2
  • tweepy ver3.5.0 --Minan ★ TALK ver.1.13.2
  • VOICEROID + Tohoku Kiritan

Vorbereitung

  • Python-Installation http://qiita.com/t2y/items/2a3eb58103e85d8064b6

  • Installieren Sie Tweepy http://qiita.com/laco0416/items/f2a8928ef54626a75ae1

  • Für die Verwendung von tweepy ist ein Twitter-API-Schlüssel erforderlich http://phiary.me/twitter-api-key-get-how-to/

--Minan ★ SPRECHEN Installation http://publish-tool.blogspot.jp/search/label/%E6%B0%91%E5%AE%89%E2%98%85TALK

  • Kaufen Sie Ihre Lieblingsstimme ROID + http://www.ah-soft.com/voiceroid/

Ausführungsskript

TimelineVR.py


#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import codecs
import json
from os import path as ospath
import re
import subprocess
import tweepy

# Check Config.json
fpath = '{0}\\Config.json'.format(ospath.dirname(ospath.abspath(__file__)))
if ospath.exists(fpath):
    fp = codecs.open(fpath, 'r', 'utf-8')
    conf = json.load(fp)
    fp.close()
else:
    # Initial setting
    PATH_VRX = input('Drag and Drop vrx.exe : ')
    PATH_VOICEROID = input('Drag and Drop VOICEROID.exe : ')
    CK = input("Input Consumer Key (API Key) : ")
    CS = input("Input Consumer Secret (API Secret) : ")
    AT = input("Input Access Token : ")
    AS = input("Input Access Token Secret : ")
    conf = {'path': {'vrx': PATH_VRX, 'voiceroid': PATH_VOICEROID},
            'api': {'ck': CK, 'cs': CS, 'at': AT, 'as': AS}}
    # Save to Config.json
    fp = codecs.open(fpath, 'w', 'utf-8')
    json.dump(conf, fp, indent=4)
    fp.close()

# Call voiceroid.exe and vrx.exe
pvr = subprocess.Popen(conf['path']['voiceroid'])
pvrx = subprocess.Popen(conf['path']['vrx'])

# Set Tweepy api
auth = tweepy.OAuthHandler(conf['api']['ck'], conf['api']['cs'])
auth.set_access_token(conf['api']['at'], conf['api']['as'])
api = tweepy.API(auth)


# Override Listener
class Listener(tweepy.StreamListener):

    def on_status(self, status):
        # NG word
        try:
            for word in conf['NG']['word']:
                if status.text.find(word) != -1:
                    return True
        except KeyError:
            pass
        # NG client
        try:
            if status.source in conf['NG']['client']:
                return True
        except KeyError:
            pass
        # NG user_id
        try:
            if status.user.id in conf['NG']['user_id']:
                return True
        except KeyError:
            pass
        # NG user_screen_name
        try:
            if status.user.screen_name in conf['NG']['user_screen_name']:
                return True
        except KeyError:
            pass
        # replace Tweet text
        try:
            for retxt in conf['re']:
                status.text = re.sub(retxt, conf['re'][retxt], status.text)
        except KeyError:
            pass
        #Es scheint in Ordnung zu sein, weil es entkommen ist(?)
        cmd = "{0} {1}Tweet.{2}".format(
            conf['path']['vrx'], status.user.name, status.text)
        subprocess.call(cmd)
        return True

listener = Listener()
stream = tweepy.Stream(auth, listener)
try:
    stream.userstream()
except:
    pvr.kill()
    pvrx.kill()

Config.json


{
    "path": {
        "vrx": "C:\\xxx\\xxx\\vrx.exe",
        "voiceroid": "D:\\xxx\\xxx\\X\\VOICEROID.exe"
    },
    "api": {
        "ck": "xxx",
        "cs": "xxx",
        "at": "xxx",
        "as": "xxx"
    },
    "NG": {
        "word": ["RT @"],
        "client": ["Tsui verließ das Glas"],
        "user_id": ["1919810", "114514"],
        "user_screen_name": ["tadokoro", "kouji"]
    },
    "re": {
        "(https?|ftp)(:\/\/[-_\\.!~*\\'()a-zA-Z0-9;\/?:\\@&=\\+\\$,%#]+)": "URL weggelassen"
    }
}

Legen Sie die vorhandene Datei Config.json im selben Ordner wie TimelineVR.py ab. Wenn nicht beim Start, werden die Grundeinstellungen zum Erstellen von Config.json eingegeben.

  • NG-Wort, NG-Client, NG-Benutzer-ID und NG-Benutzerbildschirmname hinzugefügt. Schreiben Sie nach Belieben in die erstellte Config.json. Durch Hinzufügen von "RT @" zum NG-Wort können Sie verhindern, dass RT vorgelesen wird.

-Zusatz des Ersatzes für reguläre Ausdrücke Durch Angabe des regulären Ausdrucks, den Sie ersetzen möchten, und der Zeichenfolge, durch die er ersetzt werden soll Sie können den Text des Tweets ersetzen. Im Beispiel wird die URL so eingestellt, dass sie als "URL weggelassen" gelesen wird.

Problem

Wenn Sie das obige Skript ausführen, wird es vorgelesen, es gibt jedoch einige Probleme.

~~ - Manchmal wird es nicht vorgelesen (es wird verbessert, wenn Sie es erneut ausführen) Nachtrag (06.02.2017): Behoben Nachtrag (14.11.2017): Wenn subprocess.Popen () verwendet wird, wird vor dem Aufruf des Prozesses zum nächsten Prozess übergegangen. Daher erscheint es wünschenswert, subprocess.call () zu verwenden. Nachtrag (14.06.2018): Der Quellcode wurde insgesamt geändert.

  • Viele Fenster öffnen sich (mindestens 3) In Bezug darauf hat Windows 10 einen virtuellen Desktop, so dass es mich hoffentlich nicht stört ~~ .. sollte ~~ sein

Am Ende ... Ich denke, es sollte gewaltsam beendet werden (angemessen)

Schließlich

Derzeit ist dies für Menschen, die sich nur bewegen müssen. Tatsächlich können Sie arbeiten, während Sie mit TL sprechen, sodass die von Twitter benötigte Zeit erheblich reduziert wird. ~~ Dann sollte ich Twitter stoppen ...? ~~

Recommended Posts

Lassen Sie Voiceroid die TL von Twitter lesen
Lassen Sie das iPhone Twitter TL mit Pythonista3 vorlesen
Lassen Sie Python die Befehlsausgabe lesen
Lassen Sie Pandas die Zip-Datei im Web lesen
Lesen Sie die OpenCV-Dokumentation