有趣的两个第三方应用,邮箱关联头像和URL缩短

[1]. 用户头像显示
地址: http://en.gravatar.com/
Gravatar会把邮箱和对应邮箱用户上传的图片进行关联.
如果你的应用使用了gravatar,访问你应用的用户有在gravatar上注册且上传了头像,你的应用就可以通过用户留下的邮箱地址来显示图片,你可以把它当成用户的头像.
使用Gravatar的话就可以除去要向客户传输图片的压力,当然这也需要用户有在Gravatar注册过账号..

/**
 * 类名: Gravatar.java<br />
 * 类描述:Gravatar邮箱关联图片,头像显示
 * 
 * @version: 1.0
 * @date: 2013-4-4 下午7:35:27
 * **/
public class Gravatar {
	private final static String BASE = "http://www.gravatar.com/avatar/";
	
	/**
	 * 方法描述:通过邮箱获取图片地址
	 * @param email 邮箱地址
	 * @param size 图片大小
	 * @return: 图片地址
	 * @version: 1.0
	 * @date: 2013-4-4 下午7:45:03
	 * **/
	public static String getImage(String email, Integer size) {
		return BASE + md5Hex(email) + "?s=" + size + "&d=mm";
	}
	
	/**
	 * 方法描述:通过邮箱批量获取图片地址
	 * @param emailList 多个邮箱地址
	 * @return: 图片地址集合
	 * @param size 图片大小
	 * @version: 1.0
	 * @date: 2013-4-4 下午7:42:39
	 * **/
	public static List<String> getImages(List<String> emailList, Integer size) {
		List<String> list = new ArrayList<String>();
		for (String email : emailList) {
			list.add(BASE + md5Hex(email) + "?s=" + size + "&d=mm");
		}
		return list;
	}
	
	
	
	//------------	以下为私有方法
	
	private static String hex(byte[] array) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < array.length; ++i) {
			sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(
					1, 3));
		}
		return sb.toString();
	}
	private static String md5Hex(String message) {
		String result = "";
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			result = hex(md.digest(message.getBytes("CP1252")));
		} catch (NoSuchAlgorithmException e) {
		} catch (UnsupportedEncodingException e) {
		}
		return result;
	}
}


[2]. URL缩短
地址: http://p.tl/api.php
缩短URL,将用户的URL关联到她域名下的一个地址.

/**
 * 类名: PixivURL.java<br />
 * 类描述:URL缩短
 * @version: 1.0
 * @date: 2013-4-5 下午10:27:46
 * **/
public class PixivURL extends P implements PStatus {
	/** API_KEY: API_KEY **/
	private static final String API_KEY = "1f726de5d07a80556e7f54baeffab04b30f348c0";


	/**
	 * 方法描述:url缩短
	 * @param url 原始地址
	 * @return: 缩短后的url
	 * @version: 1.0
	 * @date: 2013-4-5 下午10:29:15
	 * **/
	public static PixivURL getInstance(String url) {
		String requestUrl = "http://p.tl/api/api_simple.php?key=" + API_KEY + "&url=" + url;
		URL u;
		BufferedReader br;
		PixivURL p = null;
		String link;
		try {
			u = new URL(requestUrl);
			URLConnection conn = u.openConnection();
			InputStream is = conn.getInputStream();
			InputStreamReader isr = new InputStreamReader(is);
			br = new BufferedReader(isr);
			while(null != (link = br.readLine())){
	 			Gson gson = new Gson();
	 			p = gson.fromJson(link, PixivURL.class);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return p;
	}
	
	
	/**
	 * 方法描述:批量处理
	 * @param urls URL集合
	 * @return: 修改后的URL
	 * @version: 1.0
	 * @date: 2013-4-5 下午11:44:35
	 * **/
	public static List<PixivURL> getInstance(List<String> urls) {
		List<PixivURL> list = new ArrayList<PixivURL>();
		for (String url : urls) {
			list.add(PixivURL.getInstance(url));
		}
		return list;
	}
}

class P {
	/** status: 操作状态(成功返回PixivURL.REQUEST_SUCCESS) **/
	private String status;
	/** long_url: 原始的URL **/
	private String long_url;
	/** short_url: 缩短的URL **/
	private String short_url;
	/** counter: 使用了几次(1天能调用1000次) **/
	private String counter;
	
	/** @return status : 操作状态 **/
	public String getStatus() {
		return status;
	}
	/** @return long_url : 原始的URL **/
	public String getLongUrl() {
		return long_url;
	}
	/** @return short_url : 缩短的URL **/
	public String getShortUrl() {
		return short_url;
	}
	/** @return counter : 使用了几次(1天能调用1000次) **/
	public String getCounter() {
		return counter;
	}
}

interface PStatus {
//	empty API key	APIキーが入力されていません。
//	invalid API key	不正なAPIキーです。
	/** OK: URL成功缩短/URLの短縮が成功しました **/
	static String OK = "ok";
	/** EMPTY_LONG_URL: 未输入需要缩短的URL/短縮元のURLが入力されていません **/
	String EMPTY_LONG_URL = "empty long url";
	/** API_LIMIT: 调用次数超过上限(1天能调用1000次)/APIの利用回数が上限を越えています **/
	String API_LIMIT = "API limit";
	/** INVALID_LONG_URL: URL无法缩短 /短縮できないURLです**/
	String INVALID_LONG_URL = "invalid long url";
}



附件就是上面描述的两个应用,[2]会用到gson
下面是演示调用:

public class Test {

	public static void main(String[] args) throws Exception{
		pixivURL();
		gravatar();
	}
	
	private static void pixivURL() throws Exception {
		PixivURL p = PixivURL.getInstance("http://lshtzml-163-com.iteye.com/admin/blogs/1842602");
		
		if (PixivURL.OK.equals(p.getStatus())) {
			Desktop.getDesktop().browse(new URL(p.getShortUrl()).toURI());
		} else if (PixivURL.API_LIMIT.equals(p.getStatus())) {
			System.out.println("调用次数超过上限");
		} else if (PixivURL.EMPTY_LONG_URL.equals(p.getStatus())) {
			System.out.println("未输入需要缩短的URL");
		} else if (PixivURL.INVALID_LONG_URL.equals(p.getStatus())) {
			System.out.println("URL无法缩短");
		}
	}

	private static void gravatar() throws Exception {
		String url = Gravatar.getImage("[email protected]", 200);
		Desktop.getDesktop().browse(new URL(url).toURI());
	}
}

你可能感兴趣的:(java,gravatar,pixiv)