读书人

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

发布时间: 2012-10-28 09:54:44 作者: rapoo

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

自从新浪微博开放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");//此处请看apiHttpURLConnection 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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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格式的就行了,不解释了。

读书人网 >编程

热点推荐