Tuesday, September 30, 2008

Foto's downloaden van mijnalbum.nl

[edit 21-10-2008: album-id meegeven vanaf command line]

Update 12-09-2015: Dit scriptje is overbodig geworden omdat mijnalbum.nl nu een knop heeft waarmee je het hele album kunt downloaden. Klik op "Foto's opslaan",  dan op "Album downloaden".

Mijnalbum.nl is een site waar je foto's kan neerzetten. Het enige nadeel is dat deze foto's alleen te bekijken zijn via de site, dat is wat onhandig bladeren. Het zou dan ook fijner zijn alle foto's in een keer te downloaden, zodat je er op je gemak doorheen kunt bladeren. Gelukkig hebben ze dat niet al te moeilijk gemaakt: leve python en de lxml-module!
#!/usr/bin/python

import sys
from lxml import etree
from lxml import objectify
from urllib import urlopen

# pass the album id as a command line argument
album_id = sys.argv[1]
thumbs_url = 'http://www.mijnalbum.nl/index.php?m=albumview&a=2&key='
thumbs_url += album_id

parser = etree.HTMLParser()
page = urlopen(thumbs_url)
html = page.read()

htmltree  = etree.HTML(html)

for element in htmltree.xpath("body/table/tr/td[@class='thumbfoto']"):
    id = element.get('id')
    to_be_stripped = 'thumbcont-'
    foto_id = id.replace(to_be_stripped,'',1)
    foto_url = 'http://www.mijnalbum.nl/GroteFoto-'+foto_id+'.jpg'
    print foto_url

# Just pass the output to wget using "| xargs wget".

Dit maakte het downloaden van alle foto's van de Ronde van Winsum een stuk makkelijker. Hieronder is een sleutelmoment in deze legendarisch ronde te zien.

13 comments:

denick said...

Dank je wel voor dit geweldige script!!

denick said...

Misschien is het handig om thumbs_url door het volgende te vervangen, zodat het ID als command line argument meegegeven kan worden:

import sys
thumbs_url = 'http://www.mijnalbum.nl/index.php?m=albumview&a=2&key='
thumbs_url += sys.argv[1]

Kees Hink said...

Goed idee. Ik heb het in het scriptje verwerkt.

Maarten Jansonius said...

Mooi, bedankt man!
Ik heb hier nog een variatie die de bestanden opslaat met de oorspronkelijke bestandsnaam (bijv DSC002345.jpg) i.p.v. de mijnalbum.nl identifier.
De bestandsnaam staat in de alt tag van de thumbnail image link. (De "-O " in de uitvoer is de wget optievlag om de output bestandsnaam te bepalen.)


for element in htmltree.xpath("body/table/tr/td[@class='thumbfoto']/div/div/a/img"):
alt = element.get('alt')
output_filename = alt + '.jpg'
id = element.get('id')
to_be_stripped = 'thumb-'
foto_id = id.replace(to_be_stripped,'',1)
foto_url = 'http://www.mijnalbum.nl/GroteFoto-'+foto_id+'.jpg'
print ' -O '+output_filename + ' ' + foto_url

Maarten Jansonius said...

Oh, nog even dit : met mijn variant moet je wel de xargs optie "-L 1" gebruiken (=1 commando per regel), anders schrijft wget alle uitvoerbestanden over elkaar.
Dus uitvoer van het script sturen naar
"| xargs -L 1 wget ".

Anonymous said...

Top! Thanks!

Anonymous said...

Super, kwam goed van pas!

nikagl said...

Helemaal super, ben benieuwd of het werkt want zou goed van pas komen! :)

nikagl said...

Misschien ook handig om de prerequisites te noemen?

sudo apt-get install python-dev
sudo apt-get install python-setuptools
sudo apt-get install libxml2-dev
sudo apt-get install libxslt-dev
sudo easy_install --allow-hosts=lxml.de,*.python.org lxml

Groet,

Nika.

nikagl said...

En met die prerequisites werkt het dus perfect, nogmaals bedankt!!

Thijsje said...

Hoi The Donkey Stone,

Bedankt voor je idee. Ik heb het een en ander van je scriptje geleerd, als dat mag, voor mijn eigen Online mijnalbum downloader.

Daarmee kan iedereen die bijv. geen python kan gebruiken, geen dingen wil installeren, zijn foto's mee downloaden (wel op een VEILIGE manier) met ZIPje, een Java applet, of een browser plugin).

http://photoalbumdownloader.comule.com/

Ik ga het misschien opensourcen (ook al verwacht ik niet zoveel geïnteresseerden).

Groet
thijs

Thijs said...

Hallo iedereen,

Nog een bericht over de Web service Photoalbumdownloader, waarmee je je albums van Mijnalbum.nl kunt downloaden (zie post hierboven):

Het linkje is veranderd. Het is nu http://photoalbumdownloader.cu.cc (wel lelijke domeinnaam maar het script werkt goed).
Het is nog steeds gratis om te gebruiken en zonder advertenties.

Kees, zou jij misschien in je post een linkje naar deze site kunnen zetten voor mensen die geen Python/shell willen/kunnen gebruiken?

mvg,
Thijs

Anonymous said...

Volgens mij kan iedereen van alle albums nu de foto's als album downloaden. Klopt dit?
Althans bij de normale Mijnalbum, niet bij de nieuwe Beta-versie.