`
zhaole609
  • 浏览: 338698 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

新浪微博开发的一点注意事项

阅读更多

自从新浪微博开放api之后,很多爱好者纷纷开发自己的新浪微博客户端,虽然官方平台提供了很多已经开发好的类库,但作为java编程爱好者来说,总想自己实现其中的类库,从而使用自己对网络编程更深入的了解,也是说只需查看新浪微博开放的API:http://open.t.sina.com.cn/wiki/index.php/API%E6%96%87%E6%A1%A3就可以自己开发了。但是需要注意的是。很多接口需要用户的id和密码。但是在网络上传输时是经过加密的,但是新浪微博是用什么加密算法呢?经查看得是,其加密类如下:    private static final char last2byte = (char) Integer.parseInt("00000011", 2);
    private static final char last4byte = (char) Integer.parseInt("00001111", 2);
    private static final char last6byte = (char) Integer.parseInt("00111111", 2);
    private static final char lead6byte = (char) Integer.parseInt("11111100", 2);
    private static final char lead4byte = (char) Integer.parseInt("11110000", 2);
    private static final char lead2byte = (char) Integer.parseInt("11000000", 2);
    private static final char[] encodeTable = new char[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'};

    public BASE64Encoder() {
    }

    public  String encode(byte[] from) {
        StringBuffer to = new StringBuffer((int) (from.length * 1.34) + 3);
        int num = 0;
        char currentByte = 0;
        for (int i = 0; i < from.length; i++) {
            num = num % 8;
            while (num < 8) {
                switch (num) {
                    case 0:
                        currentByte = (char) (from[i] & lead6byte);
                        currentByte = (char) (currentByte >>> 2);
                        break;
                    case 2:
                        currentByte = (char) (from[i] & last6byte);
                        break;
                    case 4:
                        currentByte = (char) (from[i] & last4byte);
                        currentByte = (char) (currentByte << 2);
                        if ((i + 1) < from.length) {
                            currentByte |= (from[i + 1] & lead2byte) >>> 6;
                        }
                        break;
                    case 6:
                        currentByte = (char) (from[i] & last2byte);
                        currentByte = (char) (currentByte << 4);
                        if ((i + 1) < from.length) {
                            currentByte |= (from[i + 1] & lead4byte) >>> 4;
                        }
                        break;
                }
                to.append(encodeTable[currentByte]);
                num += 6;
            }
        }
        if (to.length() % 4 != 0) {
            for (int i = 4 - to.length() % 4; i > 0; i--) {
                to.append("=");
            }
        }
        return to.toString();
    }
}

base64编码方式很简间,就是把每3个字符扩展到4个字符上即3*8=4*6=24,然后把这4个6位扩展到8位上。高位补0.

下面简单介绍一下其应用。我举个例子:public class GetFriendMessage {

	public static void main(String[] args){
		try {
			URL url=new URL("http://api.t.sina.com.cn/statuses/friends_timeline.xml?source=xxxxxx");//此处请看api
			HttpURLConnection connection=(HttpURLConnection)url.openConnection();
			String basic="Basic " +
            new String(new BASE64Encoder().encode(("xxxxx" + ":"+"xxxx").getBytes()));//此处xxx分加为用户长账号和密码
			connection.addRequestProperty("Authorization",basic);
			connection.setRequestMethod("GET");
		//onnection.setr*/
			connection.setDoInput(true);
			connection.setDoOutput(true);
			connection.connect();
			BufferedReader reader=new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));
			String message=reader.readLine();
			while(message!=null){
				System.out.println(message);
				message=reader.readLine();
			}
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

返回结果就是该用户好友的一些最新信息,部分返回结果如下  <?xml version="1.0" encoding="UTF-8"?>

<statuses><status><created_at>Sun May 29 20:36:18 +0800 2011</created_at>

<id>11385192916</id>

<text>【英国威廉婚礼 义乌赚亿元】英国威廉王子与凯特?米德尔顿的“童话婚礼”举办

至今刚好整一个月,在远离英国的中国浙江义乌,与这场婚礼有关的生意账目也盘点出来了。

这场英国皇室婚礼庆典,前前后后居然让义乌的私营企业老板和市场商户们赚了个盆满钵满。

http://t.cn/hDKaZk</text><source><a href="http://weibo.com">新浪微博</a><

/source><favorited>false</favorited><truncated>false</truncated><geo/>

<in_reply_to_status_id></in_reply_to_status_id><in_reply_to_user_id>

</in_reply_to_user_id><in_reply_to_screen_name></in_reply_to_screen_name>

<mid>5612115989781482830</mid><user><id>1700720163</id><screen_name>钱江晚报

</screen_name>

<name>钱江晚报</name><province>33</province><city>1</city><location>浙江 杭州</location>

<description>浙江发行量最大,覆盖面最广,品牌影响力最大的报纸。和读者一道仰望头顶星空,温暖彼此心灵,

是我们的理想。</description><url>http://www.qjwb.com.cn</url><profile_image_url>

http://tp4.sinaimg.cn/1700720163/50/1279888447/1</profile_image_url><domain>qjwb

</domain><gender>m</gender><followers_count>398507</followers_count>

<friends_count>230</friends_count><statuses_count>3103</statuses_count>

<favourites_

 

然后只需对这个xml文件解析了。sax,dom4j,jdom都可以。如果喜欢操作json,那只需把请求对象改成.json格式的就行了,不解释了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics