Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Yes, you can. Photobucket has a well-documented <a href="http://photobucket.com/developer/documentation" rel="nofollow noreferrer">API</a>, and someone wrote a <a href="http://code.google.com/p/photobucket-api-py/" rel="nofollow noreferrer">wrapper</a> around it.</p> <p>Download the it and put it into your Python path, then download httplib2 (you can use easy_install or pip for this one).</p> <p>Then, you have to request a key for the <a href="http://photobucket.com/developer/documentation" rel="nofollow noreferrer">Photobucket API</a>.</p> <p>If you did everything right, you can write your script now. The Python wrapper is great, but is not documented at all which makes it very difficult to use it. I spent hours on understanding it (compare the question and response time here). As example, the script even has form/multipart support, but I had to read the code to find out how to use it. I had to prefix the filename with a <code>@</code>.</p> <p>This library is a great example how you should NOT document your code!</p> <p>I finally got it working, enjoy the script: (it even has oAuth handling!)</p> <pre><code>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", # &lt;--- "description": "My description", # &lt;--- } 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) </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload