Module de manipulation d’URL de Python 3

Avez-vous remarqué que le module urllib de Python 3 a été découpé en plusieurs parties? Par la même occasion urllib2 a même disparu. C’est une très bonne chose, c’est encore plus simple comme ça. Il y a même un module pour parser les fichiers robots.txt.

Comme nous aimons OpenPhoto nous allons illustrer rapidement comment utiliser urllib pour télécharger une ressource Web et par la même occasion présenter le module json. Le script ci-dessous permet donc de télécharger toutes les photos d’une instance OpenPhoto et des les archiver (oui nous allons aussi utiliser le module tarfile 😉 ). Voyez comme tout est simple avec Python:

#! /usr/bin/env python
#-*- coding: utf-8 -*-

import urllib.request
import json
import os
import tarfile

url = "http://photos.cedricbonhomme.org/"
print("Retrieving the list of photos...")
html = urllib.request.urlopen(url+"photos/list.json?pageSize=1000")
text = html.read()
photos = json.loads(text.decode())

tar = tarfile.open("cedric-photos.tar.gz", "w:gz")

for idx, photo in enumerate(photos["result"]):
    try:
        path  = photo["pathOriginal"]
    except:
        path = photo["pathBase"]
    print("Downloading", path, "...")
    filein = urllib.request.urlopen(path)
    name = photo["filenameOriginal"]
    image = filein.read()
    filein.close()
    fileout = open(name,'w+b')
    fileout.write(image)
    fileout.close()

    print("Archiving", name)
    tar.add(name)

    os.unlink(name)

print(str(len(photos["result"])) + " photos archived.")
tar.close()