2010-08-23 3 views

Répondre

8

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) 
+0

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

+0

Mieux vaut copier les dossiers pbapi et oauth vers C: \ PythonXX \ Lib \ site-packages \ – leoluk

+0

ah, im sur Fedora pas windows mon mauvais – Phil

0

Utilisez le python API by Ron White qui a été écrit pour le faire cette

+1

Il est le pire wrapper API que j'ai jamais vu, mais je l'ai finalement obtenu de travail, voir ma réponse . – leoluk

+0

désolé, ne l'ai pas écrit moi-même, mais heureux que cela a aidé. il aurait probablement fallu plus de 5 heures que vous avez passé à le déboguer pour écrire le vôtre. envisager d'inclure vos commentaires ou un lien vers ce billet pour les propriétaires – JiminyCricket

+0

Une fois que vous comprenez, c'est génial, mais il n'y a pas d'aide du tout et il est donc très frustrant de l'utiliser. – leoluk