bugfixes, switched to completely to urllib2, added babyblues
[comic-widget] / src / usr / lib / hildon-desktop / comicwidget.py
index b2483df..e343ffb 100644 (file)
@@ -4,7 +4,6 @@ import hildondesktop
 import gtk
 import csv
 import urllib2
-import urllib
 import string
 import os
 import osso
@@ -14,7 +13,7 @@ import shutil
 import sys
 import socket
 
-socket.setdefaulttimeout(10)
+socket.setdefaulttimeout(30)
 
 supports_alpha = False
 
@@ -25,7 +24,7 @@ supports_alpha = False
 
 # constants. dbfile is the location of the csv
 # comiccache is the location of the images
-APP_VERSION = "0.4.0-1"
+APP_VERSION = "0.4.1-1"
 
 basedbdir = "/opt/comic-widget/db/"
 imagedir = "/opt/comic-widget/images/"
@@ -41,6 +40,7 @@ comics = {
                "arlonjaniscomicscom":{"name":"Arlo and Janis","link":'http://comics.com/arlo&janis/',"start":"2010-02-01","dbfile":dbdir + "comicdb.arlonjanis.csv"},
                "bccomicscom":{"name":"B.C.","link":"http://comics.com/bc/","start":"2010-02-01","dbfile":dbdir + "comicdb.bc.csv"},
                "ballard_streetcomicscom":{"name":"Ballard Street","link":"http://comics.com/ballard_street/","start":"2010-02-01","dbfile":dbdir + "comicdb.ballardstreet.csv"},
+               "babyblues":{"name":"Babyblues","link":"http://www.babyblues.com/","start":"01/19/2010","dbfile":dbdir + "comicdb.babyblues.csv"},
                "bencomicscom":{"name":"Ben","link":'http://comics.com/ben/',"start":"2010-02-01","dbfile":dbdir + "comicdb.ben.csv"},
                "bettycomicscom":{"name":"Betty","link":"http://comics.com/betty/","start":"2010-02-01","dbfile":dbdir + "comicdb.betty.csv"},
                "big_natecomicscom":{"name":"Big Nate","link":"http://comics.com/big_nate/","start":"2010-02-01","dbfile":dbdir + "comicdb.bignate.csv"},
@@ -244,8 +244,16 @@ class ComicDb():
                                except:
                                        print "comic db creation failed on mkdir"
                        try:
+                               f = open(filename, "wb")
+                               print "writing to " + filename
+                               req = urllib2.Request(dbrow['url'])
+                               req.add_header('Referer', dbrow['link'])
+                               tmpimg = urllib2.urlopen(req)
+                               f.write(tmpimg.read())
+                               tmpimg = None
+                               f.close()
 
-                               urllib.urlretrieve(dbrow['url'], filename)
+#                              urllib.urlretrieve(dbrow['url'], filename)
                        except:
                                if os.path.isfile(filename):
                                        os.remove(filename)
@@ -314,7 +322,7 @@ class ComicDb():
        def fetch_earlier(self, comic, earliest):
                print "fetch before, " + comic + " earliest"
                print comic[-9:]
-               if comic == "cyanide" or comic == "wulff" or comic[-9:] == "comicscom":
+               if comic == "cyanide" or comic == "wulff" or comic == "babyblues" or comic[-9:] == "comicscom":
                        print "getting get_prev_id..."
                        comicid = self.get_prev_id(comic,earliest)
                        if not comicid:
@@ -348,7 +356,7 @@ class ComicDb():
 
 
        def fetch_newer(self, comic, newest):
-               if comic == "cyanide" or comic == "wulff":
+               if comic == "cyanide" or comic == "wulff" or comic == "babyblues" or comic[-9:] == "comicscom":
                        comicid = self.get_next_id(comic,newest)
                        if not comicid:
                                print "already at last comic"
@@ -437,6 +445,32 @@ class ComicDb():
 
 
        def get_next_id(self, comic, number):
+               if comic == 'babyblues':
+                       link = "http://www.babyblues.com/archive/index.php?formname=getstrip&GoToDay=" + str(number)
+                       print "link: " + link
+                       try:
+                               f = urllib2.urlopen(link)
+                               hcode = f.code
+                       except:
+                               hcode = 404
+                       print "got hcode = " + str(hcode) + "\n"
+                       if (hcode != 200):
+                               return False
+                       else:
+                               print "checking next Babyblues date.."
+                               s = f.read()
+                               f.close()
+                               # title:
+                               splt = string.split(s, 'nextStripLink', 1)
+                               if len(splt) < 2:
+                                       print "no 'prev' found"
+                                       return False
+                               else:
+                                       next = splt[1][48:58]
+                                       print "got next: " + next
+
+                                       return next
+
                if comic == 'cyanide':
                        link = "http://www.explosm.net/comics/" + str(number) + "/"
                        print "link: " + link
@@ -511,7 +545,38 @@ class ComicDb():
                                f.close()
                                return self.parse_comics_com(comic, s, 'next')
 
+
+
+
+
+
        def get_prev_id(self, comic, number):
+               if comic == 'babyblues':
+                       link = 'http://www.babyblues.com/archive/index.php?formname=getstrip&GoToDay=' + str(number)
+                       print "link: " + link
+                       try:
+                               f = urllib2.urlopen(link)
+                               hcode = f.code
+                       except:
+                               hcode = 404
+                       print "got hcode = " + str(hcode) + "\n"
+                       if (hcode != 200):
+                               return False
+                       else:
+                               print "checking prev Babyblues date.."
+                               s = f.read()
+                               f.close()
+                               # title:
+                               splt = string.split(s, 'prevStripLink', 1)
+                               if len(splt) < 2:
+                                       print "no 'prev' found"
+                                       exit()
+                                       return False
+                               else:
+                                       prev = splt[1][48:58]
+                                       print "got previous: " + prev
+                                       return prev
+
                if comic == 'cyanide':
                        link = "http://www.explosm.net/comics/" + str(number) + "/"
                        print "link: " + link
@@ -538,7 +603,7 @@ class ComicDb():
                                        return False
                                else:
                                        print "got previous: " + splt[0]
-                                       return splt[0]                          
+                                       return splt[0]  
                elif comic == 'wulff':
                        link = "http://wulffmorgenthaler.com/default.aspx?id=" + number
                        print "link: " + link
@@ -602,6 +667,8 @@ class ComicDb():
                        link = "http://www.explosm.net/comics/" + str(number) + "/"
                elif comic == 'wulff':
                        link = "http://wulffmorgenthaler.com/default.aspx?id=" + str(number)
+               elif comic == 'babyblues':
+                       link = "http://www.babyblues.com/archive/index.php?formname=getstrip&GoToDay=" + str(number)
                elif comic[-9:] == 'comicscom': 
                        link = comics[comic]['link'] + str(number) + "/"
                else:
@@ -715,14 +782,31 @@ class ComicDb():
                                filename = splt2[1]
                                irow = [comic,number,link,url,filename,title,next,prev]
                                return irow
+
+
+                       elif comic == 'babyblues':
+                               # babyblues is type .gif
+                               s = f.read()
+                               f.close()
+                               splt = string.split(s, 'http://est.rbma.com/content/Baby_Blues?date=', 1)
+                               flnm = splt[1][:8]
+                               # check filename...
+                               datesplt = string.split(number, "/")
+                               flncheck = datesplt[2] + datesplt[0] + datesplt[1]
+                               if not flnm == flncheck:
+                                       print "incorrect filename, end of line. Break break break!"
+                                       return False
+                               url = 'http://est.rbma.com/content/Baby_Blues?date=' + flnm
+                               title = number + " (2 weeks delay)"
+                               filename = flnm + ".gif"
+                               irow = [comic,number,link,url,filename,title]
+                               return irow
+
+
                        elif comic == 'wulff':
                                # wulf is type .gif
                                s = f.read()
                                f.close()
-# <img src="pics/dates/month/2.gif" alt="" />
-# <img src="pics/dates/day/4.gif" alt="" />
-# <img src="pics/dates/komma.gif" alt="" />
-# <img src="pics/dates/year/2010.gif" alt="" />
                                splt = string.split(s, '<img src="pics/dates/month/', 1)
                                if not splt[1][1:2] == ".":
                                        title = splt[1][:2]
@@ -770,9 +854,10 @@ class ComicDb():
                        splt = string.split(source, "Link_Next: '", 1)
                        splt = string.split(splt[1], "'", 1)
                        splt = string.split(splt[0], "/")
-                       if len(splt) == 0:
+                       if len(splt) < 3:
                                return False
                        else:
+                               
                                return splt[2]
 
                elif get_what == "prev":