├── README └── fb_albums.py /README: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fb_albums.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | __author__ = "Nicolas Seriot" 4 | __date__ = "2010-09-26" 5 | __license__ = "GPL" 6 | 7 | """ 8 | Download photos from Facebook photo albums. 9 | """ 10 | 11 | import re 12 | import urllib 13 | import urllib2 14 | import cookielib 15 | import optparse 16 | import getpass 17 | from optparse import OptionParser 18 | 19 | # parse the command line 20 | parser = optparse.OptionParser("usage: %prog -e EMAIL -a ALBUM_URL [-p PASSWORD]") 21 | parser.add_option("-e", "--email", dest="email") 22 | parser.add_option("-p", "--password", dest="password") 23 | parser.add_option("-a", "--album_url", dest="album_url") 24 | 25 | (options, args) = parser.parse_args() 26 | 27 | if not options.email or not options.album_url: 28 | parser.error("-- please fill all options") 29 | exit(0) 30 | 31 | password = options.password if options.password else getpass.getpass("Password: ") 32 | 33 | # install an url opener with cookies 34 | cookie_jar = cookielib.LWPCookieJar() 35 | opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie_jar)) 36 | urllib2.install_opener(opener) 37 | 38 | print "-- getting facebook cookies" 39 | urllib2.urlopen('http://www.facebook.com/') 40 | 41 | print "-- loggin in" 42 | query_args = { 'email':options.email, 'pass':password } 43 | encoded_args = urllib.urlencode(query_args) 44 | url = 'https://login.facebook.com/login.php' 45 | urllib2.urlopen(url, encoded_args) 46 | 47 | print "-- reading album page " + url 48 | s = urllib2.urlopen(options.album_url).read() 49 | 50 | pattern = "http://www.facebook.com/photo.php\?pid=\d+&id=\d+&ref=fbx_album" 51 | photo_page_urls = re.findall(pattern, s) 52 | photo_page_urls = map(lambda x:x.replace('&','&'), photo_page_urls) 53 | 54 | print "-- found %d photos" % len(photo_page_urls) 55 | 56 | photos_urls = [] 57 | for url in photo_page_urls: 58 | print "-- reading photo page " + url 59 | s = urllib2.urlopen(url).read() 60 | pattern = '' 61 | photo_url = re.findall(pattern, s)[0] 62 | photos_urls.append(photo_url) 63 | 64 | count = 0 65 | for url in photos_urls: 66 | count += 1 67 | print "-- downloading " + url 68 | urllib.urlretrieve (url, "%d.jpg" % count) 69 | 70 | print "-- finished" 71 | --------------------------------------------------------------------------------