private static Map<String, BetterCacherCache> callAPI(final String uri, final boolean fullData) {
        try (ContextLogger cLog = new ContextLogger(Log.LogLevel.DEBUG, "BetterCacherAPI.callAPI, uri=%1$s, fullData=%2$b", uri, fullData)) {
            final BetterCacherCache[] caches = new HttpRequest().uri(uri)
                    .callTimeout(10000)
                    .requestJson(BetterCacherCache[].class).blockingGet();
            if (caches == null || caches.length == 0) {
                cLog.add("empty");
                return Collections.emptyMap();
            }
            cLog.add(caches.length + " results");
            final Map<String, BetterCacherCache> bcCaches = new HashMap<>();
            for (BetterCacherCache bcCache : caches) {
                if (!bcCache.error && bcCache.gccode != null) {
                    bcCache.setFullData(fullData);
                    bcCaches.put(bcCache.gccode, bcCache);
                }
            }
            cLog.add(bcCaches.size() + " caches");
            return bcCaches;
        } catch (Exception e) {
            logException(uri, e);
        }
        return Collections.emptyMap();
    }
Encapsulates the raw APi calls to bettercacher.org
main/src/main/java/cgeo/geocaching/connector/bettercacher/BetterCacherAPI.java