我在 AWS Lambda 中有一个函数,它连接到 Twitter API 并返回与我通过事件提供的特定搜索查询匹配的推文。该函数的简化版本如下。我使用了一些辅助函数get_secret来管理 API 密钥,process_tweet它们限制了发回的数据,并执行诸如将创建日期转换为字符串之类的操作。最终结果是我应该取回字典列表。
def lambda_handler(event, context):
twitter_secret = get_secret("twitter")
auth = tweepy.OAuthHandler(twitter_secret['api-key'],
twitter_secret['api-secret'])
auth.set_access_token(twitter_secret['access-key'],
twitter_secret['access-secret'])
api = tweepy.API(auth)
cursor = tweepy.Cursor(api.search,
q=event['search'],
include_entities=True,
tweet_mode='extended',
lang='en')
tweets = list(cursor.items())
tweets = [process_tweet(t) for t in tweets if not t.retweeted]
return json.dumps({"tweets": tweets})
然后在我的桌面上,我有调用 lambda 函数的代码。
aws_lambda = boto3.client('lambda', region_name="us-east-1")
payload = {"search": "paint%20protection%20film filter:safe"}
lambda_response = aws_lambda.invoke(FunctionName="twitter-searcher",
InvocationType="RequestResponse",
Payload=json.dumps(payload))
results = lambda_response['Payload'].read()
tweets = results.decode('utf-8')
问题是json.dumps在 lambda 中输出输出和在 Python 中读取有效负载之间的某个地方,数据变得很糟糕。例如,一个应该\n变成的换行符\\\\n,所有的双引号都存储为\\"并且 Unicode 字符都以 为前缀\\。所以,当我的桌面上的 Python 接收到转义字符时,所有被转义的东西。考虑返回的列表的这个元素(手动格式化)。
'{\\"userid\\": 190764134,
\\"username\\": \\"CapitalGMC\\",
\\"created\\": \\"2018-09-02 15:00:00\\",
\\"tweetid\\": 1036267504673337344,
\\"text\\": \\"Protect your vehicle\'s paint! Find out how on this week\'s blog.
\\\\ud83d\\\\udc47\\\\n\\\\nhttps://url/XYMxPhVhdH https://url/mFL2Zv8nWW\\"}'
我可以使用正则表达式来解决一些问题(\\"和\\\\n),但 Unicode 很棘手,因为即使我匹配它,我如何用正确转义的字符替换它?当我在 R 中使用该aws.lambda包执行此操作时,一切都很好,没有奇怪的转义符。
我在桌面上做错了什么 AWS Lambda 的响应会导致数据乱码?
繁星淼淼
动漫人物
相关分类