尝试通过 Google Picasa API 添加照片或相册时无法进行身份验证 [英] Unable to authenticate when trying to add photos or albums through Google Picasa API
问题描述
我正在尝试通过 Picasa 的 API 将照片上传到相册,但出现身份验证错误.
我的凭据在程序启动时就成功通过了身份验证,而不是在我尝试上传照片或添加相册时
这是我的代码:
导入 gdata.photos.service导入 gdata.media导入 gdata.geogd_client = gdata.photos.service.PhotosService()gd_client.email = 'username@gmail.com'gd_client.password = '密码'gd_client.source = 'exampleCo-exampleApp-1'gd_client.ProgrammaticLogin()用户名 = '用户名'相册 = gd_client.GetUserFeed(user=username)相册_id = 相册.entry[0].gphoto_id.text专辑网址 = '/data/feed/api/user/%s/albumid/%s' %(用户名,专辑 ID)path = 'C:\Users\Public\Pictures\Sample Pictures\Desert.jpg'专辑 = gd_client.InsertAlbum(title='新专辑', summary='这是一张专辑')photo = gd_client.InsertPhotoSimple(album_url, '新照片','使用 API 上传'、路径、content_type='image/jpeg')
这是我尝试添加相册或上传照片时收到的错误:
回溯(最近一次调用最后一次):文件C:/Users/1020071/Documents/test.py",第 19 行,在 <module> 中专辑 = gd_client.InsertAlbum(title='新专辑', summary='这是一张专辑')文件C:\Python27\lib\site-packages\gdata\photos\service.py",第 358 行,在 InsertAlbum 中引发 GooglePhotosException(e.args[0])GooglePhotosException: (403, 'Forbidden', 'Modification only allowed with api authentication.')
这是我一直在遵循的指南:https://developers.google.com/picasa-web/docs/1.0/developers_guide_python#request-a-list-of-albums
您真的对 OAuth2 进行了更改吗?以下代码应该可以工作:
def OAuth2Login(client_secrets, credential_store, email):scope='https://picasaweb.google.com/data/'user_agent='testingApp'存储 = 存储(credential_store)凭证 = storage.get()如果凭据是 None 或凭据.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('输入验证码:').strip()凭证 = flow.step2_exchange(code)storage.put(凭据)if (credentials.token_expiry - datetime.utcnow()) <时间增量(分钟=5):http = httplib2.Http()http = 凭证.授权(http)凭证.刷新(http)gd_client = gdata.photos.service.PhotosService(source=user_agent,电子邮件=电子邮件,additional_headers={'Authorization': 'Bearer %s' % credentials.access_token})返回 gd_client专辑 = gd_client.InsertAlbum('test', '我的测试专辑', access='protected')
您应该在 Google 开发者门户中创建一个 API 密钥并下载 json 密钥.这个存储库非常有用https://github.com/MicOestergaard/picasawebuploader#authentication.>
I am trying to upload a photo to an album through Picasa's API, however I am getting an authentication error.
My credentials are being successfully authenticated right when the program starts, just not when I am trying to upload a photo or add an album
Here is the code I have:
import gdata.photos.service
import gdata.media
import gdata.geo
gd_client = gdata.photos.service.PhotosService()
gd_client.email = 'username@gmail.com'
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')
Here is the error I am receiving when I try to add an album or upload a 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.')
This is the guide I have been following: https://developers.google.com/picasa-web/docs/1.0/developers_guide_python#request-a-list-of-albums
Did you actually make the change over OAuth2? The following code should work:
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')
You should create an API Key in the Google developer portal and download the json secret. This repo was very helpful https://github.com/MicOestergaard/picasawebuploader#authentication.
这篇关于尝试通过 Google Picasa API 添加照片或相册时无法进行身份验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!