2009년 04월 16일
오픈API를 이용한 이미지 업로드 - Picasa
플리커를 이용한 이미지 업로드에 이어 두번째 피카사(picasa)를 이용한 이미지 업로드방법에 대해서 포스팅합니다.
피카사는 구글에서 제공하는 사진, 이미지 업로드 사이트입니다.
기존에는 설치용 클라이언트 프로그램만을 이용하여 업로드가 가능했으나 지금은 open api를 통해 업로드를 하는 방식을 지원하고 있습니다.이번에도 파이썬을 이용하여 구현해 보도록 하겠습니다.
우선 파이썬으로 picasa api를 사용하기 위해서는 gdata라이브러리를 다운로드 받아야 합니다.Picasa의 경우 플리커처럼 키를 생성하거나 등록하는등의 절차가 필요없습니다.
다만 구글계정만 있으면 됩니다. 정말 간편하죠. Picasa API를 이용하여 이미지 업로드하기 이제 multipart/form을 이용하여 이미지를 업로드 합니다.
여기서는 간편하게 요청된 이미지파일을 세션에 저장해 놓는 방식을 사용하기로 하겠습니다. /example/openapi/upload
그런후에 picasaAuth라는 메써드를 다시 호출합니다. 이곳에서는 picasa api를 이용하여 인증을 거치도록 합니다.
인증을 완료한 후에는 picasaAuthAfter라는 메써드가 다시 실행될 수 있도록 next URL을 설정합니다. /example/openapi/picasaAuthAfter
그래서 저같은 경우 직접 picasa사이트에 접속하여 example이라는 앨범을 미리 만들어 놓아야만 했습니다.
(어쩌면 이글을 작성하는 지금은 위 버그(?)가 사라졌을지도 모르겠군요)확실히 구글의 api가 플리커의 api보다는 심플한 장점이 있는것 같습니다.
하지만 이미지의 품질이나 기타등등의 이유로 아직까지는 플리커의 손을 들어주고 싶네요.이상과 같이 플리커와 피카사의 API를 이용하여 이미지를 업로드하는 방법에 대해서 알아보았습니다.
피카사는 구글에서 제공하는 사진, 이미지 업로드 사이트입니다. 기존에는 설치용 클라이언트 프로그램만을 이용하여 업로드가 가능했으나 지금은 open api를 통해 업로드를 하는 방식을 지원하고 있습니다.이번에도 파이썬을 이용하여 구현해 보도록 하겠습니다.
우선 파이썬으로 picasa api를 사용하기 위해서는 gdata라이브러리를 다운로드 받아야 합니다.Picasa의 경우 플리커처럼 키를 생성하거나 등록하는등의 절차가 필요없습니다.
다만 구글계정만 있으면 됩니다. 정말 간편하죠. Picasa API를 이용하여 이미지 업로드하기 이제 multipart/form을 이용하여 이미지를 업로드 합니다.
<form name="imageForm" action="/example/openapi/upload" method="post" enctype="multipart/form-data">위 form을 submit하면 서버프로그램(위:/example/openapi/upload)이 실행될 것입니다.
여기서는 간편하게 요청된 이미지파일을 세션에 저장해 놓는 방식을 사용하기로 하겠습니다. /example/openapi/upload
import gdata.photos.service위와같이 upload메써드가 호출되면 우선 파일명과 파일내용을 세션에 잠시 저장해 놓습니다.
import gdata.media
import gdata.geo
...
def upload(self):
filename, content = self.getfile("filename")
session = self.getSession()
session["file_content"] = content
session["file_filename"] = filename
authSubUrl = self.picasaAuth()
self.redirect(authSubUrl)
def picasaAuth(self):
next = 'http://%s/example/openapi/picasaAuthAfter' \
% self.getAppCfg().DOMAIN_NAME
scope = 'http://picasaweb.google.com/data/'
secure = False
session = True
gd_client = gdata.photos.service.PhotosService()
return gd_client.GenerateAuthSubURL(next, scope, secure, session);
그런후에 picasaAuth라는 메써드를 다시 호출합니다. 이곳에서는 picasa api를 이용하여 인증을 거치도록 합니다.
인증을 완료한 후에는 picasaAuthAfter라는 메써드가 다시 실행될 수 있도록 next URL을 설정합니다. /example/openapi/picasaAuthAfter
def picasaAuthAfter(self):인증이 완료된 후 호출된 picasaAuthAfter 메써드에서 위처럼 token값을 얻어내고 세션에 저장해 놓았던 이미지를 업로드 할 수 있습니다.위 예제에서 보면 아래와 같이 새로운 앨범을 만드는 api가 있습니다.
authsub_token = self.get("token")
# token update
gd_client = gdata.photos.service.PhotosService()
gd_client.auth_token = authsub_token
gd_client.UpgradeToSessionToken()
# add album
#entry = gd_client.InsertAlbum('example', 'example')
session = self.getSession()
content = session["file_content"]
filename = session["file_filename"]
f = cStringIO.StringIO(content)
album_url = '/data/feed/api/user/%s/album/%s' % ("default", "example")
entry = gd_client.InsertPhotoSimple(album_url, filename,
'Uploaded by example', f, content_type='image/jpeg')
del session["file_content"]
del session["file_filename"]
self.redirect(entry.content.src)
gd_client.InsertAlbum('example', 'example')버그인지 InsertAlbum은 정상적으로 동작하지 않는것 같습니다. 그래서 저같은 경우 직접 picasa사이트에 접속하여 example이라는 앨범을 미리 만들어 놓아야만 했습니다.
(어쩌면 이글을 작성하는 지금은 위 버그(?)가 사라졌을지도 모르겠군요)확실히 구글의 api가 플리커의 api보다는 심플한 장점이 있는것 같습니다.
하지만 이미지의 품질이나 기타등등의 이유로 아직까지는 플리커의 손을 들어주고 싶네요.이상과 같이 플리커와 피카사의 API를 이용하여 이미지를 업로드하는 방법에 대해서 알아보았습니다.
# by | 2009/04/16 17:21 | 트랙백(1) | 덧글(0)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
제목 : Picasa v3.1 Build 71.36 - Go..
Picasa v3.1 Build 71.36.exe 제작자 설명 Picasa 는 PC에서 사진을 바로 검색하여 수정 및 공유할 수 있도록 해주는 사진관리용 소프트웨어입니다. Picasa를 사용할 때마다 모든 사진이 자동으로 검색되고(잊고 있었던 사진까지 찾으실 수 있습니다) 날짜 및 폴더 이름순으로 앨범에 정렬됩니다. 앨범을 통해 사진을 정리하고 분류를 만들어 새로운 그룹을 생성할 수 있습니다. Picasa에서는 사진이 항상 정리된 상태로 유지됩......more