# Ultima-Strasbourg list-dumper 1.0
#
# Ce script Python récupère automatiquement la liste de tous les titres disponibles
# chez Ultima Strasbourg. (exemple:
# http://www.ultima-strasbourg.com/cgi-bin/Argus.cgi?value=&cat=PS2&start=0&step=10&submitButtonName=CHERCHER&svalue=a  )
#
# Syntaxe : python ultima_s.py > today.csv
#
# Ce script effectue automatiquement les requêtes HTTP, parse les pages HTML, construit une liste
# et sort le tout au format CSV
# Colonnes : catégorie, titre, prix d'achat (euro), prix de vente (euro), disponibe
#
# Script écrit par Sébastien SAUVAGE <sebsauvage at sebsauvage dot net> - http://sebsauvage.net
#
# Domaine public
#
# Entrez l'adresse de votre proxy ci-dessous:
proxy_address = 'http://123.45.67.89:3198'

import os,urllib,sys,re

os.environ['http_proxy'] = proxy_address
base_url = 'http://www.ultima-strasbourg.com/cgi-bin/Argus.cgi?value=&start=0&step=1000&submitButtonName=CHERCHER'

categories = { 'PSX'  : 'Playstation',
               'PS2'  : 'Playstation 2',
               'DR'   : 'Dreamcast',
               'CUBE' : 'GameCube',
               'GB'   : 'Gameboy',
               'GBA'  : 'Gameboy Advanced',
               'DVD'  : 'DVD',
               'XBOX' : 'XBOX',
               'MAC'  : 'Macintosh',
               'PC'   : 'PC'             }

letters = [chr(ord('a')+i) for i in range(0,26)]  #  = ['a','b','c','d',...]
csv_file = ['"Categorie","Titre","Prix d\'achat","Prix de vente","Disponible"']
regexp = re.compile('<tr height="12">\s*<TD .*?>.*?</TD>\s*<TD .*?>(.*?)</TD>\s*<TD .*?>(.*?)</TD>\s*<TD .*?>(.*?)</TD>\s*<TD .*?>(.*?)</TD>\s*</TR>', re.IGNORECASE | re.DOTALL)

for (catcode,catlabel) in categories.items():
    for letter in letters:
        sys.stderr.write('Fetching '+catlabel+' page '+letter+'... ')
        page = urllib.urlopen(base_url+'&cat='+catcode+'&svalue='+letter).read()
        sys.stderr.write('done ('+str(len(page))+' bytes)\n')
        page = re.sub('&nbsp;',' ',page)
        matchs = regexp.findall( page )
        if matchs :
            for match in matchs:
            	csv_file.append('"'+catlabel+'","'+match[0].strip()+'","'+match[1].strip()+'","'+match[2].strip()+'","'+match[3].strip()+'"')

for line in csv_file:
    print line

sys.stderr.write('All done.')
