首页 > 解决方案 > 查询搜索 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"))

标签: pythonhtmljsonpython-3.x

解决方案


干得好。如果您取消注释我指出的行,您会看到发生了什么 - 几部电影具有相同的标题,但制作时间不同。您可以通过调用 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"))

推荐阅读