iracing.webapi.WorldRecordsParser.java Source code

Java tutorial

Introduction

Here is the source code for iracing.webapi.WorldRecordsParser.java

Source

package iracing.webapi;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

/**
 *
 * @author Christian Aylward
 * @version 1.0.0
 */
public class WorldRecordsParser extends JsonParserBase {

    public static void main(String[] args) {
        //carid=33&custid=29462&format=json&lowerbound=1&order=asc&seasonyear=2011&sort=practice&trackid=46&upperbound=5
        String s = "{\"m\":{\"1\":\"clubname\",\"2\":\"countrycode\",\"3\":\"sublevel\",\"4\":\"irating\",\"5\":\"timetrial_subsessionid\",\"6\":\"qualify\",\"7\":\"displayname\",\"8\":\"practice_start_time\",\"9\":\"season_quarter\",\"10\":\"clubid\",\"11\":\"race\",\"12\":\"helmpattern\",\"13\":\"licenseclass\",\"14\":\"season_year\",\"15\":\"ttrating\",\"16\":\"licensegroup\",\"17\":\"race_subsessionid\",\"18\":\"timetrial_start_time\",\"19\":\"qualify_subsessionid\",\"20\":\"licenselevel\",\"21\":\"trackid\",\"22\":\"custrow\",\"23\":\"timetrial\",\"24\":\"helmcolor1\",\"25\":\"helmcolor2\",\"26\":\"custid\",\"27\":\"helmcolor3\",\"28\":\"carid\",\"29\":\"catid\",\"30\":\"region\",\"31\":\"practice_subsessionid\",\"32\":\"rowcount\",\"33\":\"race_start_time\",\"34\":\"practice\",\"35\":\"qualify_start_time\",\"36\":\"rn\",\"37\":\"category\"},\"d\":{\"22\":80,\"32\":761,\"r\":[{\"1\":\"Australia%2FNZ\",\"2\":\"AU\",\"3\":475,\"4\":4733,\"5\":\"\",\"6\":\"\",\"7\":\"Christian+Aylward\",\"8\":1310173279000,\"9\":\"\",\"10\":34,\"11\":\"\",\"12\":48,\"13\":\"A+4.68\",\"14\":\"2011\",\"15\":2308,\"16\":5,\"17\":\"\",\"18\":0,\"19\":\"\",\"20\":20,\"21\":46,\"23\":\"\",\"24\":111,\"25\":255,\"26\":29462,\"27\":127,\"28\":33,\"29\":2,\"30\":\"Region+1\",\"31\":3772373,\"33\":0,\"34\":\"1%3A01.648\",\"35\":0,\"36\":\"\",\"37\":\"Road\"},{\"1\":\"DE-AT-CH\",\"2\":\"DE\",\"3\":481,\"4\":5448,\"5\":3785098,\"6\":\"1%3A00.534\",\"7\":\"Martin+Kr%C3%B6nke\",\"8\":1318764014000,\"9\":\"\",\"10\":42,\"11\":\"1%3A01.618\",\"12\":9,\"13\":\"A+3.57\",\"14\":\"2011\",\"15\":2488,\"16\":5,\"17\":3781478,\"18\":1310387880000,\"19\":3780856,\"20\":28,\"21\":46,\"23\":\"1%3A01.650\",\"24\":255,\"25\":240,\"26\":58404,\"27\":112,\"28\":33,\"29\":2,\"30\":\"Region+1\",\"31\":4301721,\"33\":1310325300000,\"34\":\"1%3A00.338\",\"35\":1310316300000,\"36\":1,\"37\":\"Road\"},{\"1\":\"Australia%2FNZ\",\"2\":\"AU\",\"3\":438,\"4\":6401,\"5\":\"\",\"6\":\"1%3A00.488\",\"7\":\"Luke+McLean\",\"8\":1302177958000,\"9\":\"\",\"10\":34,\"11\":\"1%3A02.897\",\"12\":60,\"13\":\"P+2.34\",\"14\":\"2011\",\"15\":2723,\"16\":7,\"17\":3349615,\"18\":0,\"19\":3349501,\"20\":28,\"21\":46,\"23\":\"\",\"24\":22,\"25\":116,\"26\":18209,\"27\":118,\"28\":33,\"29\":2,\"30\":\"Region+2\",\"31\":3338537,\"33\":1302386400000,\"34\":\"1%3A00.374\",\"35\":1302384600000,\"36\":2,\"37\":\"Road\"},{\"1\":\"Eastern+Canada\",\"2\":\"CA\",\"3\":499,\"4\":6760,\"5\":\"\",\"6\":\"1%3A00.683\",\"7\":\"Shawn+Purdy\",\"8\":1302177958000,\"9\":\"\",\"10\":15,\"11\":\"1%3A02.046\",\"12\":37,\"13\":\"P+3.14\",\"14\":\"2011\",\"15\":3238,\"16\":7,\"17\":3349615,\"18\":0,\"19\":3349501,\"20\":18,\"21\":46,\"23\":\"\",\"24\":254,\"25\":243,\"26\":16110,\"27\":139,\"28\":33,\"29\":2,\"30\":\"Region+1\",\"31\":3338537,\"33\":1302386400000,\"34\":\"1%3A00.411\",\"35\":1302384600000,\"36\":3,\"37\":\"Road\"},{\"1\":\"Iberia\",\"2\":\"PT\",\"3\":252,\"4\":4678,\"5\":\"\",\"6\":\"1%3A00.735\",\"7\":\"Joao+Vaz\",\"8\":1302377052000,\"9\":\"\",\"10\":38,\"11\":\"1%3A01.923\",\"12\":30,\"13\":\"P+2.28\",\"14\":\"2011\",\"15\":1304,\"16\":7,\"17\":3349615,\"18\":0,\"19\":3777133,\"20\":18,\"21\":46,\"23\":\"\",\"24\":128,\"25\":11,\"26\":30569,\"27\":218,\"28\":33,\"29\":2,\"30\":\"Region+4\",\"31\":3349039,\"33\":1302386400000,\"34\":\"1%3A00.569\",\"35\":1310251500000,\"36\":4,\"37\":\"Road\"},{\"1\":\"New+England\",\"2\":\"US\",\"3\":496,\"4\":7405,\"5\":\"\",\"6\":\"1%3A00.432\",\"7\":\"Jake+Stergios\",\"8\":1318424480000,\"9\":\"\",\"10\":12,\"11\":\"1%3A00.940\",\"12\":9,\"13\":\"A+4.85\",\"14\":\"2011\",\"15\":2640,\"16\":5,\"17\":4820478,\"18\":0,\"19\":4291560,\"20\":28,\"21\":46,\"23\":\"\",\"24\":116,\"25\":240,\"26\":27868,\"27\":240,\"28\":33,\"29\":2,\"30\":\"Region+4\",\"31\":4281160,\"33\":1326647700000,\"34\":\"1%3A00.576\",\"35\":1318599900000,\"36\":5,\"37\":\"Road\"}]}}";
        WorldRecords records = parse(s, false);
        for (WorldRecord record : records.getRecords()) {
            s = record.getRecordNumber() + " : " + record.getDriver().getName();
            s += " (" + record.getPractice() + ")";
            System.err.println(s);
        }
    }

    static WorldRecords parse(String json, boolean includeApiUserRow) {
        JSONParser parser = new JSONParser();
        WorldRecords output = null;
        try {
            JSONObject root = (JSONObject) parser.parse(json);
            output = new WorldRecords();
            JSONObject root2 = (JSONObject) root.get("d");
            output.setApiUserRow(getLong(root2, "22"));
            output.setTotalResults(getLong(root2, "32"));
            JSONArray rootArray = (JSONArray) root2.get("r");
            List<WorldRecord> recordList = new ArrayList<WorldRecord>();
            for (int i = 0; i < rootArray.size(); i++) {
                JSONObject r = (JSONObject) rootArray.get(i);
                long recordNumber = getLong(r, "36");
                if (!includeApiUserRow && recordNumber == 0)
                    continue;
                WorldRecord wr = new WorldRecord();
                wr.setClubName(getString(r, "1", true));
                wr.setCountryCode(getString(r, "2"));
                wr.setLicenseSubLevel(getInt(r, "3"));
                wr.setIrating(getInt(r, "4"));
                wr.setTimeTrialSubSessionId(getLong(r, "5"));
                wr.setQualify(getString(r, "6", true));
                IracingCustomer driver = new IracingCustomer();
                driver.setId(getLong(r, "26"));
                driver.setName(getString(r, "7", true));
                wr.setDriver(driver);
                long l = getLong(r, "8");
                if (l > 0)
                    wr.setPracticeStartTime(new Date(l));
                wr.setSeasonQuarter(getInt(r, "9"));
                wr.setClubId(getInt(r, "10"));
                wr.setRace(getString(r, "11", true));
                wr.setLicenseSubLevelText(getString(r, "13", true));
                wr.setSeasonYear(getInt(r, "14"));
                wr.setTimeTrialRating(getInt(r, "15"));
                wr.setLicenseGroupId(getInt(r, "16"));
                wr.setRaceSubSessionId(getLong(r, "17"));
                l = getLong(r, "18");
                if (l > 0)
                    wr.setTimeTrialStartTime(new Date(l));
                wr.setQualifyingSubSessionId(getLong(r, "19"));
                wr.setLicenseLevelId(getInt(r, "20"));
                wr.setTrackId(getInt(r, "21"));
                wr.setTimeTrial(getString(r, "23", true));
                wr.setCarId(getInt(r, "28"));
                wr.setCategoryId(getInt(r, "29"));
                wr.setRegionName(getString(r, "30", true));
                wr.setPracticeSubSessionId(getLong(r, "31"));
                l = getLong(r, "33");
                if (l > 0)
                    wr.setRaceStartTime(new Date(l));
                wr.setPractice(getString(r, "34", true));
                l = getLong(r, "35");
                wr.setRecordNumber(recordNumber);
                if (l > 0)
                    wr.setQualifyingStartTime(new Date(l));
                wr.setCategoryName(getString(r, "37"));
                recordList.add(wr);
            }
            output.setRecords(recordList);
        } catch (ParseException ex) {
            Logger.getLogger(WorldRecordsParser.class.getName()).log(Level.SEVERE, null, ex);
        }
        return output;
    }

}