package com.googlecode.flickr2twitter.impl.flickr; import com.googlecode.flickr2twitter.model.IPhoto; /** * http://www.flickr.com/groups/api/discuss/72157616713786392/ * http://dl.dropbox.com/u/1844215/FlickrBaseEncoder.java * */ public class FlickrBaseEncoder { protected static String alphabetString = "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"; protected static char[] alphabet = alphabetString.toCharArray(); protected static int base_count = alphabet.length; public static final String FLICKR_SHORT_URL_PREFIX = "http://flic.kr/p/"; public static String getShortUrl(IPhoto photo) { String url = photo.getUrl(); String id = photo.getId(); if (id == null || id.length() == 0) { int index = url.lastIndexOf("/"); if (index > 0) { id = url.substring(index + 1, url.length()).trim(); } else { return url; } } String suffix = encode(Long.parseLong(id)); url = FLICKR_SHORT_URL_PREFIX + suffix; return url; } public static String encode(long num){ String result = ""; long div; int mod = 0; while (num >= base_count) { div = num/base_count; mod = (int)(num-(base_count*(long)div)); result = alphabet[mod] + result; num = (long)div; } if (num>0){ result = alphabet[(int)num] + result; } return result; } public static long decode(String link){ long result= 0; long multi = 1; while (link.length() > 0) { String digit = link.substring(link.length()-1); result = result + multi * alphabetString.lastIndexOf(digit); multi = multi * base_count; link = link.substring(0, link.length()-1); } return result; } }