package com.zqh.json; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.zqh.base.FileIOEncode; import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.List; import org.junit.Test; /** * Created by zqhxuyuan on 15-3-24. */ public class FZ12345 { String URL_getSearchCall = "http://218.5.2.252:8333/callcenter/api/fzCallServlet?act=getSearchCall&sq={}&format=json"; public static void main(String[] args) throws Exception{ } @Test public void testParseList()throws Exception{ String data = getJSON(URL_getSearchCall); JSONObject jo = JSON.parseObject(data); int totalNum = jo.getInteger("totalNum"); //84989 int start = 0; int limit = 200; String url = URL_getSearchCall; for (int i = 0; i < totalNum/limit; i++) { //totalNum/interval url = URL_getSearchCall + "&from=" + start + "&limit=" + limit; start += limit; parseList(url); } url = URL_getSearchCall + "&from=" + (totalNum/limit)*limit + "&limit=" + (totalNum-(totalNum/limit)*limit); parseList(url); } private static void parseList(String urlPrefix)throws Exception{ String data = getJSON(urlPrefix); JSONObject jo = JSON.parseObject(data); JSONArray array = jo.getJSONArray("data"); List<Call> list = JSON.parseArray(array.toString(), Call.class); for(Call c : list){ System.out.println(c); } } @Test public void testWriteJSONRecords2File()throws Exception{ String jsonFile = "/home/hadoop/data/internet/fz12345.json"; FileIOEncode.append(jsonFile,"["); long startT = System.currentTimeMillis(); String data = getJSON(URL_getSearchCall); JSONObject jo = JSON.parseObject(data); int totalNum = jo.getInteger("totalNum"); //84989 int start = 0; int limit = 200; String url = URL_getSearchCall; for (int i = 0; i < totalNum/limit; i++) { url = URL_getSearchCall + "&from=" + start + "&limit=" + limit; start += limit; data = batchCallStr(url).replaceAll("},", "},\n") + ",\n"; FileIOEncode.append(jsonFile,data); } url = URL_getSearchCall + "&from=" + (totalNum/limit)*limit + "&limit=" + (totalNum-(totalNum/limit)*limit); data = batchCallStr(url).replaceAll("},","},\n") + "]"; FileIOEncode.append(jsonFile,data); System.out.println("over:::"+(System.currentTimeMillis() - start)/1000); } private static String batchCallStr(String urlPrefix) throws Exception{ String data = getJSON(urlPrefix); JSONObject jo = JSON.parseObject(data); JSONArray array = jo.getJSONArray("data"); String calls = array.toString().substring(1,array.toString().length()-1); //{},{} return calls; } @Test public void testStartAndLimit() throws Exception{ String data = getJSON(URL_getSearchCall); JSONObject jo = JSON.parseObject(data); int totalNum = jo.getInteger("totalNum"); //84989 int start = 0; int limit = 200; String url = URL_getSearchCall; for (int i = 0; i < totalNum/limit; i++) { //totalNum/interval url = URL_getSearchCall + "&from=" + start + "&limit=" + limit; System.out.println(url); start += limit; } url = URL_getSearchCall + "&from=" + (totalNum/limit)*limit + "&limit=" + (totalNum-(totalNum/limit)*limit); System.out.println(url); } //URL Connect Result private static String getJSON(String url) throws Exception{ return getJSON(url, 5000); } public static String getJSON(String url, int timeout) throws Exception{ try { URL u = new URL(url); HttpURLConnection c = (HttpURLConnection) u.openConnection(); c.setRequestMethod("GET"); c.setRequestProperty("Content-length", "0"); c.setUseCaches(false); c.setAllowUserInteraction(false); //c.setConnectTimeout(timeout); //c.setReadTimeout(timeout); c.connect(); int status = c.getResponseCode(); switch (status) { case 200: case 201: BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream())); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line+"\n"); } br.close(); return sb.toString(); } } catch (MalformedURLException ex) { //Logger.getLogger(DebugServer.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { //Logger.getLogger(DebugServer.class.getName()).log(Level.SEVERE, null, ex); } return null; } }