Я начинающий с Python. Попытка выяснить, что не так с Полли, поскольку, похоже, она не выводит действительный mp3.
Я свободно слежу за этими уроками: 1 2
но так как я не объединяю какие-либо файлы из-за ограничения символов, я не думаю, что мне нужно использовать Audiosegment или ffmpeg, верно?
Вот мой код:
import hashlib
import json
import tempfile
import praw, boto3
import os
import random
import time
polly = boto3.client('polly')
s3 = boto3.client('s3')
s3r = boto3.resource('s3')
DEFAULT_VOICE = os.getenv("DEFAULT_VOICE", "Celine")
SAMPLE_RATE = os.getenv("SAMPLE_RATE", "8000")
BUCKET_NAME = os.getenv("BUCKET_NAME", "pollybotreddit")
FILE_FORMAT = os.getenv("FILE_FORMAT", "mp3")
def build_sound(content, voice = 'Justin', SampleRate = SAMPLE_RATE):
for text in content:
resp = polly.synthesize_speech(
OutputFormat = "mp3",
Text = text,
TextType = "text",
VoiceId = voice
)
with open('test.mp3' , 'wb') as f:
sound = f.write(resp['AudioStream'].read())
return sound
def lambda_handler(event, content):
slashr = event.get('subreddit')
voice = event.get('voice', 'Joanna')
if not slashr:
raise ValueError("Bad Request: Not a subreddit")
reddit = praw.Reddit('bot1')
sub = reddit.subreddit(slashr)
titles = []
for submission in sub.hot(limit=5):
if not submission.stickied:
titles.append(submission.title)
article = random.choice(titles)
sound_data = build_sound(article, voice=voice)
final = sound_data + '.mp3'
s3.put_object(Bucket=BUCKET_NAME, ACL='public-read', Body=final, Key=article)
item = {
'subreddit': slashr,
's3': "{}/{}/{}".format(s3.meta.endpoint_url, BUCKET_NAME, article)
}
return item
lambda_handler({'subreddit':"politics"}, None)
ошибка дает мне это:
File "pollybot.py", line 91, in <module>
lambda_handler({'subreddit':"politics"}, None)
File "pollybot.py", line 79, in lambda_handler
final = sound_data + '.mp3'
TypeError: unsupported operand type(s) for +: 'int' and 'str'
и если я достану
final = sound_data + '.mp3'
Вывод Полли все еще является целым, а не объектом File, поэтому он дает мне это
botocore.exceptions.ParamValidationError: Parameter validation failed:
Invalid type for parameter Body, value: 3493, type: <class 'int'>, valid types: <class 'bytes'>, <class 'bytearray'>, file-like object
Любая помощь? Заранее спасибо.