#2426 Le 11/06/2010, à 23:12
- tshirtman
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
@lagierl: communication directement en socket ou plus haut niveau? je tente d'utiliser la lib pyro pour mon jeu, mais j'ai juste fais quelques test, c'est pas mal, mais j'arrive pas à finir mon intégration...
Hors ligne
#2427 Le 11/06/2010, à 23:54
- Pylades
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Bon, ce soir il est possible que je me remette à ma bibliothèque.
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#2428 Le 11/06/2010, à 23:58
- grim7reaper
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Tu as résolu tes problèmes de gestion d'erreur en cas d'échec de malloc ?
Hors ligne
#2429 Le 12/06/2010, à 01:09
- cm-t
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Bn
Actu Ubuntu ☺/
Pauses Ubuntu sur Paris \_< -t
[(π)] La Quadrature du net
Hors ligne
#2430 Le 12/06/2010, à 01:17
- Pylades
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Tu as résolu tes problèmes de gestion d'erreur en cas d'échec de malloc ?
Justement, je vais m’y mettre sérieusement.
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#2431 Le 12/06/2010, à 01:23
- Кຼزດ
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Bon allez, dodo…
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""A small script that downloads all or a range of mangas from onemanga.com
Licenced under the WTPL Licence"""
import os
import re
import socket
import sys
import urllib
# Config
MAXTRIES = 5
INDEX = "http://onemanga.com/directory"
OM = "http://www.onemanga.com/"
DL_DIR = "./Scans/"
WORK_DIR = os.getenv('PWD')
def helper():
"""Gives help about the use of this script"""
print """Usage:
- python """+sys.argv[0]+""" [STARTNUM]
- python """+sys.argv[0]+""" [STARTNUM] [ENDNUM]
- python """+sys.argv[0]+""" [-h|--help]
[STARTNUM] stands for a number in the manga list, so does [ENDNUM]
"""
exit(0)
def get_mangas_all():
"""Gets all mangas form onemanga"""
page = urllib.urlopen(INDEX).read()
exp = '(?<= class="ch-subject"><a href=")[^"]*(?!.*class=.*)'
# exp = '(?<= class="ch-subject"><a href=")[^"]*(?=")' OLD one, fails with licenced mangas
all_mangas = re.findall(exp, page)
index = 0
for i in all_mangas:
all_mangas[index] = i.replace("/", "")
index += 1
ret = []
if (len(sys.argv) == 2):
ret = all_mangas[startnum:]
elif (len(sys.argv) == 3):
ret = all_mangas[startnum:endnum]
else:
ret = all_mangas
return ret
def down(url):
"""Returns the webpage of the url given in parameter."""
tries = 0
downloaded = False
while tries < MAXTRIES and downloaded == False:
try:
ret = urllib.urlopen(url)
downloaded = True
except (IOError, socket.error):
tries += 1
print "\033[31;1mFailed download, retrying…\033[0m"
if tries == MAXTRIES:
print "\033[31;1mMaximum tries number reached exiting…\033[0m"
exit(1)
return ret
def retrieve(url, nom):
"""Retrieves a file"""
tries = 0
downloaded = False
while tries < MAXTRIES and downloaded == False:
try:
urllib.urlretrieve(url, nom)
downloaded = True
except (socket.error, IOError):
tries += 1
if tries == MAXTRIES:
print "\033[31;1mMaximum tries number reached exiting…\033[0m"
exit(1)
else:
print "\033[31;1mFailed download, retrying…\033[0m"
def make_pretty(name):
"""Returns the chain given, in order to have a normal name"""
return str(name).capitalize().replace("/", "").replace("_", " ")
class Onemanga:
"""Manga class.
Contains several attributes related to the manga.
Contains also methods to download its chapters"""
def __init__(self, manga):
self.manga = manga
# Added in order to prevent this script from crashing when errors
self.works = True
self.manga_p = make_pretty(self.manga)
self.download_dir = DL_DIR
self.current_dir = os.getcwd()
self.chap_list = self.get_chaps()
self.chap_list.reverse()
self.num_size = len(self.chap_list[-1])
try:
if (os.path.isdir(self.download_dir) == False):
os.mkdir(self.download_dir)
if (os.path.isdir(self.download_dir + self.manga_p) == False):
os.mkdir(self.download_dir + self.manga_p)
except OSError:
print "Unable to create the download directory"
exit(1)
def chap_dir_name(self, number):
"""Returns the name of the directory of the chapter.
It is useful in order to organize the mass of chapters.
example:
500 chaps in the manga, directory named "001" instead of "1" """
number = number.split('.')[0]
return (self.num_size - len(str(int(number))))*"0"+ number
def chap_multi(self, numbers):
"""Downloads the chapters given as arguments
They should match [0-9]+-[0-9]+ with first > second"""
numbers = str(numbers)
if re.match("[0-9]+-[0-9]+", numbers) != None:
try:
startnumber = int(str(numbers).split('-')[0])
except ValueError:
startnumber = float(numbers.split('-')[0])
try:
endnumber = int(str(numbers).split('-')[1])
except ValueError:
endnumber = float(numbers.split('-')[1])
# Inverts the numbers if they are not in the right order
if (startnumber > endnumber):
startnumber, endnumber = endnumber, startnumber
# Main download loop
begin = self.chap_list.index(str(startnumber))
end = self.chap_list.index(str(endnumber))
for i in self.chap_list[begin:end+1]:
self.chap_down(i)
if not self.works:
return
elif re.match("[0-9]+", numbers) != None:
self.chap_down(numbers)
else:
exit(1)
def chap_down(self, number):
"""Downloads one chapter (given in argument)
Checks if the chapter exists or not
and creates the appropriate directory"""
# Checks if the chapter is in the chapter's list
try:
self.chap_list.index(str(number))
except ValueError:
print "\033[31mChapter " + str(number) + " not in list\033[30m"
return
number = str(number)
# Download/parsing of a page that contains the url of the first page
dummy = down(OM + self.manga + "/" + number +"/").read()
exp = '(?<=href="/)((?i)'+ self.manga +'/'+number+'/[^/]*)'
try:
real_url = re.search(exp, dummy).group(0)
except:
self.works = False
return
# Download of the first page of the chapter
firstpage = down(OM + real_url).read()
# Gets the root url of the chapter image
exp = '(?<=<img class="manga-page\" src=\").*(?=\")'
img_url = re.search(exp, firstpage).group(0).split('"')[0]
img_urllist = img_url.split("/")
del img_url
# Gets all the images name
exp = '(?<=option value=\")[a-zA-z]*[0-9]+[^"]*'
img_list = re.findall(exp, firstpage)
del exp
# Cleans the page list… (dirty)
while img_list.count('') != 0:
img_list.remove('')
# Again
while img_list.count('credits') != 0:
img_list.remove('credits')
img_root = ""
for part in img_urllist[0:-1]:
img_root += part + "/"
del img_urllist
manga_glob_dir = self.download_dir + self.manga_p + "/"
manga_dir = manga_glob_dir + self.chap_dir_name(number)
if (os.path.isdir(manga_dir) == False):
os.makedirs(manga_dir + "/")
os.chdir(manga_dir)
del manga_glob_dir
del manga_dir
for image in img_list:
num = str(img_list.index(image)+1)
print '\rImage '+ num +'/'+ str(len(img_list)),
sys.stdout.flush()
real_url = img_root + image + ".jpg"
retrieve(real_url, image + ".jpg")
print "\n\033[32mChapter "+ number +" downloaded.\033[0m"
os.chdir(WORK_DIR)
def get_chaps(self):
"""Downloads the chapter list
Returns a string list that contains them"""
try:
pagechaps = down(OM + "/" + self.manga).read()
if (pagechaps.find("Page not found") != -1):
raise IOError("404 not found")
return re.findall('(?<=/(?i)'+self.manga+'/)(.*)(?=\/")', pagechaps)
except IOError:
print "\033[31;1mManga not found\033[0m"
self.works = False
return
def down_all(self):
"""Download all the chapters of the manga"""
if not self.works:
print("\033[31;1mFAIL, next manga\033[0m")
return
print "Start of the download of "+self.manga
self.chap_multi(self.chap_list[0]+"-"+self.chap_list[-1])
if (len(sys.argv) == 2):
startnum = sys.argv[1]
elif (len(sys.argv) == 3):
startnum = sys.argv[1]
endnum = sys.argv[2]
for i in get_mangas_all():
print i
koin = Onemanga(i)
koin.down_all()
dou
Hors ligne
#2432 Le 12/06/2010, à 02:11
- Pylades
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Monstrueuse connerie détectée.
Monstrueuse connerie réparée.
Cause probable de SIGSEGV sur échec de malloc probablement corrigée par la même occasion.
Futures investigations demain.
Dodo.
Bonne nuit à tous.
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#2433 Le 12/06/2010, à 02:18
- grim7reaper
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Peace Sells... But Who's Buying ?
Sur ce, score += 10;
Hors ligne
#2434 Le 12/06/2010, à 02:26
- tshirtman
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
dodo
Hors ligne
#2435 Le 12/06/2010, à 02:31
- samυncle
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Points
Hello world
Hors ligne
#2436 Le 12/06/2010, à 02:39
- grim7reaper
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Bon demain on se fait les 100 pages .
Allez, BN World !
Hors ligne
#2437 Le 12/06/2010, à 03:19
- Кຼزດ
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
.
dou
Hors ligne
#2438 Le 12/06/2010, à 09:26
- Compteur du TdCCT
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Scores totaux, depuis le début :
1) 485 samuncle
2) 400 nesthib
3) 395 Pylade
4) 353+5 grim7reaper ** bonus +5 pour avoir répondu à ce post : ./viewtopic.php?pid=3486252#p3486252 **
5) 316 mathieuI
6) 214 cm-t
7) 177 helly
8) 156 gnuuat
9) 121 ǤƦƯƝƬ
10) 105 tshirtman
11) 80 petifrancais
12) 50 \\Ouranos//
13) 37 ilagas
14) 33 pierguiard
15) 30 keny
16) 25 GentooUser
17) 19 Le Rouge
17) 19 Kanor
19) 18 Ph3nix_
20) 14 kouskous
21) 12 stratoboy
21) 12 sailing
23) 11 Lagierl
24) 10 CROWD
24) 10 Toineo
26) 7 Vista
26) 7 xapantu
28) 6 Mornagest
28) 6 Zeibux
30) 5 timsy
31) 4 danychou56
31) 4 Neros
31) 4 Biaise
34) 3 Р'tite G☢gole :mad:
35) 1 ceric
35) 1 pfriedK
35) 1 geenux
Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !
J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).
Hors ligne
#2439 Le 12/06/2010, à 09:26
- Compteur du TdCCT
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Scores de la période en cours :
1) 110 Pylade
2) 90 samuncle
3) 81 mathieuI
4) 75 grim7reaper
5) 73 nesthib
6) 59 gnuuat
7) 44 helly
8) 31 cm-t
9) 30 tshirtman
10) 20 keny
11) 15 \\Ouranos//
11) 15 ǤƦƯƝƬ
13) 10 petifrancais
14) 8 pierguiard
15) 7 Vista
16) 5 sailing
16) 5 timsy
16) 5 Kanor
19) 4 Toineo
19) 4 Lagierl
21) 2 kouskous
21) 2 xapantu
Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !
J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).
Hors ligne
#2440 Le 12/06/2010, à 12:07
- Pylades
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Hum, de mieux en mieux dans les conneries : j’avais oublié de remettre à zéro un compteur…
Bon, encore un contexte où Valgrind ne me renvoie plus aucune irrégularité. Là je vais manger, mais il est fort probable que dans les tests à venir, tout fonctionne parfaitement.
Enfin ! \o/
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#2441 Le 12/06/2010, à 12:45
#2442 Le 12/06/2010, à 12:46
- tshirtman
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
mais il est fort probable que dans les tests à venir, tout fonctionne parfaitement.
ça sent un peu la technique du "tombé en marche" quand même
Hors ligne
#2443 Le 12/06/2010, à 12:47
- grim7reaper
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Il a du développer en utilisant La Rache .
Dernière modification par grim7reaper (Le 12/06/2010, à 12:48)
Hors ligne
#2444 Le 12/06/2010, à 13:11
- Pylades
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Ha ! On a une pointure du C qui vient de débarquer sur le fofo.
E.D is here.
O_o"
T’es sûr que c’est Lui ?
ça sent un peu la technique du "tombé en marche" quand même
Nan, ça sent la technique du « Plus de problèmes ? Ouf. Je vais quand-même faire d’autres tests pour m’en assurer. »
Mais c’est juste du debug, même s’il y avait un peu trop de bugs.
Il a du développer en utilisant La Rache .
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#2445 Le 12/06/2010, à 13:18
- \\Ouranos//
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Ha ! On a une pointure du C qui vient de débarquer sur le fofo.
E.D is here.
Le mec de ta signature ? Il est français ? o-O
Ubuntu facile, c'est :
- Dire "Bonjour"
- Lire la doc et les règles du forum avant de poster. Savoir poser une question intelligemment.
- Mettre des balises url autour des liens et un tiret à su.
Hors ligne
#2446 Le 12/06/2010, à 13:19
- Pylades
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Oui.
Mais est-ce bien Lui ?
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#2447 Le 12/06/2010, à 13:23
- grim7reaper
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
grim7reaper a écrit :Ha ! On a une pointure du C qui vient de débarquer sur le fofo.
E.D is here.O_o"
T’es sûr que c’est Lui ?
L'avenir nous le dira, mais c'est fort possible.
Il traîne sur tous les forum où ça parle de C (SdZ à une époque, développez.com, hardware.fr, etc).
Lorsque j'ai débuté, j'ai appris énormément de choses en lisant ses posts.
Hors ligne
#2448 Le 12/06/2010, à 14:14
- xapantu
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Je viens de finir de me coder un petit bot irc en python pour qui poste un message lorsque'il y a une nouvelle révision sur une branche bazaar :
#!/usr/bin/env python
# -*- coding: utf8 -*-
import irclib
import ircbot
import thread
import time
import commands
branch = "lp:ella"
chan= '#ella'
class Bot(irclib.SimpleIRCClient):
rev = 0
def on_pubmsg(self, serv, ev):
print ev.arguments()[0]
def start(self):
"""Start the IRC client."""
self.ircobj.process_forever()
def update_bzr(self):
while(True):
time.sleep(10)
rev = commands.getstatusoutput('bzr revno ' + branch)[1]
if self.rev != rev:
self.rev = rev
self.connection.privmsg(chan, "New revision at " + branch + " : " + self.rev)
if __name__ == "__main__":
bot = Bot()
bot.connect('irc.freenode.net', 6667, "xapantu-bot")
bot.connection.join(chan)
thread.start_new_thread(bot.update_bzr, ())
bot.start()
Dernière modification par xapantu (Le 12/06/2010, à 14:20)
Hors ligne
#2449 Le 12/06/2010, à 14:56
- Pylades
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Miam, du python… Il faudrait que j’apprenne ce truc.
Pylade a écrit :grim7reaper a écrit :Ha ! On a une pointure du C qui vient de débarquer sur le fofo.
E.D is here.O_o"
T’es sûr que c’est Lui ?
L'avenir nous le dira, mais c'est fort possible.
Il traîne sur tous les forum où ça parle de C (SdZ à une époque, développez.com, hardware.fr, etc).
Lorsque j'ai débuté, j'ai appris énormément de choses en lisant ses posts.
Bon, ben apparemment c’est bien lui. Il a même mis son avatar fétiche.
Mais bon, il a beau être un dieu du C, son site est mal foutu (même sans parler de l’esthétique).
Dernière modification par Pylade (Le 12/06/2010, à 14:59)
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#2450 Le 12/06/2010, à 15:04
- grim7reaper
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Hors ligne