Skip to content

Instantly share code, notes, and snippets.

@Apkawa
Created July 15, 2011 14:55
Show Gist options
  • Save Apkawa/1084845 to your computer and use it in GitHub Desktop.
Save Apkawa/1084845 to your computer and use it in GitHub Desktop.
Simple Uploader to upi.
-*- coding: utf-8 -*-
'''
http://code.google.com/apis/picasaweb/docs/1.0/developers_guide_python.html
'''
import os
import os.path
import mimetypes
import sys
import logging
import logging.handlers
import datetime
from optparse import OptionParser
import gdata.photos.service
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
log = logging.getLogger('album_fetcher')
logging.basicConfig(level=logging.INFO,
format='%(asctime)s %(name)-5s %(levelname)-3s %(message)s',
datefmt='%d-%m-%Y %H:%M:%S',
)
class Photo(object):
def __init__(self, entry, picasa_instance=None):
self.entry = entry
self.picasa_instance = picasa_instance
def get_title(self):
return self.entry.title.text
def get_source(self):
return self.entry.GetMediaURL()
def get_thumbinail(self):
return self.entry.media.thumbnail[-1].url
class Album(object):
def __init__(self, entry, picasa_instance=None):
self.entry = entry
self.picasa_instance = picasa_instance
def __repr__(self):
return "<Album: %s>"%self.get_title()
def get_id(self):
return self.entry.GetAlbumId()
def get_user(self):
return self.entry.user.text
def get_title(self):
return self.entry.title.text
def get_desc(self):
pass
def get_meta(self):
pass
def get_photos_uri(self):
return self.entry.GetPhotosUri()
def _update_album(self, update_attrs, service):
#TODO
album.title.text = 'Nya'
updated_album = gd_client.Put(album, album.GetEditLink().href,
converter=gdata.photos.AlbumEntryFromString)
def upload_photo(self, photo_path):
content_type = mimetypes.guess_type(photo_path)[0]
if content_type not in ['image/bmp', 'image/jpeg', 'image/jpg', 'image/gif', 'image/png']:
raise "Not valid content type"
filename = os.path.split(photo_path)[-1]
photo = self.picasa_instance.service.InsertPhotoSimple(self.entry.GetFeedLink().href, filename,
'%s'%datetime.datetime.now(),
photo_path, content_type=content_type)
return Photo(photo, self.picasa_instance)
class Picasa(object):
def __init__(self):
pass
@property
def service(self):
service = getattr(self, '__service', None)
if not service:
service = gdata.photos.service.PhotosService(source='upi')
setattr(self, '__service', service)
return service
def set_user(self, user):
self.email = user
def get_user(self):
return self.email
def auth(self, email, password):
service = self.service
service.email = email
service.password = password
service.ProgrammaticLogin()
self.__service = service
self.set_user(email)
def get_album_list(self):
albums = self.service.GetUserFeed(user=self.get_user())
return [Album(album, self) for album in albums.entry]
def get_album_by_title(self, title):
for album in self.get_album_list():
if title == album.get_title():
return album
def create_album(self, title, description=''):
return Album(self.service.InsertAlbum(title=title, summary=description), self)
def main():
p= Picasa()
p.auth("usenname", "password")
upi_album = p.get_album_by_title("upi")
if not upi_album:
upi_album = p.create_album("upi")
for f_p in sys.argv[1:]:
new_photo = upi_album.upload_photo(f_p)
print new_photo.get_source()
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment