Flickr Open API를 각 언어별로 구현해 둔 오픈소스들이 많이 있다. 야후 플리커에서 소개하고 있는 킷 중에 Flickr-j 오픈소스를 이용해서 플리커의 이미지를 검색하는 예제소스를 구현해 보자.
플리커, 피카사, 아마존, 구글 API등을 이용한 새로운 서비스를 만드는 것을 매쉬업이라고 한다. 아마도 대부분은 이에 대한 것을 잘 알고 있으리라 생각하고 생략한다. 그냥 나도 이번 기회를 통해서 매쉬업 서비스를 중점적으로 연구해 볼까? 하는 생각을 해 본다. 물론 언제나 시간적 여건이 마련되어야 하지만...^^;;
암튼, 매쉬업 서비스를 위한 첫 발걸음을 본격적으로 내딛었다고 생각한다. 그럼 다음의 소스를 간략하게 실행해 보자.
컴파일, 실행 전에 반드시 flickrapi.jar 를 classpath에 포함시켜야 한다. 이클립스 환경에서 수행하면 쉽게 수행할 수 있다.
/**
* FlickrSearch.java
*
* Flickr-j를 이용한 Flickr 검색 애플리케이션
*
*/
package net.wiseant.flickr.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import com.aetrion.flickr.Flickr;
import com.aetrion.flickr.FlickrException;
import com.aetrion.flickr.REST;
import com.aetrion.flickr.RequestContext;
import com.aetrion.flickr.auth.Auth;
import com.aetrion.flickr.auth.Permission;
import com.aetrion.flickr.photos.Photo;
import com.aetrion.flickr.photos.PhotosInterface;
import com.aetrion.flickr.photos.SearchParameters;
import com.aetrion.flickr.util.IOUtilities;
/**
* @author Sang Hyup Lee
* @version 1.0
*
*/
public class FlickrSearch {
static String apiKey;
static String sharedSecret;
Flickr flickr;
REST rest;
RequestContext requestContext;
Properties properties = null;
public FlickrSearch() throws ParserConfigurationException, IOException {
InputStream in = null;
try {
in = getClass().getResourceAsStream("/setup.properties");
properties = new Properties();
properties.load(in);
} finally {
IOUtilities.close(in);
}
flickr = new Flickr(properties.getProperty("apiKey"), properties.getProperty("secret"), new REST());
requestContext = RequestContext.getRequestContext();
requestContext.setSharedSecret(properties.getProperty("secret"));
Auth auth = new Auth();
auth.setPermission(Permission.READ);
auth.setToken(properties.getProperty("token"));
requestContext.setAuth(auth);
Flickr.debugRequest = false;
Flickr.debugStream = false;
}
public void search() throws FlickrException, IOException, SAXException {
Map starredPhotos = new HashMap();
Map blockedPhotos = new HashMap();
PhotosInterface photosInterface = flickr.getPhotosInterface();
SearchParameters params = new SearchParameters();
// tag setter
// params.setTags(new String[] {"java", "jsp"});
params.setText("java");
int perPage = 10;
int pageIndex = 0;
List photoList = photosInterface.search(params, perPage, pageIndex);
List photos = new ArrayList();
System.out.println("===== Search result =====");
for ( Object object : photoList ) {
Map photoMap = new HashMap();
Photo photo = (Photo)object;
System.out.println("Photo id : " + photo.getId());
System.out.println("Photo title : " + photo.getTitle());
System.out.println("Photo small square url : " + photo.getSmallSquareUrl());
photoMap.put("url", photo.getSmallSquareUrl());
String id = photo.getId();
photoMap.put("id", id);
Boolean starred = (Boolean) starredPhotos.get(id);
photoMap.put("starred", starred == null ? Boolean.FALSE : starred);
if (blockedPhotos.get(id) == null) {
photos.add(photoMap);
}
}
}
/**
* @param args
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
FlickrSearch flickrSearch = new FlickrSearch();
flickrSearch.search();
System.exit(0);
}
}
위의 소스를 실행하기 전에 setup.properties를 properties로 설정해 두는 부분이 있다. setup.properties의 양식은 다음과 같다.
apiKey = your api key
secret = your secret
token = your token
setup.properties 에서 value 값으로 사용되는 것들은 플리커 API 키를 신청하면 얻을 수 있다. token은 flickr-j 의 examples 소스의 AuthExample.java 를 통해서 얻어올 수 있다.
특별히 설명이나 어려운 부분없다. 대부분은 flickr-j 에서 제공함으로 API를 호출하기만 하면 된다. example을 통해서 여러 가지 살펴보고 있는데, 블로그를 통해서 소개할 만한 부분들은 언제든지 소개할 것이다.
이것으로 첫 매쉬업 서비스를 런칭해 보았다^^
참, flickrj 는 다음의 주소에서 구할 수 있다.
댓글 2개:
token 얻기 위해 AuthExample.java 실행하면 아래의 오류가 나는데 뭘까요?
com.aetrion.flickr.FlickrException: 108: Invalid frob
at com.aetrion.flickr.auth.AuthInterface.getToken(AuthInterface.java:182)
at AuthExample.<init>(AuthExample.java:65)
at AuthExample.main(AuthExample.java:81)
Authentication failed
@핫독 - 2009/05/28 16:50
글쎄요... 단순하게 에러 메시지만 봐서는 아무래도 인증키를 잘 못 넣으신게 아닌가 하는 생각이 듭니다.
저도 몇 번의 시도 끝에 성공했던 기억이 나네요...
오래전 이야기 인지라 쉽게 생각나진 않군요^^;;
apiKey와 secret 값을 정확하게 기입하셨는지 확인해 보시길 바랍니다.
감사합니다.
댓글 쓰기