#!/usr/bin/env python
+#
+# THIS IS NO LONGER SUPPORTED
+#
+print """
+This script no longer works after the geocaching.com website update see:
+ http://blog.geocaching.com/2011/05/preview-of-geocaching-com-may-4th-website-release/
+
+It is now recommended to use the geo-* tools instead:
+ http://geo.rkkda.com/
+"""
+import sys
+sys.exit(1)
+
+#
+# One day this script could be resurrected, as the geo-* tools are not perhaps the fastest...
+#
+
#
# gcget -- screen scrape Geocaching.com's annoying web interface
# aka SHOW ME THE CACHE!!!
#
#
try:
- opts, args = getopt.gnu_getopt(sys.argv[1:], "u:p:", ["help"])
+ opts, args = getopt.gnu_getopt(sys.argv[1:], "u:p:d", ["help"])
except getopt.GetoptError:
# print help information and exit:
help()
sys.exit(2)
+DEBUG = False
+
for o, a in opts:
if o == "-p":
PASS = a
if o == "--help" or o == "-h":
help()
sys.exit()
+ if o == "-d":
+ DEBUG = True
if len(args) < 2:
help()
sys.exit()
#########################
-
-ll = args[0].split(",")
-lat = ll[0]
-lon = ll[1]
-
+#ll = args[0].split(",")
+#lat = ll[0]
+#lon = ll[1]
+#The following line replaced the previous 3 lines.
+lat, lon = args[0].split(",")
+
if len(args) >= 3:
maxdist = args[2]
else:
from mechanize import Browser
import ClientForm
+# get magic number for "Next" button.
+# this is normally 16 (link hidden is $ctl16), unless there are less than 10 pages of results,
+# in which case it will be less (e.g. 09 for 3 pages of results)
def getmagicnumber(b):
for i in range(16,0,-1):
- if re.compile("pgrBottom..ctl%d" % i).search(b.response().get_data()):
+ if re.compile("pgrBottom.ctl%02d" % i).search(b.response().get_data()):
return i
- return 0
+ return None
b=Browser()
b.open("http://geocaching.com/seek/")
-b.follow_link(text="log in")
+b.follow_link(text="Log in")
b.select_form(nr=0)
-b["myUsername"] = USER
-b["myPassword"] = PASS
+# The Username and Password fields on the Login form changed
+b["ctl00$ContentBody$myUsername"] = USER
+b["ctl00$ContentBody$myPassword"] = PASS
b.submit()
magicnumber = 0 # the ctl number of Next. get only once
try:
b.select_form("form4")
except:
+ b.select_form("form4")
print >> sys.stderr, "Invalid username/password"
+ if DEBUG:
+ f=open("gcget.badlogin.html","w")
+ f.write(b.response().get_data())
+ f.close()
+ print >> sys.stderr, "Dumping last HTML page recieved into gcget.badlogin.html"
sys.exit()
+
b["origin_lat"] = lat
b["origin_long"] = lon
b["dist"] = maxdist
if not magicnumber:
magicnumber = getmagicnumber(b)
+ if not magicnumber:
+# print "couldn't find magic number!" # why does this happen?
+ break
b.select_form(nr=0)
- [f for f in b.forms()][0].new_control("hidden", "pgrBottom$_ctl%d" % magicnumber, {})
+ [f for f in b.forms()][0].new_control("hidden", "ctl00$ContentBody$pgrBottom$ctl%02d" % magicnumber, {})
b.submit()
sys.stderr.write("\n")
# f=open("delmeNOW","w")
# f.write(b.response().get_data())
# f.close()
+