Python: загрузите фотографию в фотобакет - PullRequest
2 голосов
/ 24 августа 2010

Может ли скрипт Python загрузить фотографию в корзину фотографий, а затем получить ее URL? Так как?

Я нашел скрипт по этой ссылке: http://www.democraticunderground.com/discuss/duboard.php?az=view_all&address=240x677

Но я только смутил это.

большое спасибо,

Phil

Ответы [ 2 ]

8 голосов
/ 24 августа 2010

Да, вы можете.Photobucket имеет хорошо документированный API , и кто-то написал вокруг него обертку .

Загрузите его и вставьте в путь Python, затем загрузите httplib2 (выможете использовать easy_install или pip для этого).

Затем вам нужно запросить ключ для Photobucket API .

Если вы все сделали правильно, вы можете написатьтвой сценарий сейчас.Оболочка Python великолепна, но совсем не документирована, что делает его очень сложным в использовании.Я потратил часы на понимание этого (сравните вопрос и время ответа здесь).Например, у сценария даже есть поддержка формы / нескольких частей, но мне пришлось прочитать код, чтобы узнать, как его использовать.Мне пришлось добавить к имени файла префикс @.

. Эта библиотека - отличный пример того, как НЕ ДОЛЖЕН документироваться ваш код!

Наконец-то все заработало, наслаждайтесь сценарием :(даже имеет обработку 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 голосов
/ 24 августа 2010

Используйте Python API от Рона Уайта , который был написан для этого

...