My (simplified) old bash script for uploading images to Picasaweb (cf. Using cURL to interact with Google Data services and PicasaUploader):
USERNAME=SomeUsername # GoogleAccountUsername
PASSWORD=SomePasswd # GoogleAccountPasswd
MY_PIC="$1" ## filename of the picture to upload ##
ALBUM_ID=6008849823888405298 # ID of picasaweb album
PIC_TITLE=`basename $MY_PIC` # filename w/o extension
PIC_TYPE=`file -b --mime-type "$MY_PIC"`
AUTH_KEY=$( curl -s https://www.google.com/accounts/ClientLogin -d Email="$USERNAME"@gmail.com \
-d Passwd="$PASSWORD" -d accountType=GOOGLE \
-d source=Google-cURL-Example -d service=lh2 | awk -F\= '/^Auth=/{print $2}' )
ALBUM_XML="http://picasaweb.google.com/data/feed/api/user/$USER_ID/albumid/$ALBUM_ID?authkey=$AUTH_KEY"
URL=`curl -s --request POST --data-binary "@$MY_PIC" --header "Slug: $PIC_TITLE" \
--header "Content-Type: $PIC_TYPE" \
--header "Authorization: GoogleLogin auth=$AUTH_KEY" "$ALBUM_XML" | \
sed 's/.*media:content url='"'"'\([^'"'"']*\).*media:thumbnail url='"'"'\([^'"'"']*\).*/\1/'`
URL contains url of uploaded picture (obtained with piping curl's output via sed).
This script stoped working recently as Google no longer supports OAuth 1.0 (cf. Google Identity Platform). Fortunately it was pretty easy to modify it to support OAuth 2.0:
ACCESS_TOKEN=$(oauth2picasa.py) ## Acces token is managed with Python's script now ## Note that ALBUM_XML URL starts now from https:// now ALBUM_XML="https://picasaweb.google.com/data/feed/api/user/$USER_ID/albumid/$ALBUM_ID" URL=`curl -s --request POST --data-binary "@$MY_PIC" \ --header "GData-Version: 2" --header "Slug: $PIC_TITLE" \ --header "Content-Type: $PIC_TYPE" -H "Authorization: Bearer $ACCESS_TOKEN" $ALBUM_XML | \ sed 's/.*media:content url='"'"'\([^'"'"']*\).*media:thumbnail url='"'"'\([^'"'"']*\).*/\1/'`
NOTE: OAuth 2.0 authorization is handled with tiny Python script
oauth2picasa.py. The script is an adapted/copy-pasted fragment
of code borrowd from
picasawebsync:
#!/usr/bin/python
import os
import time
import httplib2
## https://github.com/google/oauth2client
## installed with pip install --upgrade oauth2client (or some other way)
from oauth2client import client
def oauthLogin():
# using http://stackoverflow.com/questions/20248555/list-of-spreadsheets-gdata-oauth2/29157967#29157967
from oauth2client.file import Storage
filename = os.path.join(os.path.expanduser('~'), ".picasawebsync")
client_secrets = os.path.join(os.path.expanduser('~'), ".config", "picasawebsync.json")
storage = Storage(filename)
credentials = storage.get()
if credentials is None or credentials.invalid:
flow = client.flow_from_clientsecrets(client_secrets,
scope='https://picasaweb.google.com/data/',
redirect_uri='urn:ietf:wg:oauth:2.0:oob')
auth_uri = flow.step1_get_authorize_url()
print 'Authorization URL: %s' % auth_uri
auth_code = raw_input('Enter the auth code: ')
credentials = flow.step2_exchange(auth_code)
storage.put(credentials)
if credentials.access_token_expired:
credentials.refresh(httplib2.Http())
return credentials.access_token
# start of the program
gd_client = oauthLogin()
print '%s' % gd_client
How to create an OAuth 2.0 client ID in the Google Developers Console is described
here.
Choose Client ID for native application. Next download JSON file, rename it to
picasawebsync.json and move it to .config directory in your HOME directory (or modify the script).
First time used oauth2picasa.py prompts to sign on to google
and paste the link back to authenticate.
Source code: picasa_upld.sh
and oauth2picasa.py.
Takie informacje jak te są niesamowicie wartościowe.
OdpowiedzUsuń