From 061bac468098d92a8a05d725aee77c5fb0c023cd Mon Sep 17 00:00:00 2001 From: Bananeweizen Date: Thu, 3 May 2012 23:28:02 +0200 Subject: new: online search by geo code for OX caches --- .../geocaching/connector/ConnectorFactory.java | 1 + .../src/cgeo/geocaching/connector/OXConnector.java | 41 ---------------- .../cgeo/geocaching/connector/ox/OXConnector.java | 56 ++++++++++++++++++++++ .../geocaching/connector/ox/OpenCachingApi.java | 48 +++++++++++++++++++ 4 files changed, 105 insertions(+), 41 deletions(-) delete mode 100644 main/src/cgeo/geocaching/connector/OXConnector.java create mode 100644 main/src/cgeo/geocaching/connector/ox/OXConnector.java create mode 100644 main/src/cgeo/geocaching/connector/ox/OpenCachingApi.java diff --git a/main/src/cgeo/geocaching/connector/ConnectorFactory.java b/main/src/cgeo/geocaching/connector/ConnectorFactory.java index 8f95028..0fb1efc 100644 --- a/main/src/cgeo/geocaching/connector/ConnectorFactory.java +++ b/main/src/cgeo/geocaching/connector/ConnectorFactory.java @@ -5,6 +5,7 @@ import cgeo.geocaching.SearchResult; import cgeo.geocaching.connector.gc.GCConnector; import cgeo.geocaching.connector.opencaching.ApiOpenCachingConnector; import cgeo.geocaching.connector.opencaching.OpenCachingConnector; +import cgeo.geocaching.connector.ox.OXConnector; import cgeo.geocaching.geopoint.Geopoint; import cgeo.geocaching.geopoint.Viewport; diff --git a/main/src/cgeo/geocaching/connector/OXConnector.java b/main/src/cgeo/geocaching/connector/OXConnector.java deleted file mode 100644 index cfde92f..0000000 --- a/main/src/cgeo/geocaching/connector/OXConnector.java +++ /dev/null @@ -1,41 +0,0 @@ -package cgeo.geocaching.connector; - -import cgeo.geocaching.cgCache; - -import java.util.regex.Pattern; - -/** - * connector for OpenCaching.com - * - */ -public class OXConnector extends AbstractConnector { - - private static final Pattern PATTERN_GEOCODE = Pattern.compile("OX[A-Z0-9]+", Pattern.CASE_INSENSITIVE); - - @Override - public boolean canHandle(String geocode) { - return PATTERN_GEOCODE.matcher(geocode).matches(); - } - - @Override - public String getCacheUrl(cgCache cache) { - return "http://www.opencaching.com/#!geocache/" + cache.getGeocode(); - } - - @Override - public String getName() { - return "OpenCaching.com"; - } - - @Override - public String getHost() { - return "www.opencaching.com"; - } - - @Override - public String getLicenseText(cgCache cache) { - // NOT TO BE TRANSLATED - return "" + getName() + " data licensed under the Creative Commons BY-SA 3.0 License"; - } - -} diff --git a/main/src/cgeo/geocaching/connector/ox/OXConnector.java b/main/src/cgeo/geocaching/connector/ox/OXConnector.java new file mode 100644 index 0000000..c81011f --- /dev/null +++ b/main/src/cgeo/geocaching/connector/ox/OXConnector.java @@ -0,0 +1,56 @@ +package cgeo.geocaching.connector.ox; + +import cgeo.geocaching.SearchResult; +import cgeo.geocaching.Settings; +import cgeo.geocaching.cgCache; +import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.connector.AbstractConnector; +import cgeo.geocaching.utils.CancellableHandler; + +import java.util.regex.Pattern; + +/** + * connector for OpenCaching.com + * + */ +public class OXConnector extends AbstractConnector { + + private static final Pattern PATTERN_GEOCODE = Pattern.compile("OX[A-Z0-9]+", Pattern.CASE_INSENSITIVE); + + @Override + public boolean canHandle(String geocode) { + return PATTERN_GEOCODE.matcher(geocode).matches(); + } + + @Override + public String getCacheUrl(cgCache cache) { + return "http://www.opencaching.com/#!geocache/" + cache.getGeocode(); + } + + @Override + public String getName() { + return "OpenCaching.com"; + } + + @Override + public String getHost() { + return "www.opencaching.com"; + } + + @Override + public String getLicenseText(cgCache cache) { + // NOT TO BE TRANSLATED + return "" + getName() + " data licensed under the Creative Commons BY-SA 3.0 License"; + } + + @Override + public SearchResult searchByGeocode(String geocode, String guid, cgeoapplication app, CancellableHandler handler) { + final cgCache cache = OpenCachingApi.searchByGeoCode(geocode); + if (cache == null) { + return null; + } + final SearchResult searchResult = new SearchResult(); + searchResult.addCache(cache); + return searchResult.filterSearchResults(false, false, Settings.getCacheType()); + } +} diff --git a/main/src/cgeo/geocaching/connector/ox/OpenCachingApi.java b/main/src/cgeo/geocaching/connector/ox/OpenCachingApi.java new file mode 100644 index 0000000..304429f --- /dev/null +++ b/main/src/cgeo/geocaching/connector/ox/OpenCachingApi.java @@ -0,0 +1,48 @@ +package cgeo.geocaching.connector.ox; + +import cgeo.geocaching.StoredList; +import cgeo.geocaching.cgCache; +import cgeo.geocaching.cgeoapplication; +import cgeo.geocaching.enumerations.LoadFlags.SaveFlag; +import cgeo.geocaching.files.GPX10Parser; +import cgeo.geocaching.network.Network; +import cgeo.geocaching.network.Parameters; +import cgeo.geocaching.utils.CryptUtils; +import cgeo.geocaching.utils.Log; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.http.HttpResponse; + +import java.util.Collection; +import java.util.EnumSet; + +public class OpenCachingApi { + + private static final String DEV_KEY = CryptUtils.rot13("PtqQnHo9RUTht3Np"); + + public static cgCache searchByGeoCode(final String geocode) { + final HttpResponse response = Network.getRequest("http://www.opencaching.com/api/geocache/" + geocode + ".gpx", new Parameters("Authorization", DEV_KEY)); + if (response == null) { + return null; + } + Collection caches = null; + try { + caches = new GPX10Parser(StoredList.STANDARD_LIST_ID).parse(response.getEntity().getContent(), null); + } catch (Exception e) { + Log.e("Error importing from OpenCaching.com", e); + } + if (caches != null && CollectionUtils.isNotEmpty(caches)) { + final cgCache cache = caches.iterator().next(); + cache.setUpdated(System.currentTimeMillis()); + cache.setDetailedUpdate(cache.getUpdated()); + cache.setDetailed(true); + + // save full detailed caches + cgeoapplication.getInstance().saveCache(cache, EnumSet.of(SaveFlag.SAVE_DB)); + return cache; + } + + return null; + } + +} -- cgit v1.1