Script de téléchargement pour ourmanga.com

Ourmanga.com ne propose plus la lecture des mangas. Ce script est donc obsolète et ne fonctionnera pas!

J’ai réalisé un petit script python pour télécharger les mangas depuis le site ourmanga.com.
Ce script fonctionne pour tous les mangas que j’ai testé, je suppose qu’il fonctionne pour le reste.
Le code est un peu crade, gestion des exceptions pas très rigoureuse (si il y a une erreur durant le téléchargement, pas de souci, vous serez prévenu), appel de fonctions qui pourraient être évités…
Si je suis pas trop flemmard, je modifierai ça plus tard.

Il n’est probablement pas légal d’utiliser ce script sans être en possession des mangas originaux, pensez à les acheter !

Le script est sous licence GNU GPL, vous êtes libres de le modifier, l’utiliser comme bon vous semble. Si vous l’améliorez, j’apprécierai d’avoir le nouveau script.

Utilisation
Tout d’abord, il faut modifier quelques paramètres dans le script pour l’adapter à vos besoin.
La variable DL_DIR contient le répertoire dans lequel vous souhaitez stocker les mangas, adaptez la à vos besoin.

Pour utiliser le script, il suffit de faire

ourmanga.py "one piece" 199

Cette commande télécharge le chapitre 199 de One Piece.

ourmanga.py "fairy tail" 1-112

Cette commande télécharge les chapitres de 1 à 112 de Fairy Tail
Vous pouvez aussi utiliser

ourmanga.py  --list  #liste des chapitres d'un manga
ourmanga.py --manga-list  #liste des mangas

Le script

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""A small script that downloads mangas from MangaStream
    Licenced under the GPL >=v2 Licence
    Copyright TANGUY Arnaud """

import os
import sys
import re
import time
import urllib
from BeautifulSoup import BeautifulSoup

# ================= CONFIGURATION =======================
MAXTRIES = 5
OM = "http://ourmanga.com"

### Put the right download path for your system here
DL_DIR = "/media/data/Images/Mangas"
###

OM_DL = "http://ourmanga.com/manga"
TMP_DOWN = "/tmp/ourmanga"
# Ourmanga seems to have some problems to give you the files if you request them too often.
# This sleep value is used only in case of a download fail, it'a a delay before retrying the download.
# If you put this value to 0, you might have trouble downloading a full chapter, maybe you'll manage to get the 10 first images...
# I think you understood, don't put this one to 0 !
SLEEP_TIME=2 # Delay in seconds

def helper():
    """Gives help about the use of this script"""
    print """Usage:
        - python """+sys.argv[0]+""" manga chapter\t chapter can be a single number like 23 or a range like 23-45
        - python """+sys.argv[0]+""" manga --list\t show all the chapters available
        - python """+sys.argv[0]+""" manga --manga-list\t show all the mangas available
        """
    exit(0)

def retrieve_url(url, save_location):
    "Download URL using wget"
    downloaded=False
    tries=0
    while tries < 5 and downloaded == False:         print "Retrieving file "+url         status = os.system("wget "+url+" -O "+save_location.replace(' ','\ ')+" 2>/dev/null")
        if status == 256:
            tries += 1
        else:
            downloaded=True
            return save_location
        if tries < MAXTRIES:             print "\033[31;1mThe url "+url+" is unreachable... Retrying\033[0m"         else:             print "\033[31;1mMax number of tries exeeded, download failed!\033[0m"             exit(1)         time.sleep(SLEEP_TIME) def manga_name(manga):     namelist = manga.split(" ")     manga_n = []     for word in namelist:        manga_n.append(word.capitalize())     manga = "_".join(manga_n)     return manga.replace('/','-').replace('.','') def make_pretty(name):     """Returns the chain given, in order to have a normal name"""     return str(name).capitalize().replace("/", "").replace("_", " ") def make_n_digits(number, digits):     """ Returns a n digit number (adds 0 to the begining if not 3 digits) """     numstr = str(number)     if len(numstr) >= digits:
        return str(number)
    else:
        toadd = digits-len(numstr)
        i=0
        while i<toadd:
            numstr = "0"+numstr
            i+=1
    return numstr

def chapter_number(manga, chapter):
    manga_n = manga_name(manga)

    retrieve_url(OM+"/"+manga_n, TMP_DOWN)
    f = urllib.urlopen(TMP_DOWN)
    page = f.read()
    f.close()
    page = re.findall('<a href="&quot;http://www.ourmanga.com/'+manga_n+'/.+">.+</a>', page);
    if len(page)  0:
            chap = chp[0].lstrip("Chapter ")
            if str(chap) == str(chapter):
                return chap
    print "\033[31;1mUnable to find the chapter real number, aborting download\033[0m"
    exit(1)

def chapter_url(manga, chapter):
    return OM+'/'+manga+'/'+str(chapter)

def read_chapter_url(manga, chapter):
    return OM+'/'+manga+'/'+str(chapter)+'/01'

#Image : http://www.ourmanga.com/manga/Fairy_Tail/Chapter-165/02.jpg
#PAge : http://www.ourmanga.com/Fairy_Tail/165/01
def image_url(manga, chapter, image):
    retrieve_url(OM+"/"+manga+"/"+chapter+"/"+image, TMP_DOWN)
    f = urllib.urlopen(TMP_DOWN)
    page = f.read()
    f.close()

#</pre>
<div class="inner_full_view">\t
<h3><a href="http://www.ourmanga.com/Soul_Eater/73/1301056_e"><img src="http://www.ourmanga.com/manga/Soul_Eater/Chapter-73/1301054_e.jpg" alt="" /></a>
 page=re.findall('</h3>
<div class="inner_full_view">.*<a href=".+"><img src="(.+)" alt="" /></a>', page.replace('\n',''))
 print page
 if len(page) print "Image not found, aborting download !"
 return page[0]

def find_manga_list():
 """ Find all the available mangas."""
 retrieve_url(OM+'/directory', TMP_DOWN)
 f = urllib.urlopen(TMP_DOWN)
 # Finds the location where the manga names are
 page = re.findall('
<div class="m_s_title">.+</div>
', f.read())
 f.close()
 if len(page) print "No mangas !"
 exit(1)

 manga_list = []
 for linkTag in page:
 try:
 soup = BeautifulSoup(linkTag)
 except:
 continue
 result = soup.findAll('a');
 for tag in result:
 manga_list.append(tag.string)
 return manga_list

def find_chapter_list(read_chapter_url):
 """ Find all the available chapters."""
 retrieve_url(read_chapter_url, TMP_DOWN)
 f = urllib.urlopen(TMP_DOWN)
 page = f.read()
 f.close()
 # Finds the location where the image names are
 page = re.findall('
<select name="chapter">.+</select>
', page);
 if len(page) print "No images !"
 exit(1)

 soup = BeautifulSoup(page[0])
 result = soup.findAll("option");
 chapter_list = []
 for tag in result:
 chapter_list.append(tag.string.lstrip("Chapter : "))
 return chapter_list

def find_image_list(chapter_url):
 """ Find the images names."""
 retrieve_url(chapter_url, TMP_DOWN)
 f = urllib.urlopen(TMP_DOWN)
 page = f.read()
 f.close()
 # Finds the location where the image names are
 page = re.findall('
<select name="page">.+</select>
', page);
 if len(page) 1:
 for i in range(int(chapters[0]), int(chapters[1])+1):
 download_chapter(sys.argv[1], str(i))
 else:
 download_chapter(sys.argv[1], chapters[0])
else :
 helper()

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :