]> git.phdru.name Git - bookmarks_db.git/commitdiff
Handle redirects when downloading the icon.
authorOleg Broytman <phd@phdru.name>
Thu, 27 Dec 2007 19:49:06 +0000 (19:49 +0000)
committerOleg Broytman <phd@phdru.name>
Thu, 27 Dec 2007 19:49:06 +0000 (19:49 +0000)
git-svn-id: file:///home/phd/archive/SVN/bookmarks_db/trunk@137 fdd5c36f-1aea-0310-aeeb-c58d7e2b6c23

Robots/bkmk_rsimple.py
doc/TODO

index 421d677530d88fefa0239e2aa388db70533517b2..ae7c39e481be8e30b144981bf18a1a8aa32b19d2 100644 (file)
@@ -21,6 +21,7 @@ class RedirectException(Exception):
    }
    def __init__(self, errcode, newurl):
       Exception.__init__(self, "(%s) to %s" % (self.reloc_dict[errcode], newurl))
+      self.url = newurl
 
 
 class MyURLopener(urllib.URLopener):
@@ -167,9 +168,18 @@ class robot_simple(Robot):
                      if not icon:
                         icon = "/favicon.ico"
                      icon = urljoin("%s://%s%s" % (url_type, url_host, url_path), icon)
-                     if self.log: self.log("   icon           : %s" % icon)
+                     if self.log: self.log("   looking for icon at : %s" % icon)
                      try:
-                        fname, headers = urllib.urlretrieve(icon)
+                        for i in range(8):
+                           try:
+                              fname, headers = urllib.urlretrieve(icon)
+                           except RedirectException, e:
+                              icon = e.url
+                              if self.log: self.log("       redirect to : %s" % icon)
+                           else:
+                              break
+                        else:
+                           raise IOError("Too many redirects")
                      except:
                         etype, emsg, tb = sys.exc_info()
                         if self.log: self.log("   no icon        : %s %s" % (etype, emsg))
@@ -183,8 +193,9 @@ class robot_simple(Robot):
                            icon = icon_file.read()
                            icon_file.close()
                            bookmark.icon = "data:%s;base64,%s" % (content_type, b64encode(icon))
+                           if self.log: self.log("   got icon       : %s" % content_type)
                         else:
-                           if self.log: self.log("   no icon        : %s" % content_type)
+                           if self.log: self.log("   no icon        : bad content type %s" % content_type)
                         os.remove(fname)
 
                except KeyError:
index 453e1aede0706a92500804f2a253460d698eb26d..aded46b25e7199c71d0446f0249b86e6a7bc0330 100644 (file)
--- a/doc/TODO
+++ b/doc/TODO
@@ -1,5 +1,3 @@
-Handle redirects when downloading the icon.
-
 Fetch description from <META name="description" content="..."> and store it in
 bookmark.description if the description is empty. (How to update old
 descriptions without replacing my own comments?)