private static SearchResult searchByMap(final IConnector con, final Parameters params) {
        final String page = GCLogin.getInstance().getRequestLogged(GCConstants.URL_LIVE_MAP, params);

        if (StringUtils.isBlank(page)) {
            Log.w("GCParser.searchByMap: No data from server");
            return null;
        }

        final String sessionToken = TextUtils.getMatch(page, GCConstants.PATTERN_SESSIONTOKEN, "");
        if (StringUtils.isBlank(sessionToken)) {
            Log.w("GCParser.searchByMap: Failed to retrieve session token");
            return null;
        }

        params.add("st", sessionToken);

        final String pqJson = GCLogin.getInstance().getRequestLogged("https://tiles01.geocaching.com/map.pq", params);

        SearchResult searchResult;
        try {
            searchResult = parseMap(con, "https://tiles01.geocaching.com/map.pq" + "?" + params, pqJson, 0);
        } catch (JsonProcessingException e) {
            searchResult = null;
        }
        if (searchResult == null || CollectionUtils.isEmpty(searchResult.getGeocodes())) {
            Log.w("GCParser.searchByAny: No cache parsed");
            return searchResult;
        }

        final SearchResult search = searchResult.putInCacheAndLoadRating();

        GCLogin.getInstance().getLoginStatus(page);

        return search;
    }
Parse cache from text and return either an error code or a cache object in a pair. Note that inline logs are
not parsed nor saved, while the cache itself is.

@param pageIn  the page text to parse
@param handler the handler to send the progress notifications to
@return a pair, with a {@link StatusCode} on the left, and a non-null cache object on the right
iff the status code is {@link StatusCode#NO_ERROR}.
main/src/main/java/cgeo/geocaching/connector/gc/GCParser.java