2016-04-08 4 views
0

J'essaie de télécharger une photo vers un album via l'API de Picasa, mais une erreur d'authentification s'est produite.Impossible d'authentifier en essayant d'ajouter des photos ou des albums via l'API Google Picasa

Mes références sont dûment authentifiés à droite lorsque le programme commence, mais pas quand je suis en train de télécharger une photo ou ajouter un album

Voici le code que j'ai:

import gdata.photos.service 
import gdata.media 
import gdata.geo 

gd_client = gdata.photos.service.PhotosService() 
gd_client.email = '[email protected]' 
gd_client.password = 'password' 
gd_client.source = 'exampleCo-exampleApp-1' 
gd_client.ProgrammaticLogin() 

username = 'username' 
albums = gd_client.GetUserFeed(user=username) 
album_id = albums.entry[0].gphoto_id.text 
album_url = '/data/feed/api/user/%s/albumid/%s' % (username, album_id) 
path = 'C:\Users\Public\Pictures\Sample Pictures\Desert.jpg' 

album = gd_client.InsertAlbum(title='New album', summary='This is an album') 

photo = gd_client.InsertPhotoSimple(album_url, 'New Photo', 
    'Uploaded using the API', path, content_type='image/jpeg') 

Voici l'erreur que je reçois lorsque je tente d'ajouter un album ou télécharger une photo:

Traceback (most recent call last): 
    File "C:/Users/1020071/Documents/test.py", line 19, in <module> 
    album = gd_client.InsertAlbum(title='New album', summary='This is an album') 
    File "C:\Python27\lib\site-packages\gdata\photos\service.py", line 358, in InsertAlbum 
    raise GooglePhotosException(e.args[0]) 
GooglePhotosException: (403, 'Forbidden', 'Modification only allowed with api authentication.') 

C'est le guide, j'ai suivi: https://developers.google.com/picasa-web/docs/1.0/developers_guide_python#request-a-list-of-albums

+0

Pas le problème, mais utilisez des chaînes brutes ou des barres obliques dans vos chemins –

Répondre

0

Avez-vous réellement effectué la modification sur OAuth2? Le code suivant devrait fonctionner:

def OAuth2Login(client_secrets, credential_store, email): 
scope='https://picasaweb.google.com/data/' 
user_agent='testingApp' 

storage = Storage(credential_store) 
credentials = storage.get() 
if credentials is None or credentials.invalid: 
    flow = flow_from_clientsecrets(client_secrets, scope=scope, redirect_uri='urn:ietf:wg:oauth:2.0:oob') 
    uri = flow.step1_get_authorize_url() 
    webbrowser.open(uri) 
    code = raw_input('Enter the authentication code: ').strip() 
    credentials = flow.step2_exchange(code) 
    storage.put(credentials) 

if (credentials.token_expiry - datetime.utcnow()) < timedelta(minutes=5): 
    http = httplib2.Http() 
    http = credentials.authorize(http) 
    credentials.refresh(http) 

gd_client = gdata.photos.service.PhotosService(source=user_agent, 
              email=email, 
              additional_headers={'Authorization' : 'Bearer %s' % credentials.access_token}) 

return gd_client 
album = gd_client.InsertAlbum('test', 'My Test Album', access='protected') 

Vous devez créer une clé d'API dans le portail des développeurs Google et télécharger le code secret de json. Ce repo était très utile https://github.com/MicOestergaard/picasawebuploader#authentication.