]> git.street.me.uk Git - andy/viking.git/commitdiff
Tools that may or may not be helpful/fun
authorEvan Battaglia <gtoevan@gmx.net>
Sat, 17 Sep 2005 04:01:33 +0000 (04:01 +0000)
committerEvan Battaglia <gtoevan@gmx.net>
Sat, 17 Sep 2005 04:01:33 +0000 (04:01 +0000)
tools/README [new file with mode: 0644]
tools/gcget [new file with mode: 0755]
tools/googledirections [new file with mode: 0755]

diff --git a/tools/README b/tools/README
new file mode 100644 (file)
index 0000000..4447231
--- /dev/null
@@ -0,0 +1,5 @@
+Try this:
+./googledirections "boston, ma" "new york, ny" | ../src/viking -
+
+Or edit gcget with your geocaching.com username and password and try this:
+./gcget 94704 50 2>/dev/null | ../src/viking -
diff --git a/tools/gcget b/tools/gcget
new file mode 100755 (executable)
index 0000000..f00b947
--- /dev/null
@@ -0,0 +1,122 @@
+#!/usr/bin/perl
+#
+# gcget 34.25,-118.25 100 > yeah.loc
+# ./gcget "Johnstown,CA" 10|gc2gpspoint - -|viking -
+#
+# have to make viking-remote allow multiple points. maybe just regular input + maps ?
+
+$USERNAME="username";
+$PASSWORD="password";
+
+$what = $ARGV[0];
+if (!$what) {
+  print "Nothing to do!\nUsage: gcget zip/lat,lon/lat.mm.mmm,lon.mm.mmm/address [max]";
+  exit(0);
+}
+
+
+$zip = $lat = $lon = "";
+if ( $what =~ /^(-?[0-9]{0,3}(\.[0-9]{0,9})?),(-?[0-9]{0,3}(\.[0-9]{0,9})?)$/ ) {
+  ($lat,$lon) = ($1,$3);
+} elsif ( $what =~ /^(-?[0-9]{1,3})\.([0-9]{1,2}\.[0-9]{0,3}),(-?[0-9]{1,3})\.([0-9]{1,2}\.[0-9]{0,3})$/ ) {
+  $lat = $1 + ($1 < 0 ? -1 : 1) * $2 / 60;
+  $lon = $3 + ($3 < 0 ? -1 : 1) * $4 / 60;
+} elsif ( $what =~ /^[0-9]{5}$/ ) {
+  $zip = $what;
+} else {
+  $address = `gpsaddress.pl "$what"`;
+  if (not (($address) and $address =~ /^(-?[0-9]{1,3}(\.[0-9]{1,9})?) (-?[0-9]{1,3}(\.[0-9]{1,9})?)$/ )) {
+    die "gpsaddress failed looking up address '$what'\n"
+  } else {
+    ($lat,$lon) = ($1,$3);
+  }
+}
+
+# turn on perl's safety features
+use warnings;
+use WWW::Mechanize;
+use HTML::TableContentParser;
+$browser = WWW::Mechanize->new();
+
+$browser->get("http://www.geocaching.com/seek/");
+$browser->follow("log in");
+print STDERR $browser->title() . "\n";
+$browser->form_number(1);
+$browser->field("myUsername", $USERNAME);
+$browser->field("myPassword", $PASSWORD);
+$browser->click();
+print STDERR $browser->title() . "\n\n";
+
+if ( $zip ) {
+  $browser->form(1);
+  $browser->field("zip", $zip);
+} else {
+  $browser->form(5);
+  $browser->field("origin_lat", $lat);
+  $browser->field("origin_long", $lon);
+}
+$browser->click();
+
+$gcsdone = 0;
+$maxgcs = $ARGV[1] ? $ARGV[1] : 1000000;
+
+print STDERR "\nPages: ";
+
+print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<loc version=\"1.0\" src=\"Groundspeak\">\n";
+
+
+while ( $gcsdone < $maxgcs ) {
+
+$p = HTML::TableContentParser->new();
+$tables = $p->parse($browser->content());
+
+$t = ${$tables}[10];
+@rows = @{$t->{rows}};
+$r = $rows[8];
+
+@cs = @{$r->{cells}};
+
+$browser->form_number(1);
+
+for ( $i = 0; $i < 20; $i++ ) {
+  $r = $rows[4+(2*$i)];
+  @cs = @{$r->{cells}};
+  if ( $gcsdone < $maxgcs && (! $cs[1]->{data}) ) {
+    if ( $cs[7]->{data} =~ /name='CID' value='(.*)'>/ ) {
+      $browser->tick("CID", $1);
+      $gcsdone++;
+    }
+  }
+}
+
+$browser->click("Download");
+@lines = split "\n", $browser->content();
+shift @lines; shift @lines; pop @lines;
+print join "\n", @lines;
+print "</waypoint>\n";
+
+$browser->back();
+$form = $browser->form_name("Form1");
+$nextlink = $browser->find_link( text => "Next" );
+if ( $nextlink ) {
+  if ( ($nextlink->url()) =~ /_ctl([0-9]+)/ ) {
+    $form->push_input("hidden", {"name" => "ResultsPager:_ctl$1", value => ""});
+  } else {
+    print STDERR "\n\nERROR\n\n";
+    print "</loc>\n";
+    exit(0);
+  }
+} else {
+  print STDERR "\n\nDONE\n\n";
+  print "</loc>\n";
+  exit(0);
+}
+$browser->submit();
+
+print STDERR "i";
+
+}
+
+print STDERR "\n\nREACHED MAX\n\n";
+print "</loc>\n";
+
diff --git a/tools/googledirections b/tools/googledirections
new file mode 100755 (executable)
index 0000000..061ecff
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/bash
+FROM="$1"
+TO="$2"
+(wget -O - "http://maps.google.com/maps?q=$FROM to $TO&output=xml" 2>/dev/null) | head -2 | tail -1 | sed 's/.*<page>\(.*\)<\/page>.*/<page>\1<\/page>/' | gpsbabel -i google -f - -o gpx -F -