为了解决此难题,请编写HTTP GET方法以从特定电影数据库中检索信息。完成编辑器中的功能; 它有一个参数:一个字符串,substr。该功能必须执行以下任务:
•页面:当前页面。
•per_page:每页的最大结果数。
•总数:标题中包含substring substr的此类电影的总数。
•total_pages:要获得所有结果必须查询的总页数。
•数据:包含电影信息的JSON对象数组,其中“标题”字段表示电影的标题。请注意,此字段是分页的,因此,为了合并分页,必须查询https://jsonmock.hackerrank.com/api/movies/search/?Title=substr&page=pageNumber,其中pageNumber是表示要显示的页面的整数喜欢观看(例如1、2等)。
创建一个名为title的字符串数组来存储元素总数。对于结果的每一页,将每个电影的标题存储在titles数组中。
按升序对标题进行排序,然后将其作为答案。
输入格式
单个字符串substr,表示您必须查询的子字符串。
输出格式
返回一个与电影标题相对应的字符串数组,这些电影标题中的susbtr以升序排列。
样本输入0
蜘蛛侠
样本输出0
说明0
对于此示例,我们希望所有电影标题都包含子字符串蜘蛛侠。查询https://jsonmock.hackerrank.com/api/movies/search/?Title=spiderman&page=1的响应为:
{
"page": "1",
"per_page": 10,
"total": 13,
"total_pages": 2,
"data": [
{
"Poster": "https://images-na.ssl-images-amazon.com/images/M/MV5BYjFhN2RjZTctMzA2Ni00NzE2LWJmYjMtNDAyYTllOTkyMmY3XkEyXkFqcGdeQXVyNTA0OTU0OTQ@._V1_SX300.jpg",
"Title": "Italian Spiderman",
"Type": "movie",
"Year": "2007",
"imdbID": "tt2705436"
},
{
"Poster": "https://images-na.ssl-images-amazon.com/images/M/MV5BMjQ4MzcxNDU3N15BMl5BanBnXkFtZTgwOTE1MzMxNzE@._V1_SX300.jpg",
"Title": "Superman, Spiderman or Batman",
"Type": "movie",
"Year": "2011",
"imdbID": "tt2084949"
},
{
"Poster": "N/A",
"Title": "Spiderman",
"Type": "movie",
"Year": "1990",
"imdbID": "tt0100669"
},
{
"Poster": "N/A",
"Title": "Spiderman",
"Type": "movie",
"Year": "2010",
"imdbID": "tt1785572"
},
{
"Poster": "N/A",
"Title": "Fighting, Flying and Driving: The Stunts of Spiderman 3",
"Type": "movie",
"Year": "2007",
"imdbID": "tt1132238"
},
{
"Poster": "http://ia.media-imdb.com/images/M/MV5BMjE3Mzg0MjAxMl5BMl5BanBnXkFtZTcwNjIyODg5Mg@@._V1_SX300.jpg",
"Title": "Spiderman and Grandma",
"Type": "movie",
"Year": "2009",
"imdbID": "tt1433184"
},
{
"Poster": "N/A",
"Title": "The Amazing Spiderman T4 Premiere Special",
"Type": "movie",
"Year": "2012",
"imdbID": "tt2233044"
},
{
"Poster": "N/A",
"Title": "Amazing Spiderman Syndrome",
"Type": "movie",
"Year": "2012",
"imdbID": "tt2586634"
},
{
"Poster": "N/A",
"Title": "Hollywood's Master Storytellers: Spiderman Live",
"Type": "movie",
"Year": "2006",
"imdbID": "tt2158533"
},
{
"Poster": "N/A",
"Title": "Spiderman 5",
"Type": "movie",
"Year": "2008",
"imdbID": "tt3696826"
}]}
Run Code Online (Sandbox Code Playgroud)
查询https://jsonmock.hackerrank.com/api/movies/search/?Title=spiderman&page=2的响应为:
{
"page": "2",
"per_page": 10,
"total": 13,
"total_pages": 2,
"data": [
{
"Poster": "N/A",
"Title": "They Call Me Spiderman",
"Type": "movie",
"Year": "2016",
"imdbID": "tt5861236"
},
{
"Poster": "N/A",
"Title": "The Death of Spiderman",
"Type": "movie",
"Year": "2015",
"imdbID": "tt5921428"
},
{
"Poster": "https://images-na.ssl-images-amazon.com/images/M/MV5BZDlmMGQwYmItNTNmOS00OTNkLTkxNTYtNDM3ZWVlMWUyZDIzXkEyXkFqcGdeQXVyMTA5Mzk5Mw@@._V1_SX300.jpg",
"Title": "Spiderman in Cannes",
"Type": "movie",
"Year": "2016",
"imdbID": "tt5978586"
}]}
Run Code Online (Sandbox Code Playgroud)
每个响应页面中每个电影的“标题”字段的相应值为:
然后,我们将每个标题存储在titles数组中,以升序对其进行排序,然后将其作为答案返回。
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
import java.net.*;
import com.google.gson.*;
public class Solution {
/*
* Complete the function below.
*/
static String[] getMovieTitles(String substr) {
//complete function here
}
public static void main(String[] args) throws IOException{
Scanner in = new Scanner(System.in);
final String fileName = System.getenv("OUTPUT_PATH");
BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
String[] res;
String _substr;
try {
_substr = in.nextLine();
} catch (Exception e) {
_substr = null;
}
res = getMovieTitles(_substr);
for(int res_i=0; res_i < res.length; res_i++) {
bw.write(String.valueOf(res[res_i]));
bw.newLine();
}
bw.close();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 14
这就是你要找的:
String[] getMovieTitles(String substr) {
String response;
int startPage = 1;
int totalPages = Integer.MAX_VALUE;
List<String> titles = new ArrayList<>();
while (startPage <= totalPages) {
try {
URL obj = new URL("https://jsonmock.hackerrank.com/api/movies/search/?Title=" + substr + "&page=" + startPage);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
while ((response = in.readLine()) != null) {
JsonObject convertedObject = new Gson().fromJson(response, JsonObject.class);
totalPages = convertedObject.get("total_pages").getAsInt();
JsonArray data = convertedObject.getAsJsonArray("data");
for (int i = 0; i < data.size(); i++) {
String title = data.get(i).getAsJsonObject().get("Title").getAsString();
titles.add(title);
}
}
in.close();
startPage++;
} catch (Exception ex) {
ex.printStackTrace();
}
}
Collections.sort(titles);
return titles.toArray(new String[0]);
}
Run Code Online (Sandbox Code Playgroud)
这是一个Javascript答案。
var https = require('https');
function fetchData(substr) {
pageNum = 1;
let url = 'https://jsonmock.hackerrank.com/api/movies/search/?Title=' + substr + "&page=" + pageNum;
https.get(url, (res) => {
res.setEncoding('utf8');
res.on('data', function(body) {
let dataRec = JSON.parse(body);
let movies = dataRec.data;
let totPages = dataRec.total_pages;
let sortArray = [];
movies.map((a) => {
sortArray.push(a.Title)
})
for (let i = 2; i <= totPages; i++) {
let newPage = i;
let url1 = 'https://jsonmock.hackerrank.com/api/movies/search/?Title=' + substr + "&page=" + newPage;
https.get(url1, (res) => {
res.setEncoding('utf8');
res.on('data', function(body) {
let newData = JSON.parse(body);
let newMovies = newData.data;
for (let i = 0; i < newMovies.length; i++) {
sortArray.push(newMovies[i].Title);
}
console.log(sortArray.sort());
})
})
}
})
})
}
//primary function
function getMovieTitles(substr) {
fetchData(substr);
}
getMovieTitles("spiderman");Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16062 次 |
| 最近记录: |