Jumat, 06 Agustus 2010

Skrip Python untuk mengambil gambar dari mangavolume.

Di bawah ini adalah kode Python yang saya buat selagi iseng. Skrip yang saya buat akan mengambil gambar (image) dari situs mangavolume.




import urllib,urllib2, urllister, os.path

imageTotal = 0
imageNow   = 0
sizeNow    = 0

def myReportHook(count, blockSize, totalSize):
  global sizeNow
  sizeNow = sizeNow + blockSize
  print count, sizeNow, totalSize

def getImage(url):
  x = url.rfind("compressed/") + 11
  y = url[x:]
  print y
  if not os.path.isfile(y):
    sizeNow  = 0
    urllib.urlretrieve(url, y,reporthook=myReportHook)
    urllib.urlcleanup() 

def retrieve(url):
  sock = urllib.urlopen(url)
  htmlSource = sock.read()
  sock.close()
  return htmlSource

def cekImage(parser):
  for image in parser.images: 
    if image.find("http") != -1:
      getImage(image)

def getNextPage(parser):
  for url in parser.urls: 
    if url.find("serie=") != -1:
      return url

def parserURL(url):
  htmlSource = retrieve(url)

  parser = urllister.URLLister()
  parser.feed(htmlSource)
  parser.close()
  return parser

host    = "http://www.mangavolume.com"
manga   = "/addicted-to-curry/"
chapter = "chapter-addicted-to-curry-1/"

print "Starting..."
parse = parserURL(host + manga + chapter)
cekImage(parse)
next = getNextPage(parse)
while next != "":
  parse = parserURL(host + next)
  cekImage(parse)
  next = getNextPage(parse)


Kode di atas saya simpan dengan nama mangavolume.py. Pada kode diatas ada modul yang diimpor yang tidak ada di Python, karena modul itu buatan sendiri. Idenya di ambil dari http://diveintopython.org/. Hanya saja sudah saya modifikasi agar sesuai dengan kebutuhan. Kodenya tampak seperti di bawah ini. Kode dibawah saya simpan dengan nama urllister.py.




from sgmllib import SGMLParser

class URLLister(SGMLParser):
  def reset(self):
     SGMLParser.reset(self)
     self.urls    = []
     self.options = []
     self.images  = []

  def start_a(self, attrs):
     href = [v for k, v in attrs if k=='href']
     if href:
       self.urls.extend(href)

  def start_option(self, attrs):
    option = [v for k, v in attrs if k=='value']
    if option:
      self.options.extend(option)

  def start_img(self, attrs):
     image = [v for k, v in attrs if k=='src']
     if image:
       self.images.extend(image)


Karena saya membuat kode diatas cuma iseng, fitur-fiturnya masih dasar banget. Kalo ada yang ingin mengembangkannya, saya persilahkan untuk melakukannya. Jika berkenan, mohon untuk mencantumkan blog ini sebagai asal kode yang anda kembangkan. Happy hacking.