[Python] Скрипт скачивания фотографий из контакта

Discussion in 'PHP' started by FunkyCat, 4 Dec 2011.

  1. FunkyCat

    FunkyCat New Member

    Joined:
    4 Dec 2011
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Собственно, хочу показать свой небольшой скрипт на Python + Grab. Логинится на сайт и потом сохраняет в указанную папку все фото из альбомов ВК, сортируя по папкам, соответствующим альбомам. Это мой практически первый опыт с питоном, так что хотело бы услышать замечания по работе.

    Code:
    #####################################################
    #	Author: FunkyCat
    #	This script grab all photos from your vk.com
    #	account and save then into specified folder	
    #####################################################
    #	Request: Grab (http://packages.python.org/grab/)
    #####################################################
    
    #######################SETTINGS######################
    
    #VK login
    email = "[email protected]"
    #VK password
    password = "qwerty"
    #Folder for photos
    photosDir = "imgs"
    #Save logs (request headers and loaded pages)
    saveLogs = False
    #Folder for logs
    logDir = 'logs'
    
    #####################################################
    
    import os
    import urllib
    import urlparse
    from grab import Grab
    
    def ProcessAlbumName(name):
    	tmpname = name
    	i = 0
    	for c in tmpname:
    		if c == '/' or c == ':' or c == '*' or c == '?' or c == '"' or c == '<' or c == '>' or c == '|':
    			tmpname = tmpname[:i]+tmpname[i+1:]
    		i += 1
    	return tmpname
    
    def GetLocalFileNameFromURL(fullpath):
        (filepath, filename) = os.path.split(urlparse.urlparse(fullpath).path)
        return filename
    
    def ProcessAlbum(g, url, dir, myId):
    	#Create folder for images
    	try:
    		os.makedirs(dir)
    	except OSError:
    		pass
    	#Open album page
    	g.go('http://m.vk.com'+url+'?oid='+myId)
    	#Getting count of photos
    	photosCount = int(g.xpath_number('.//div[@class="summary"]'))
    	print "Count: " + str(photosCount)
    	#Getting pages count
    	pagesCount = photosCount//8
    	if photosCount%8 != 0:
    		pagesCount += 1
    	currPage = 0
    	procCount = 0
    	#Process pages
    	while currPage < pagesCount:
    		#Load page
    		g.go('http://m.vk.com'+url+'?oid='+myId+'&st='+str(currPage*8))
    		#Process photos
    		for thumbPhotoElem in g.xpath_list('.//table[@class="thumbs"]/tr/td/a'):
    			#Get photo page url
    			photoPageUrl = thumbPhotoElem.get('href')
    			#Load it
    			g.go('http://m.vk.com'+photoPageUrl)
    			#Get photo url and save it
    			fileUrl = g.xpath('.//table[@class="photo"]/tr/td[@class="td1"]/a/img').get('src')
    			localName = str(procCount)+'. '+GetLocalFileNameFromURL(fileUrl)
    			print localName
    			urllib.urlretrieve(fileUrl,dir+'/'+localName)
    			procCount += 1
    		currPage += 1
    
    
    g=Grab()
    
    if saveLogs:
    	import logging
    	logging.basicConfig(level=logging.DEBUG)
    	#Create folder for logs if not exist
    	try:
    		os.makedirs(logDir)
    	except OSError:
    		pass
    	g.setup(log_dir=logDir)
    
    #Logging in
    g.go('http://vk.com/login.php?email='+email+'&pass='+password);
    #Get albums page url
    albumsUrl = g.xpath('.//li[@id="l_ph"]/a').get('href')
    #Get my id
    myId = albumsUrl[7:]
    #Open it
    g.go('http://vk.com'+albumsUrl)
    #Create folder for photos
    try:
    	os.makedirs(photosDir)
    except OSError:
    	pass
    #Process albums
    albumNum = 0
    for album in g.xpath_list('.//div[@class="clear_fix album"]'):
    	albumUrl = album[1][0][0].get('href')
    	#Normalize album URL
    	albumUrl = albumUrl[:6]+albumUrl[5+len(myId)+2:]
    	albumDir = photosDir+'/'+str(albumNum)+'. '+ProcessAlbumName(album[1][0][0].text)
    	#Print album info
    	print '-----------------------------'
    	print 'Album: ' + album[1][0][0].text
    	ProcessAlbum(g,albumUrl,albumDir,myId)
    	albumNum += 1