commit
5f9a0c8327
@ -0,0 +1,20 @@
|
||||
自動で無能ボイスを作成するスクリプトです。
|
||||
内容自体は二つの機能に分かれており、
|
||||
tokenをスクレイピングで取得する部分と、
|
||||
tokenを投げて無能ボイスをgenerateする部分から出来ています。
|
||||
複雑な処理は自分でも忘れると不安だったので、コメントで詳しく解説したつもりです。
|
||||
ぶっちゃけtokenを取得する部分は悪用すればニコニコやその他のアカウント大量作成も出来てしまう処理になっています。
|
||||
|
||||
使用方法
|
||||
1. speaktexts.txtをフォルダ内部に作成し、その中に一行毎に話してほしいテキストを入力する。
|
||||
2. python3 munou_final.pyを実行
|
||||
|
||||
必要となるモジュール
|
||||
requests
|
||||
mechanize
|
||||
bs4(BeautiulSoup)
|
||||
retrying
|
||||
pip install -r requirements.txt でインストールは出来るはずですを
|
||||
|
||||
今後
|
||||
必要となるか、気力があればコメント追記する
|
@ -0,0 +1,100 @@
|
||||
from bs4 import BeautifulSoup
|
||||
import mechanize
|
||||
import requests
|
||||
import time
|
||||
import random, string
|
||||
import os
|
||||
from retrying import retry
|
||||
|
||||
def register_submit(mailaddress):
|
||||
br = mechanize.Browser()
|
||||
br.set_handle_robots(False)
|
||||
|
||||
br.open("https://cloud.voicetext.jp/webapi/api_keys/new")
|
||||
#オープン
|
||||
|
||||
br.select_form(action="/webapi/api_keys/confirm")
|
||||
#フォーム選択
|
||||
|
||||
br["api_key[name]"] = "長谷川亮太"
|
||||
br["api_key[company]"] = "個人"
|
||||
br["api_key[email]"] = mailaddress
|
||||
br.find_control(id="api_key_api_purpose_ids_1").get(id="api_key_api_purpose_ids_1").selected = True
|
||||
br.find_control(id="api_key_accept_license").get(id="api_key_accept_license").selected = True
|
||||
br.submit()
|
||||
#個人情報を適当に
|
||||
|
||||
br.select_form(action="/webapi/api_keys")
|
||||
br.submit(name="commit")
|
||||
#確定ボタンをsubmit
|
||||
print("submitted")
|
||||
|
||||
|
||||
@retry
|
||||
def email_scrape(mailaddress):
|
||||
token = ""
|
||||
r = requests.get("https://generator.email/"+mailaddress)
|
||||
mailtext = r.text
|
||||
soupject = BeautifulSoup(mailtext,"html.parser")
|
||||
plist = soupject.find_all('p')
|
||||
p = [s for s in plist if "VoiceText" in s.text][0].text.splitlines()
|
||||
#ここのコードの解説。まずfind_allで<p>タグをすべて抽出しています。
|
||||
#その後、s for s in plistでfor文により配列を一要素ずつまわし、
|
||||
#if "voicetext" in で部分一致を判定しています。
|
||||
#s.textでテキストをstringとして取得しています。
|
||||
#その後、該当したものが配列として帰ってくるので、[0]のもののtextを再度取得してpに代入
|
||||
#そして最後にsplitlines()をし、文字列を改行でsplitしています。
|
||||
token = p[p.index("です。") - 2 ]
|
||||
#「です。」の完全一致を検索、それに-2する形でtokenを抽出。
|
||||
print(token)
|
||||
return token
|
||||
|
||||
def main():
|
||||
token = ""
|
||||
if os.path.exists("token.txt"):
|
||||
print("token.txt was found")
|
||||
try:
|
||||
with open("token.txt") as f:
|
||||
token = f.read().rstrip("\n")
|
||||
except Exception as e:
|
||||
print(e)
|
||||
else:
|
||||
print("No exists token.txt get token")
|
||||
|
||||
randomtext = ''.join([random.choice(string.ascii_letters + string.digits) for i in range(8)])
|
||||
mailaddress = randomtext + "soranoirohanani@ncpine.com"
|
||||
print(mailaddress)
|
||||
#メアドを適当に
|
||||
|
||||
register_submit(mailaddress)
|
||||
|
||||
print("https://generator.email/"+mailaddress)
|
||||
#generator.emailのURLを表示
|
||||
|
||||
token = email_scrape(mailaddress)
|
||||
|
||||
try:
|
||||
with open("token.txt",mode="w") as f:
|
||||
f.write(token)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
try:
|
||||
with open("speaktexts.txt") as f:
|
||||
speaktexts = f.readlines()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
for speaktext in speaktexts:
|
||||
filename = speaktext.rstrip("\n") + ".wav"
|
||||
print(filename)
|
||||
|
||||
r = requests.post(url="https://api.voicetext.jp/v1/tts",params={"text":speaktext,"speaker":"show","pitch":"150"},auth=(token,""))
|
||||
|
||||
try:
|
||||
with open(filename, 'xb') as saveFile:
|
||||
saveFile.write(r.content)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
main()
|
@ -0,0 +1,4 @@
|
||||
bs4
|
||||
mechanize
|
||||
requests
|
||||
retrying
|
Loading…
Reference in new issue