Uploader ses photos sur Picasa sous Linux

La solution PicasaWeb, hébergée par Google, permet de facilement partager ses photos à la manière de Flickr. Cependant, pour mettre ses photos en ligne facilement (autrement que une par une via l'interface web), il est nécessaire d'utiliser le logiciel associé Picasa, qui ne tourne hélas pas nativement sous Linux.

Je vous propose ici un script Ruby permettant d'y parvenir (inspiré de olpa), en envoyant directement un ensemble quelconque de photos vers un album particulier (nécessite la commande curl) :

[ruby]
# Upload pictures to Picasa
if ARGV.length < 3
  puts "Usage : ruby upload_to_picasa.rb cookies.txt upload_form.html picture1.jpg picture2.jpg ..."
  puts "cookies.txt is the cookies file from Firefox"
  puts "upload_form.html is the page on PicasaWeb to select pictures to upload"
  exit(1)
end
# find keys in the upload form
upload_form = File.read(ARGV[1])
if /name="uname" value="([^"]*)"/ === upload_form
  uname = $1
else
  puts "Cannot find \"uname\" in upload form."
  exit(1)
end
if /aid=(\d+)/ === upload_form
  aid = $1
else
  puts "Cannot find \"aid\" in upload form."
  exit(1)
end
if /\/lh\/addPhotos\?tok=(.*)&amp;uname=/ === upload_form
  token = $1
else
  puts "Cannot find \"token\" in upload form."
  exit(1)
end
# upload pictures
pictures = ARGV[2..-1]
pictures.each do |picture|
  system("
    curl \
    -b #{ARGV[0]} \
    -F redir='http://picasaweb.google.com/' \
    -F uname=#{uname} \
    -F aid=#{aid} \
    -F num='1' \
    -F name='' \
    -F file0=@#{picture} \
    'http://picasaweb.google.com/lh/addPhotos?tok=#{token}' \
    >/dev/null")
end

Exemple d'utilisation :

ruby upload_to_picasa.rb cookies.txt upload_form.html picture1.jpg picture2.jpg ...

En plus des photos à mettre en ligne, les deux premiers arguments sont :

  • le fichier cookies.txt des cookies de Firefox. Dans les dernière version de Firefox, celui-ci n'existe plus et est remplacé par une base Sqlite, mais peut-être retrouvé par un script Python (remplacez USERNAME et SESSION par vos propre valeurs) :
[python]
# Convert cookies.sqlite of Firefox to the old cookies.txt (for picasa cookies only)
import sqlite3 as db
import sys
cookiedb = '/home/USERNAME/.mozilla/firefox/SESSION/cookies.sqlite'
targetfile = 'cookies.txt'
what = 'picasa'
connection = db.connect(cookiedb)
cursor = connection.cursor()
contents = "host, path, isSecure, expiry, name, value"
cursor.execute("SELECT " +contents+ " FROM moz_cookies WHERE host LIKE '%" 
               +what+ "%'")
file = open(targetfile, 'w')
index = 0
for row in cursor.fetchall():
  file.write("%s\tTRUE\t%s\t%s\t%d\t%s\t%s
" % (row[0], row[1],
             str(bool(row[2])).upper(), row[3], str(row[4]), str(row[5])))
  index += 1
print "Cookies type : %s" % what
print "Exported : %d" % index
file.close()
connection.close()
  • le fichier HTML de la page web où s'affiche le formulaire d'importation de photos pour l'album désiré :

picasaweb_upload_form.png

En effet, c'est lui qui contient les clés qui seront utilisées pour envoyer les photos en respectant le protocole du formulaire, par un POST.

blog comments powered by Disqus