chiark / gitweb /
yoweb-scrape: remove erroneous exponential
[ypp-sc-tools.web-live.git] / yoweb-scrape
index db5dc1338298a47a2c9120d2f93b168d07842ba5..cee5c1781aafbb9505f25647a8d10ed1f6fc10de 100755 (executable)
@@ -45,6 +45,7 @@ import curses
 import termios
 import random
 import subprocess
+import copy
 from optparse import OptionParser
 from StringIO import StringIO
 
@@ -107,6 +108,18 @@ def yppsc_dir():
        os.environ["YPPSC_YARRG_SRCBASE"] = lib
        return lib
 
+soup_massage = copy.copy(BeautifulSoup.MARKUP_MASSAGE)
+soup_massage.append(
+               (regexp.compile('(\<td.*") ("center")'),
+                lambda m: m.group(1)+' align='+m.group(2))
+       )
+
+def make_soup(*args, **kwargs):
+       return BeautifulSoup(*args,
+               convertEntities=BeautifulSoup.HTML_ENTITIES,
+               markupMassage=soup_massage,
+                        **kwargs)
+
 #---------- caching and rate-limiting data fetcher ----------
 
 class Fetcher:
@@ -152,7 +165,6 @@ class Fetcher:
                                        (min_age, age))
                                need_wait = max(need_wait, min_age - age)
                        min_age += 3
-                       min_age *= 1.25
                if need_wait > 0:
                        need_wait += random.random() - 0.5
                return need_wait
@@ -160,7 +172,7 @@ class Fetcher:
        def _rate_limit_cache_clean(self, now):
                need_wait = self.need_wait(now)
                if need_wait > 0:
-                       debug('Fetcher   wait %d' % need_wait)
+                       debug('Fetcher   wait %f' % need_wait)
                        sleep(need_wait)
 
        def fetch(self, url, max_age):
@@ -252,9 +264,7 @@ class SomethingSoupInfo(SoupLog):
        def __init__(self, kind, tail, max_age):
                SoupLog.__init__(self)
                html = fetcher.yoweb(kind, tail, max_age)
-               self._soup = BeautifulSoup(html,
-                       convertEntities=BeautifulSoup.HTML_ENTITIES
-                       )
+               self._soup = make_soup(html)
 
 #---------- scraper for pirate pages ----------
 
@@ -577,7 +587,7 @@ class IslandExtendedInfo(IslandBasicInfo):
                self.islandid = None
                self.yoweb_url = None
 
-               soup = BeautifulSoup(self.yppedia())
+               soup = make_soup(self.yppedia())
                content = soup.find('div', attrs = {'id': 'content'})
                yoweb_re = regexp.compile('^http://\w+\.puzzlepirates\.com/'+
                        'yoweb/island/info\.wm\?islandid=(\d+)$')
@@ -598,7 +608,7 @@ class IslandExtendedInfo(IslandBasicInfo):
                debug('IEI COLLECT FLAGID '+`self.name`+' URL '+`yo`)
                if yo is None: return None
                dataf = fetcher.fetch(yo, 1800)
-               soup = BeautifulSoup(dataf)
+               soup = make_soup(dataf)
                ruler_re = regexp.compile(
                        '/yoweb/flag/info\.wm\?flagid=(\d+)$')
                ruler = soup.find('a', attrs = { 'href': ruler_re })