Oui, vous pouvez. Photobucket a un API bien documenté, et quelqu'un a écrit un wrapper autour d'elle. Téléchargez le et placez-le dans votre chemin Python, puis téléchargez httplib2 (vous pouvez utiliser easy_install ou pip pour celui-ci).
Ensuite, vous devez demander une clé pour le Photobucket API.
Si vous avez tout fait correctement, vous pouvez écrire votre script maintenant. Le wrapper Python est génial, mais il n'est pas du tout documenté, ce qui le rend très difficile à utiliser. J'ai passé des heures à le comprendre (comparez la question et le temps de réponse ici). Par exemple, le script a même un support de formulaire/multipart, mais j'ai dû lire le code pour savoir comment l'utiliser. Je devais préfixer le nom de fichier avec un @
.
Cette bibliothèque est un excellent exemple de comment vous ne devriez pas documenter votre code!
J'ai finalement obtenu ce travail, profiter du script: (! Il a même manipulation oAuth)
import pbapi
import webbrowser
import cPickle
import os
import re
import sys
from xml.etree import ElementTree
__author__ = "leoluk"
###############################################
## CONFIGURATION ##
###############################################
# File in which the oAuth token will be stored
TOKEN_FILE = "token.txt"
IMAGE_PATH = r"D:\Eigene Dateien\Bilder\SC\foo.png"
IMAGE_RECORD = {
"type": 'image',
"uploadfile": '@'+IMAGE_PATH,
"title": "My title", # <---
"description": "My description", # <---
}
ALBUM_NAME = None # default album if None
API_KEY = "149[..]"
API_SECRET = "528[...]"
###############################################
## SCRIPT ##
###############################################
api = pbapi.PbApi(API_KEY, API_SECRET)
api.pb_request.connection.cache = None
# Test if service online
api.reset().ping().post()
result = api.reset().ping().post().response_string
ET = ElementTree.fromstring(result)
if ET.find('status').text != 'OK':
sys.stderr.write("error: Ping failed \n"+result)
sys.exit(-1)
try:
# If there is already a saved oAuth token, no need for a new one
api.username, api.pb_request.oauth_token = cPickle.load(open(TOKEN_FILE))
except (ValueError, KeyError, IOError, TypeError):
# If error, there's no valid oAuth token
# Getting request token
api.reset().login().request().post().load_token_from_response()
# Requesting user permission (you have to login with your account)
webbrowser.open_new_tab(api.login_url)
raw_input("Press Enter when you finished access permission. ")
#Getting oAuth token
api.reset().login().access().post().load_token_from_response()
# This is needed for getting the right subdomain
infos = api.reset().album(api.username).url().get().response_string
ET = ElementTree.fromstring(infos)
if ET.find('status').text != 'OK':
# Remove the invalid oAuth
os.remove(TOKEN_FILE)
# This happend is user deletes the oAuth permission online
sys.stderr.write("error: Permission deleted. Please re-run.")
sys.exit(-1)
# Fresh values for username and subdomain
api.username = ET.find('content/username').text
api.set_subdomain(ET.find('content/subdomain/api').text)
# Default album name
if not ALBUM_NAME:
ALBUM_NAME = api.username
# Debug :-)
print "User: %s" % api.username
# Save the new, valid oAuth token
cPickle.dump((api.username, api.oauth_token), open(TOKEN_FILE, 'w'))
# Posting the image
result = (api.reset().album(ALBUM_NAME).
upload(IMAGE_RECORD).post().response_string)
ET = ElementTree.fromstring(result)
if ET.find('status').text != 'OK':
sys.stderr.write("error: File upload failed \n"+result)
sys.exit(-1)
# Now, as an example what you could do now, open the image in the browser
webbrowser.open_new_tab(ET.find('content/browseurl').text)
Hey, merci pour la réponse a juste eu un petit problème. Je ne peux pas importer pbapi je reçois le "aucun module nommé pbapi". J'ai copié les fichiers http://photobucket-api-py.googlecode.com/svn/trunk/PbApi/pbapi/ dans ce dossier et j'ai ajouté mon chemin python à ce dossier. Est-ce la bonne façon d'installer pbapi? – Phil
Mieux vaut copier les dossiers pbapi et oauth vers C: \ PythonXX \ Lib \ site-packages \ – leoluk
ah, im sur Fedora pas windows mon mauvais – Phil