package org.manalith.ircbot.plugin.urlshortener; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.stereotype.Component; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @Component public class BitLyProvider implements UrlShortenerProvider { private Logger logger = LoggerFactory.getLogger(getClass()); private String apiLogin; private String apiKey; @Override public String shorten(String url) { RestTemplate rest = new RestTemplate(); rest.getMessageConverters().add( new MappingJackson2HttpMessageConverter()); try { ShortenApiResponse data = rest .getForObject( "http://api.bitly.com/v3/shorten?login={apiLogin}&apiKey={apiKey}&longUrl={longUrl}", ShortenApiResponse.class, apiLogin, apiKey, URLEncoder.encode(url, "UTF-8")); return data.data.url; } catch (UnsupportedEncodingException | RestClientException e) { logger.warn(e.getMessage(), e); } return null; } public String getApiKey() { return apiKey; } public void setApiKey(String apiKey) { this.apiKey = apiKey; } public String getApiLogin() { return apiLogin; } public void setApiLogin(String apiLogin) { this.apiLogin = apiLogin; } /** * bit.ly url shortener api 응답 모델. 참고 : * http://dev.bitly.com/links.html#v3_shorten * * @author setzer * */ @JsonIgnoreProperties(ignoreUnknown = true) public static class ShortenApiResponse { public Data data; public String status_code; public String status_txt; @JsonIgnoreProperties(ignoreUnknown = true) public static class Data { public String global_hash; public String hash; public String long_url; public String new_hash; public String url; } } }