Search code examples
androidhttpurlconnectionskyscanner

Skyscanner Travel API / use private Apikey / return 429


I want use Travel Api in my Android app

First Test Harness Demo API key (prtl6749387986743898559646983194) returns 200, success Creating the Session and Polling the Session

However, while using the Dashboard private API key, it return 429 Too many request

Is there anything I need to do for using private API key?

my code:

public void run(String u) {
    try {
        // SystemClock.sleep(500);
        url = new URL(u);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        connection.setConnectTimeout(50 * 1000);
        connection.setReadTimeout(50 * 1000);
        connection.setRequestProperty("Cache-Control", "no-store");
        connection.setRequestProperty("Cache-Control", "no-cache");
        //        connection.setRequestProperty("If-None-Match", "no-store");
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        connection.setRequestProperty("Accept", "application/xml");
        connection.setRequestProperty("charset", "utf-8");

    /*    connection.setUseCaches(true);
        connection.setDoOutput(true);*/


        Log.v("Response", " parameter = " + Parameters);


        byte[] postData = Parameters.getBytes(StandardCharsets.UTF_8);
        int postDataLength = postData.length;
        connection.setRequestProperty("Content-Length", Integer.toString(postDataLength));
        OutputStream os = connection.getOutputStream();
        os.write(postData);
        os.flush();

        //  SystemClock.sleep(500);

        int responseCode = connection.getResponseCode();
        Log.v("Response", "Sending 'POST' request to URL : " + url);
        Log.v("Response", "Post parameters : " + Parameters);
        Log.v("Response", "Response Code : " + responseCode);
        Log.v("Response", "Message : " + connection.getResponseMessage());
        String result = connection.getHeaderField("Location");
        SettionKey = connection.getHeaderField("Location").substring(result.indexOf("v1.0/") + 5, result.length());
        Log.v("Response", "SessionKey = " + SettionKey);
        connection.disconnect();
        //  SystemClock.sleep(500);
    } catch (IOException e) {
        Log.v("Response", "Post Dead");
    }

}

public void get(String url) {
    try {
        Log.v("Response", "get");
        String url1 = url + "/" + SettionKey + "/?apiKey=" + apiKey;
        URL url2 = new URL(url1);

        HttpURLConnection connection = (HttpURLConnection) url2.openConnection();
        Log.v("Response", "url = " + url1);

        connection.setRequestMethod("GET");
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded.");
        connection.setRequestProperty("Accept", "application/xml");
        connection.setRequestProperty("Cache-Control", "no-cache");
        connection.setUseCaches(true);
        connection.setDefaultUseCaches(true);
        connection.setDoInput(true);

        int responseCode = connection.getResponseCode();

        Log.v("Response", " " + connection.getHeaderFields());
        Log.v("Response", "code   = " + responseCode);
        Log.v("Response", connection.getResponseMessage());

        code = responseCode + connection.getResponseMessage();
        Flight.put("code", code);
        InputStream is = null;

        try {
            is = new BufferedInputStream(connection.getInputStream());
            BufferedReader br = new BufferedReader(new InputStreamReader(is));

            setlist(br);
            //Log.v("Response","result = "+inputLine.toString());
        } catch (IOException e) {
            Log.v("Response", "read Dead.. ");
        }
        connection.disconnect();
    } catch (IOException e) {
        Log.v("Response", "GET Dead ");
    }
}

Solution

  • I've got same problems. Then I find out that:

    Flights Live Pricing service is currently suspended.

    You can check at here

    My solution is using demo apiKey for dev, and waiting for their service re-launch.