2013-05-19 1 views
3

Stackoverflow JSON API를 사용하여 주어진 태그로 표시된 질문을 검색하고 있습니다. Stackoverflow API를 쿼리 할 때 반환되는 결과 수를 조정하는 방법?

는 나는 "자바"태그로 표시 질문을 검색 자바에서이 작은 프로그램이 있습니다.

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()); 
} 

내 문제는 30 개의 질문 만 반환한다는 것입니다. 추가 텍스트 분석을위한 데이터 세트를 작성하는 것이 목표이므로 30 개 이상의 질문에 접근해야합니다.

반환 된 목록의 크기를 조정하는 방법이 있나요? 그렇지 않으면

, 어떻게이 상황을 해결할 수 있습니다?

답변

2

공지 반환 JSONhas_more 속성이 더 많은 결과를 사용할 수 있음을 나타냅니다. URL의 pagepagesize 매개 변수를 사용하여 이러한 결과를 페이지 할 수 있습니다. 내가 예견 문제는 코드가 모든 자바 질문을 반복한다 고려 질문의 큰 숫자를 당기는 것입니다, 그래서 당신은 페이지의 특정 번호에서 정지하는 조건을 추가 할 수 있습니다.

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(); 
     } 
    } 

} 
+0

업데이트 된 코드를 참조하십시오 여기에 빠른 예입니다. –

+0

Java 태그로 표시된 질문을 쿼리하는 것은 그 예일뿐입니다. 실제로 더 엄격한 필터를 사용하겠습니다. 하지만 검색된 페이지의 수를 기반으로 정지 조건을 추가 할 것입니다. 답변 해주셔서 감사합니다. – EijiAdachi

+0

@EijiAdachi 기꺼이 도와 드릴 수 있습니다. 좋은 질문! –