python - 查询搜索 API 烧瓶将所有内容打印两次
问题描述
首先让我说我没有参加考试,只是为将来的考试做准备。我正在尝试解决“从电影数据库中检索信息的 HTTP GET 方法”。问题
: 哪里需要查询 https://jsonmock.hackerrank.com/api/movies/search/?Title=substr(replace substr)。初始化titles数组以存储总字符串元素。将满足搜索条件的每部电影的标题存储在标题数组中。按升序对标题进行排序并将其作为您的答案返回。来自网站的查询响应是带有以下五个字段的 JSON 响应: page :当前页面。
per_page :每页的最大结果数。total :搜索结果中的电影总数。total_pages :为获得所有结果必须查询的总页数。data :包含电影信息的 JSON 对象数组,其中 Title 字段表示电影的标题。为了获得所有结果,您可能必须发出多个页面请求。要按编号请求页面,您的查询应阅读https://jsonmock.hackerrank.com/api/movies/search/?Title=substr&page=pageNumber,替换 substr 和 pageNumber。
我已经能够使用 python 解决它,但我的解决方案将所有内容打印两次。如果有人可以提出解决方法,我将不胜感激。谢谢你:)
import requests
import json
def getMovieTitles(substr):
Movietitles = []
connection = requests.get("https://jsonmock.hackerrank.com/api/movies/search/?Title={}".format(substr))
response = json.loads(connection.content.decode('utf-8'))
for page in range(0, response["total_pages"]):
page_response = requests.get("https://jsonmock.hackerrank.com/api/movies/search/?Title={}&page={}".format(substr, page + 1))
page_content = json.loads(page_response.content.decode('utf-8'))
for item in range(0, len(page_content["data"])):
Movietitles.append(str(page_content["data"][item]["Title"]))
Movietitles.sort()
return(Movietitles)
print(getMovieTitles("spiderman"))
解决方案
干得好。如果您取消注释我指出的行,您会看到发生了什么 - 几部电影具有相同的标题,但制作时间不同。您可以通过调用 set 来删除这些重复项,就像我在下面的代码中所做的那样。
import requests
import json
def getMovieTitles(substr):
Movietitles = []
connection = requests.get("https://jsonmock.hackerrank.com/api/movies/search/?Title={}".format(substr))
response = json.loads(connection.content.decode('utf-8'))
for page in range(0, response["total_pages"]):
page_response = requests.get("https://jsonmock.hackerrank.com/api/movies/search/?Title={}&page={}".format(substr, page + 1))
page_content = json.loads(page_response.content.decode('utf-8'))
for item in range(0, len(page_content["data"])):
Movietitles.append(str(page_content["data"][item]["Title"]))
# print(str(page_content["data"][item])) uncomment this to see what's going on - same movies, diff years
Movietitles = list(set(Movietitles))
Movietitles.sort()
return Movietitles
print(getMovieTitles("spiderman"))
推荐阅读
- node.js - 私有子网中的节点 AWS Lambda 无法返回回调
- python - 使用 tf.gradients 时出现 TensorFlow 错误:TypeError: Fetch argument None has invalid type
- microsoft-graph-api - 使用 microsoft-graph api 回复电子邮件时如何添加附件?
- azure - 将 Azure Active Directory 与 .NET Web Api 连接,身份验证始终为 false
- java - javax.mail.internet.MimeMessage 无法转换为 javax.mail.Message
- jquery - 用 AND 组合两个函数
- reactjs - Antd getFieldDecorator() 的选项触发不起作用
- javascript - 单击图像“推送”图像下方列表的其余部分
- java - 如何在詹金斯中运行硒测试
- apache-kafka - Kafka Connect HDFS (Azure) 持久化 Avro 值和字符串键