WeatherGov API - просроченная прогнозная сетка - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть программа, которая извлекает список прогнозных ссылок с помощью веб-службы API weather.gov , а затем вызывает каждую ссылку, чтобы получить и сохранить данные о погоде для почтовых индексов, которые они могут просматриваться на нашей домашней странице в соответствии с настройками почтового индекса пользователя. В последнее время я вижу много ошибок 503 в нашем журнале ошибок, поэтому, когда я пошел проверить его и запустить несколько URL-адресов с помощью Postman, я получил следующий ответ:

{
    "correlationId": "36eb9a42-990d-4ca8-a24a-cd0c67985903",
    "title": "Forecast Grid Expired",
    "type": "https://api.weather.gov/problems/ForecastGridExpired",
    "status": 503,
    "detail": "The requested forecast grid was issued 2020-02-11T02:50:40+00:00 and has expired.",
    "instance": "https://api.weather.gov/requests/36eb9a42-990d-4ca8-a24a-cd0c67985903"
}

К сожалению Я не знаю, что это значит, когда истекает срок действия запрашиваемой сетки прогноза, и я не смог найти ничего в их документации для этого. Возможно, я что-то пропустил, или, возможно, у меня есть проблема в моем коде, которая вызывает эту проблему.

Это программа java, и она использует javax. net .ssl.HttpsURLConnection и java. net .URL:

URL url = new URL("https://api.weather.gov/gridpoints/BOX/21,35/forecast");
HttpsURLConnection httpsConn = (HttpsURLConnection)url.openConnection();
httpsConn.setRequestMethod(HttpMethod.GET);
httpsConn.setRequestProperty("Content-Type", "application/json");
httpsConn.setConnectTimeout((1000 * 60));
httpsConn.setReadTimeout((1000 * 60));
StringBuffer response = getApiResponse(httpsConn, 0);

private StringBuffer getApiResponse(HttpsURLConnection httpsConn, int counter){
    StringBuffer response = new StringBuffer();
    try{
        BufferedReader in = new BufferedReader(new InputStreamReader(httpsConn.getInputStream()));
        String inputLine;
        while((inputLine = in.readLine()) != null){
            response.append(inputLine);
        }
        in.close();
    }catch(Exception e){
        counter++;
        errorLog.add("ERROR: " + e.getMessage());
        errorLog.add("Number of attempted calls: " + counter);
        if(counter < 5){
            response = getApiResponse(httpsConn, counter);
        }else{
            errorLog.add("Max attempts made for this API Call.");
        }
    }
    return response;
}

Я обернул вызов в функцию, которая будет пытаться сделать вызов 5 раз, как я заметил, когда создавал эту программу, иногда вызов просто отключается , URL-адрес, который я использовал, оказался одним из тех, с которыми у меня возникли проблемы, похоже, что где-то с BOX вызывает ошибку выше 503.

Кто-нибудь еще сталкивался с такой проблемой - и как они это решили?

1 Ответ

0 голосов
/ 13 февраля 2020

Так что получается, что это не то, что мы можем решить сами. Хотя код состояния 503 означает, что вызываемый сервер не может обработать запрос (и я знаю, что это не ошибка с нашей стороны), я был озадачен полученным сообщением об ошибке, и мне было интересно, имеет ли это какое-либо отношение к как я настроил свой вызов в службу.

Это сообщение об ошибке в основном сводится к отключению службы, что означает, что мы ничего не можем сделать с нашей стороны, кроме как сообщить об отключении и дождаться результата . 1003 улучшите их сообщения об ошибках, чтобы было более понятно, что такое перерыв в обслуживании и какова проблема с совершенным вами звонком.

...