How to adjust the number of results returned when querying the Stackoverflow API?

陌路散爱 提交于 2019-12-13 14:18:18

问题


I'm using the Stackoverflow JSON API to retrieve questions marked with a given tag.

I have this small program in Java which retrieves questions marked with the "Java" tag.

public static void main(String[] args) throws Exception
{
    String urlString = "https://api.stackexchange.com/2.1/questions?order=desc&sort=votes&tagged=java&site=stackoverflow";

    URL url = new URL( urlString );

    BufferedReader reader = null;

    StringBuffer buffer = new StringBuffer();
    try
    {
        URLConnection connection = url.openConnection();

        InputStream isConn = connection.getInputStream();

        reader = new BufferedReader( new InputStreamReader( new GZIPInputStream( isConn ) ) );

        String inputLine;

        while (( inputLine = reader.readLine() ) != null)
        {
            buffer.append( inputLine );
        }
    }
    finally
    {
        if (reader != null)
        {
            reader.close();
        }
    }

    JSONObject jsonObject = new JSONObject( buffer.toString() );

    JSONArray jsonArray = jsonObject.getJSONArray( "items" );

    System.out.println( buffer );
    System.out.println( jsonArray.length() );
}

My problem is that it returns only 30 questions. Since my goal is to build a dataset for further textual analysis, I need to access way more than just 30 questions.

Is there a way to adjust the size of the returned list?

If not, how can I workaround this situation?


回答1:


Notice the has_more property in the returned JSON, this indicates that more results are available. You can page through these results using the page and pagesize parameters in the url. The issue I foresee is the code will be pulling a large number of questions considering it will iterate through all java questions, so you may want to add a conditional that stops at a certain number of pages. Here is a quick example:

public static void main(String[] args) throws Exception {

    BufferedReader reader = null;
    int page = 1;
    JSONObject jsonObject = null;
    try {
        while (jsonObject == null || jsonObject.getBoolean("has_more")) {
            String urlString = "https://api.stackexchange.com/2.1/questions?order=desc&sort=votes&tagged=java&site=stackoverflow&pagesize=100";
            urlString += "&page=" + page++;
            URL url = new URL(urlString);
            URLConnection connection = url.openConnection();

            InputStream isConn = connection.getInputStream();
            StringBuffer buffer = new StringBuffer();
            reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(isConn)));

            String inputLine;

            while ((inputLine = reader.readLine()) != null) {
                buffer.append(inputLine);
            }

            jsonObject = new JSONObject(buffer.toString());
            JSONArray jsonArray = jsonObject.getJSONArray("items");

            System.out.println(buffer);
            System.out.println(jsonArray.length());
        }
    } finally {
        if (reader != null) {
            reader.close();
        }
    }

}


来源:https://stackoverflow.com/questions/16638055/how-to-adjust-the-number-of-results-returned-when-querying-the-stackoverflow-api

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!