Migrado a Flickr!

flickrLa cantidad de fotos que tenía en la web ha ido creciendo de forma bastante espectacular con el tiempo, llegando a superar el Gb. Por eso y por otras razones, decidí migrar (casi) todo el contenido de imágenes a flickr.

Me hice con una cuenta pro y empecé a subir poco a poco todas las galerías que tenía.

Luego debía hacer que la migración fuese transparente… que todos los links siguiesen funcionando, pero sin acceder al software antiguo. Al final lo he solucionado utilizando mod_rewrite de apache y un pequeño script en python que sustituye al anterior cgi y que reescribe las url’s para que apunten a la imagen o a la galería correspondiente de flickr. Un follón…

El invento al parecer funciona. No he tenido que modificar ningún post y todas las imágenes siguen apareciendo en la web correctamente. Si encontrais algún error o alguna imágen que no se muestra como debería, os agradeceré que me lo comuniqueis.

Llevo poco tiempo jugando con flickr, puedo asegurar que engancha terriblemente… Es puro vicio!

Si quieres ver mas detalles técnicos sobre como he hecho el cambio, sigue leyendo el post.

Para subir las fotos utilicé jUploadr, una aplicación Java que me facilitó mucho el trabajo de poner los tags y las fotos en los photosets correspondientes.

Me aseguré que todos los sets tuviesen exactamente el mismo nombre que las galerias antiguas, para poder enlazarlas correctamente.

Utilizando la api de flickr y la librería Beej’s Python Flickr API programé un pequeño script que se recorría todas las fotos que había subido y sacaba los id’s correspondientes.

#!/usr/bin/python
from flickrapi import FlickrAPI

flickrAPIKey = "xxxxxxxxxxxxxxxxxxxxxxxxxx"  # API key
flickrSecret = "yyyyyyyyyyyyyy"                  # shared "secret"

# make a new FlickrAPI instance
fapi = FlickrAPI(flickrAPIKey, flickrSecret)

# do the whole whatever-it-takes to get a valid token:
token = fapi.getToken(browser="firefox")

sets = fapi.photosets_getList(api_key=flickrAPIKey,auth_token=token)
fapi.testFailure(sets)
for set in sets.photosets[0].photoset:
        if set.title[0].elementText[0] == '2' or set.title[0].elementText == "back_to_school" or set.title[0].elementText == "comics_sergi" or set.title[0].elementText == "gatitos" or set.title[0].elementText == "casaguay":
                if set.title[0].elementText[-1] == '/':
                        # si el photoset acaba amb / eliminem el caracter
                        fapi.photosets_editMeta(api_key=flickrAPIKey,auth_token=token,photoset_id=set['id'],title=set.title[0].elementText[0:-1])
                photos = fapi.photosets_getPhotos(api_key=flickrAPIKey,auth_token=token,photoset_id=set['id'])
                fapi.testFailure(photos)
                for photo in photos.photoset[0].photo:
                        # photoset title:photo title:server id:photo id:photo secret:photoset id:
                        print set.title[0].elementText + ":" + photo['title'] + ":" + photo['server'] + ":" + photo['id'] + ":" + photo['secret'] + ":" + set['id'] + ":"

Esta información la guardé en un fichero de texto que mediante un cgi escrito también en python convertiría las url’s de las fotos antiguas a las nuevas url’s de flickr:

#!/usr/bin/python
"""
Script que ha de substituir l'anterior galeria, per poder fer la migracio a flickr
Necessita el fitxer infos.txt que conte les dades de les fotos que s'han pujat
"""

import cgi
import sys

form = cgi.FieldStorage()
if form.has_key('mode'):
        mode = form["mode"].value
        album = form["album"].value
        # el album de despedida de inlander esta malament. s'ha d'arreglar a ma
        if album == '/fotos/200310_24_despedida_inlander':
                album = '/fotos/20031024_despedida_inlander'

        if form.has_key('picture'):
                picture = form['picture'].value.replace('SMALL','')
        if form.has_key('Width'):
                width = form['Width'].value
        else:
                width = ""
else:
        print "Status: 301 Moved Permanently"
        print "Location: http://www.fr3nd.net/cgi-bin/photo/index2.cginn"
        sys.exit()

# mirem si hi ha un album. Si no hi ha cap, enviem als sets de flicker o al antic software segons correspongui

try:
        photoset = album.split('/')[2]
except:
        pass

f = open('infos.txt', 'r')

for line in f:
        props = line.split(':')
        try:
                if photoset == props[0]:
                        if mode == 'viewpicture':
                                if picture.split('.')[0] == props[1]:
                                        print "Status: 301 Moved Permanently"
                                        header = "Location: http://flickr.com/photos/fr3nd/" + props[3] + "/nn"
                                        print header
                                        sys.exit()
                        elif mode == 'view':
                                print "Status: 301 Moved Permanently"
                                header = "Location: http://flickr.com/photos/fr3nd/sets/" + props[5] + "/nn"
                                print header
                                sys.exit()
                        elif mode == 'rewrite':
                                if picture.split('.')[0] == props[1]:
                                        print "Status: 301 Moved Permanently"
                                        header = "Location: http://static.flickr.com/" + props[2] + "/" + props[3] + "_" + props[4]
                                        if width == '320':
                                                header = header + "_m"
                                        elif width == '640':
                                                pass
                                        elif width == '800':
                                                pass
                                        elif width == '100' or width == 'thumbnails' or width == 'thumbnail':
                                                header = header + "_t"
                                        header = header + ".jpgnn"
                                        print header
                                        sys.exit()
        except:
                break

# si no s'ha trovat la correspondencia enviem al software antic
if mode == 'viewpicture':
        print "Status: 301 Moved Permanently"
        print "Location: http://www.fr3nd.net/cgi-bin/photo/index2.cgi?mode=" + mode + "&album=" + album + "&picture=" + picture + "nn"
elif mode == 'view':
        if album == '/fotos':
                print "Status: 301 Moved Permanently"
                print "Location: http://flickr.com/photos/fr3nd/sets/nn"
        else:
                print "Status: 301 Moved Permanently"
                print "Location: http://www.fr3nd.net/cgi-bin/photo/index2.cgi?mode=" + mode + "&album=" + album + "nn"
sys.exit()

Finalmente, solo me quedaba renombrar el anterior index.cgi a index2.cgi y subir el nuevo.

El resto de fotos (las que se accedian directamente sin pasar por el cgi) las he redireccionado utilizando estas RewriteRules:

RewriteRule ^/?stuff//?/?/?fotos//?/?/?misc/.*$ - [S=1000]
RewriteRule ^/?stuff//?/?/?fotos//?/?/?fun/.*$ - [S=1000]
RewriteRule ^/?photodata//?/?/?/?fotos//?/?/?misc/.*$ - [S=1000]
RewriteRule ^/?photodata//?/?/?/?fotos//?/?/?fun/.*$ - [S=1000]

RewriteRule ^/?photodata//?/?/?/?fotos/(.*)/(.*)/(.*)$ http://www.fr3nd.net/cgi-bin/photo/index.cgi?album=/fotos/$1&mode=rewrite&picture=$3&Width=$2 [L]
RewriteRule ^/?stuff/fotos/(.*)/thumbnails/(.*)$ http://www.fr3nd.net/cgi-bin/photo/index.cgi?album=/fotos/$1&mode=rewrite&picture=$2&Width=thumbnails [L]
RewriteRule ^/?stuff/fotos/(.*)/(.*)$ http://www.fr3nd.net/cgi-bin/photo/index.cgi?album=/fotos/$1&mode=rewrite&picture=$2 [L]

Soy consciente que no es ni de lejos la forma mas óptima de hacerlo. Los scripts podrían buscar la información de las fotos de una forma mucho mas rápida y menos pesada, pero no estaba dispuesto a dedicarle muchas horas a algo que será temporal… Funciona, y con esto tengo suficiente ;)

9 thoughts on “Migrado a Flickr!

  1. La verdad es que no he probado ningún otro programa para subir las fotos, así que no puedo comparar. Pero a mi me fué bien. Es bastante intuitivo y rápido, y puedes poner los tags a varias fotos a la vez, e incluso crear un photoset con las fotos que selecciones.

  2. Yo estaba pensando en abrirme una cuenta flickr para subir fotos mias personales. La Pro es de pago, verdad?

    Aunque he estado hablando con varios conocidos para montar un fotolog entre nosotros con otro sistema, no me convence mucho porque no se pueden poner comentarios más allá del que pone la foto.

    Nada como saber programarselo uno mismo, cachisss.

  3. Si, es de pago, pero solo cuesta 20€ (al cambio) al año… creo que vale la pena teniendo en cuenta que puedes almacenar la cantidad de fotos que quieras siempre que no subas mas de 20Gb en un mes ;)

    Comentarios en las fotos puede poner todo el mundo, pero necesitas estar registrado.

  4. Lastima que no puedas hacer como Blogger, almacenar el sistema en tu propio hosting ya que en Aruba por 27€ tengo espacio ilimitado y transferencia ilimitada. xD

    Bueno, esto no es Renault ocasión, no se puede tener todo. xDDD

  5. Benvingut a Flickr i Benvingut a Dublin!!

    Si encara estàs per aqui, fes-nos una visita a la web.

Comments are closed.