Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- '''
- 2chDown.py
- 2ch.so 2-ch.so 2ch.ec downloader script.
- Based on fourdown.py
- '''
- import os.path as op
- from os import getcwd as cwd, makedirs, system
- import urllib2, urllib
- import re
- import time
- import sys
- from PySide.QtCore import *
- from PySide.QtGui import *
- from PySide.QtDeclarative import QDeclarativeView
- USER_AGENT = 'Mozilla/5.0 (X11; Linux i686; rv:6.0) Gecko/20100101 Firefox/6.0'
- REGEX_IMAGE = '\w+/src/\d+\.(?:png|jpeg|jpg|gif)'
- WGET_PATH = '/usr/bin/wget'
- class FourDown(QObject):
- @Slot(str)
- def __init__(self, url, *args, **kwargs):
- self.url_regex = re.compile(kwargs.get('regex', REGEX_IMAGE))
- self.user_agent = re.compile(kwargs.get('user_agent', USER_AGENT))
- self.retry_delay = kwargs.get('retry_delay', 60)
- self.download_delay = kwargs.get('download_delay', 5)
- self.page_delay = kwargs.get('page_delay', 60)
- self.url = url
- self.save_to = kwargs.get('save_to', None)
- self.USE_WGET = kwargs.get('USE_WGET', False)
- self.wget_path = kwargs.get('wget_path', WGET_PATH)
- if self.save_to is None:
- self.save_to = cwd()
- else:
- self.save_to = op.abspath(self.save_to)
- self.page = ''
- start_loop()
- def get_page(self):
- request = urllib2.Request(self.url, None, {'User-agent': self.user_agent})
- response = urllib2.urlopen(request)
- self.page = response.read()
- return self.page
- def _remove_dupes(self, items):
- # from here: http://code.activestate.com/recipes/52560/#c3
- set = {}
- return [set.setdefault(e,e) for e in items if e not in set]
- def _query_images(self):
- return self._remove_dupes(self.url_regex.findall(self.page))
- def _make_path(self):
- try:
- makedirs(self.save_to)
- except OSError:
- pass
- def _get_url(self, image, save_file):
- if self.USE_WGET:
- system('%s %s -O %s' % (self.wget_path, 'http://2ch.hk' + '/' + image, save_file))
- else:
- urllib.urlretrieve(image, save_file)
- def get_images(self):
- self._make_path()
- images = self._query_images()
- total = len(images)
- counter = 0
- print '%d images in thread' % total
- for image in images:
- counter += 1
- progress = '[%d/%d]' % (counter, total)
- filename = ''.join(image.split('/')[-1:])
- save_file = op.join(self.save_to, filename)
- if not op.isfile(save_file):
- try:
- print '%s Getting %s...' % (progress, filename)
- self._get_url('http://2ch.ec' + '/' + image, save_file)
- except Exception as error:
- print '%s Failed getting %s, we will get it next time' % (progress, 'http://2ch.ec' + '/' + image)
- time.sleep(self.download_delay)
- def start_loop(self):
- print 'Using %s to store images' % self.save_to
- while True:
- try:
- print 'Getting page...'
- self.get_page()
- except urllib2.HTTPError as error:
- if error.code == 404:
- print '404: Stopping...'
- break
- else:
- print 'Error getting page will retry in %s seconds' % self.retry_delay
- time.sleep(self.retry_delay)
- continue
- except urllib2.URLError:
- print 'Error getting page, will retry in %s seconds' % self.retry_delay
- time.sleep(self.retry_delay)
- continue
- print 'Downloading images...'
- self.get_images()
- print 'Done for now, will check again in %s seconds' % self.page_delay
- time.sleep(self.page_delay)
- # Create Qt application and the QDeclarative view
- app = QApplication(sys.argv)
- view = QDeclarativeView()
- view.setResizeMode(QDeclarativeView.SizeRootObjectToView)
- view.showFullScreen()
- download = FourDown()
- context = view.rootContext()
- context.setContextProperty("download", download)
- # Create an URL to the QML file
- url = QUrl('main.qml')
- # Set the QML file and show
- view.setSource(url)
- view.show()
- # Enter Qt main loop
- sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement