use IO::File;
use HTTP::Request::Common ();
use POSIX;
+use LWP::UserAgent;
use strict;
use warnings;
&get_our_version &check_tsv_line
&pipethrough_prep &pipethrough_run
&pipethrough_run_along &pipethrough_run_finish
- &pipethrough_run_gzip
+ &pipethrough_run_gzip &http_useragent &version_core
+ &http_useragent_string_map
&cgipostform &yarrgpostform &cgi_get_caller
&set_ctype_utf8 $masterinfoversion);
%EXPORT_TAGS = ( );
my ($aref,$prefix) = @_;
$aref->{"${prefix}name"}= 'ypp-sc-tools yarrg';
$aref->{"${prefix}fixes"}= 'lastpage checkpager';
+ $aref->{"${prefix}version"}= version_core();
+ return $aref;
+ # clientname "ypp-sc-tools"
+ # clientversion 2.1-g2e06a26 [from git-describe --tags HEAD]
+ # clientfixes "lastpage" [space separated list]
+}
+sub version_core () {
my $version= `
if type -p git-describe >/dev/null 2>&1; then
gd=git-describe
\$gd --tags HEAD || echo 0unknown
`; $? and die $?;
chomp($version);
- $aref->{"${prefix}version"}= $version;
- return $aref;
- # clientname "ypp-sc-tools"
- # clientversion 2.1-g2e06a26 [from git-describe --tags HEAD]
- # clientfixes "lastpage" [space separated list]
+ return $version;
}
sub pipethrough_prep () {
setlocale(LC_CTYPE, "en.UTF-8");
}
+sub http_useragent_string_map ($$) {
+ my ($caller_lib_agent, $reason_style_or_caller) = @_;
+ $caller_lib_agent =~ y/A-Za-z/N-ZA-Mn-za-m/;
+ $caller_lib_agent =~ s/\s/_/g;
+ my $version= version_core();
+ return "yarrg/$version ($reason_style_or_caller)".
+ " $caller_lib_agent".
+ " (http://yarrg.chiark.net/intro)";
+}
+
+sub http_useragent ($) {
+ my ($who) = @_;
+ my $ua= LWP::UserAgent->new;
+ my $base= $ua->_agent();
+ $ua->agent(http_useragent_string_map($base, $who));
+ return $ua;
+}
+
1;
use HTTP::Request;
use IO::File;
use POSIX;
-use LWP::UserAgent;
use XML::Parser;
use Commods;
our ($pctb) = $ENV{'YPPSC_YARRG_PCTB'};
-our ($ua)= LWP::UserAgent->new;
+our ($ua)= http_useragent("commod-results-processor $mode");
sub refresh_commodmap() {
die unless $pctb;
# sponsored by Three Rings.
use strict (qw(vars));
-use LWP::UserAgent;
use JSON;
#use Data::Dumper;
use IO::File;
$which =~ s/\W//g;
our ($pctb) = $ENV{'YPPSC_YARRG_PCTB'};
-our ($ua)= LWP::UserAgent->new;
+our ($ua)= http_useragent("database_info_fetch $which");
our $jsonresp;
sub jparsetable ($$) {
exit(0);
}
+sub main__yarrgversion () {
+ printf "%s\n", version_core();
+}
+
+sub main__useragentstringmap ($$) {
+ printf "%s\n", http_useragent_string_map($_[0], $_[1]);
+}
+
sub main__sunshinewidget () {
print <<END
Land {On land} {
if {$privacy_setting} {
package require http
::http::config -urlencoding utf-8
+ set ua [::http::config -useragent]
+ debug "USERAGENT OLD \"$ua\""
+ set ua [exec ./database-info-fetch useragentstringmap $ua \
+ dictionary-manager 2>@ stderr]
+ ::http::config -useragent $ua
+ debug "USERAGENT NEW \"$ua\""
}
}
import sys
import os
import urllib
-import urllib2
import re as regexp
+import subprocess
from optparse import OptionParser
from BeautifulSoup import BeautifulSoup
fix_stdout()
+# User agent:
+class YarrgURLopener(urllib.FancyURLopener):
+ base_version= urllib.URLopener().version
+ proc= subprocess.Popen(
+ ["./database-info-fetch", "useragentstringmap",
+ base_version, "manual islands/topology fetch"],
+ shell=False,
+ stderr=None,
+ stdout=subprocess.PIPE,
+ )
+ version = proc.communicate()[0].rstrip('\n');
+ assert(proc.returncode is not None and proc.returncode == 0)
+urllib._urlopener = YarrgURLopener()
+
ocean = None
soup = None
opts = None
url = ('http://yppedia.puzzlepirates.com/' +
(url_base % urllib.quote(ocean,'')))
debug('fetching',url)
- dataf = urllib2.urlopen(url)
+ dataf = urllib.urlopen(url)
debug('fetched',dataf)
soup = BeautifulSoup(dataf)