因此,我正在使用 Alexa 的自定义部署模板。我刚刚开始使用 Alexa 进行编码,但我有 Python 经验。
我只是在玩弄提供的样板代码。我正在以 helloworld 意图进行测试,只是为了掌握一些东西。我搜索并查看了 Alexa 教程,但它们更多的是图像和声音。我正在专门研究静态数据。由于它是静态的,我不想使用 dynamoDB。我可能还有其他用途,为了保持免费套餐,我将保留有限的 dynamoDB 分配供以后使用。
因此,使用此代码,我在加载测试 JSON 时不会遇到任何错误。
class HelloWorldIntentHandler(AbstractRequestHandler):
"""Handler for Hello World Intent."""
def can_handle(self, handler_input):
# type: (HandlerInput) -> bool
return ask_utils.is_intent_name("HelloWorldIntent")(handler_input)
def handle(self, handler_input):
# type: (HandlerInput) -> Response
json_url = create_presigned_url("Media/json_data/test.json")
test_raw_data = requests.get(json_url).content
test_json_data = json.loads(test_raw_data)
print(test_json_data)
speak_output = "Hello World"
return (
handler_input.response_builder
.speak(speak_output)
# .ask("add a reprompt if you want to keep the session open for the user to respond")
.response
)
我在
cloudwatch
日志中收到以下内容。
{'test1': 'test one output', 'test2': 'test two output', 'test3': [{'test4': 'test four output', 'test44': 'test fourty four output', 'test444': 'test four hundred and forty four output'}]}
如果我尝试用打印引用数据(
test_json_data.test1
)。我从 Alex 那里收到了抱歉的消息,并在 cloudwatch
中收到了以下 Python 回溯。
AttributeError: 'dict' object has no attribute 'test1'
所以,这对我来说,它实际上是一个字符串,而不是一个 JSON,可能是由于编码原因,但为什么在 JSON 加载时不会出现错误?预签名的样板代码是:
def create_presigned_url(object_name):
"""Generate a presigned URL to share an S3 object with a capped expiration of 60 seconds
:param object_name: string
:return: Presigned URL as string. If error, returns None.
"""
s3_client = boto3.client('s3',
region_name=os.environ.get('S3_PERSISTENCE_REGION'),
config=boto3.session.Config(signature_version='s3v4',s3={'addressing_style': 'path'}))
try:
bucket_name = os.environ.get('S3_PERSISTENCE_BUCKET')
response = s3_client.generate_presigned_url('get_object',
Params={'Bucket': bucket_name,
'Key': object_name},
ExpiresIn=60*1)
except ClientError as e:
logging.error(e)
return None
# The response contains the presigned URL
return response
我是个白痴,有一段时间一直在编写其他东西,却忘记了 python 是如何工作的。没有点符号。