[PYTHON] Demandez à Voiceroid de lire le TL de Twitter

introduction

Depuis le 16 août 2018, l'API de Twitter a changé et UserStream n'est plus disponible. Par conséquent, le code source décrit ci-dessous ne fonctionnera pas correctement. </ font> La réponse actuelle est indécise, mais au lieu de Userstream Il peut être bon d'accéder à l'API List qui peut être utilisée 900 fois / 15 minutes (à partir du 27 septembre).

Il est possible de lire à voix haute même avec le plug-in de lecture stick, ce qui est plus facile. Mais je ne savais pas comment empêcher RT d'être lu à haute voix, alors je l'ai écrit de manière appropriée. ~~ En fait, il serait préférable de l'exécuter sous Linux au lieu de Windows ... ~~

Environnement d'exécution

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

Préparation

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

--Installez tweepy http://qiita.com/laco0416/items/f2a8928ef54626a75ae1

  • La clé API Twitter est requise pour utiliser tweepy http://phiary.me/twitter-api-key-get-how-to/

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

  • Achetez votre VOICE ROID + préféré http://www.ah-soft.com/voiceroid/

Script d'exécution

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
        #Cela semble aller parce qu'il s'est échappé(?)
        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": ["Pot abandonné Tsui"],
        "user_id": ["1919810", "114514"],
        "user_screen_name": ["tadokoro", "kouji"]
    },
    "re": {
        "(https?|ftp)(:\/\/[-_\\.!~*\\'()a-zA-Z0-9;\/?:\\@&=\\+\\$,%#]+)": "URL omise"
    }
}

Placez le Config.json existant dans le même dossier que TimelineVR.py. Sinon au démarrage, les paramètres initiaux de création de Config.json seront entrés.

-Ajout du mot NG, du client NG, de l'ID utilisateur NG et du nom d'écran de l'utilisateur NG. Écrivez comme vous le souhaitez dans le fichier Config.json créé. En ajoutant "RT @" au mot NG, vous pouvez empêcher RT d'être lu à haute voix.

-Ajout de remplacement d'expression régulière En spécifiant l'expression régulière que vous souhaitez remplacer et la chaîne de caractères pour la remplacer par Vous pouvez remplacer le texte du tweet. Dans l'exemple, l'URL est définie pour être lue comme "URL omise".

problème

Si vous exécutez le script ci-dessus, il sera lu à voix haute, mais il y a quelques problèmes.

~~ -Parfois, il n'est pas lu à haute voix (il sera amélioré si vous réexécutez) Addendum (2017-02-06): corrigé Addendum (2017-11-14): Si subprocess.Popen () est utilisé, il passera au processus suivant avant que le processus ne soit appelé, il semble donc souhaitable d'utiliser subprocess.call (). Addendum (2018-06-14): Modification du code source dans son ensemble.

--Beaucoup de fenêtres ouvertes (au moins 3) À ce sujet, Windows 10 a un bureau virtuel, donc j'espère que cela ne me dérangera pas ~~ .. devrait être ~~

À la fin ... je pense qu'il devrait être mis fin de force (approprié)

finalement

Pour le moment, cette fois est réservée aux personnes qui ont juste besoin de bouger. En fait, vous pouvez travailler tout en parlant depuis TL, ce qui réduit considérablement le temps nécessaire à Twitter. ~~ Alors je devrais arrêter Twitter ...? ~~

Recommended Posts

Demandez à Voiceroid de lire le TL de Twitter
Demandez à l'iPhone de lire Twitter TL à haute voix en utilisant Pythonista3
Demandez à python de lire la sortie de la commande
Demandez aux pandas de lire le fichier zip sur le Web
Lire la documentation OpenCV