博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【新手入门篇】新浪微博应用开发之Java入门篇
阅读量:4590 次
发布时间:2019-06-09

本文共 7635 字,大约阅读时间需要 25 分钟。

新浪微博应用开发之Java篇

 

20121111日星期日

一、开发流程简介:

1、  访问注册成为开发者

2、  在以下地址创建一个应用,假设创建一个桌面应用:

 

3、  进入管理中心,查看并记住应用ID和密码:

 

 

4、  在“应用中心-高级信息”设置回调页面(设置后一般需要半小时左右才能生效):

 

OK,准备工作完成!

二、不使用任何SDK实现Oauth授权并实现简单的发布微博功能:

创建一个Java项目,编写如下代码,具体过程代码中已写的很清楚,这里不再做解释:

注意先修改应用ID、应用密码和回调页面成你自己的!访问授权页面:

 

package com;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.URL;import java.net.URLConnection;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import java.util.Scanner;import javax.net.ssl.X509TrustManager;/** * @author 刘显安 * 不使用任何SDK实现新浪微博Oauth授权并实现发微薄小Demo * 日期:2012年11月11日 */public class Test{    static String clientId="2355065950";//你的应用ID    static String clientSecret="72037e76bee00315691d9c30dd8a386a";//你的应用密码    static String redirectUri="https://api.weibo.com/oauth2/default.html";//你在应用管理中心设置的回调页面        public static void main(String[] args) throws Exception    {        testHttps();//测试        //第一步:访问授权页面获取授权        System.out.println("请打开你的浏览器,访问以下页面,登录你的微博账号并授权:");        System.out.println("https://api.weibo.com/oauth2/authorize?client_id="+clientId+"&response_type=code&redirect_uri="+redirectUri+"&forcelogin=true");        //第二步:获取AccessToken        System.out.println("请将授权成功后的页面地址栏中的参数code:");        String code=new Scanner(System.in).next();        getAccessToken(code);        //第三步:发布一条微博        System.out.println("请输入上面返回的值中accessToken的值:");        String accessToken=new Scanner(System.in).next();        updateStatus("发布微博测试!来自WeiboDemo!", accessToken);    }    /**     * 测试能否正常访问HTTPS打头的网站,     */    public static void testHttps()    {        try        {            trustAllHttpsCertificates();//设置信任所有的http证书            URL url=new URL("https://api.weibo.com/oauth2/default.html");            URLConnection con=url.openConnection();            con.getInputStream();            System.out.println("恭喜,访问HTTPS打头的网站正常!");        }        catch (Exception e)        {            e.printStackTrace();        }    }    /**     * 以Post方式访问一个URL     * @param url 要访问的URL     * @param parameters URL后面“?”后面跟着的参数     */    public static void postUrl(String url,String parameters)    {        try        {            trustAllHttpsCertificates();//设置信任所有的http证书            URLConnection conn = new URL(url).openConnection();            conn.setDoOutput(true);// 这里是关键,表示我们要向链接里注入的参数            OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());// 获得连接输出流            out.write(parameters);            out.flush();            out.close();            // 到这里已经完成了,开始打印返回的HTML代码            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));            String line = null;            while ((line = reader.readLine()) != null)            {                System.out.println(line);            }        }        catch (Exception e)        {            e.printStackTrace();        }    }    /**     * 获取AccessToken     * @param code 在授权页面返回的Code     */    public static void getAccessToken(String code)    {        String url="https://api.weibo.com/oauth2/access_token";        String parameters="client_id=" +clientId+"&client_secret=" +clientSecret+            "&grant_type=authorization_code" +"&redirect_uri=" +redirectUri+"&code="+code;        postUrl(url, parameters);    }    /**     * 利用刚获取的AccessToken发布一条微博     * @param text 要发布的微博内容     * @param accessToken 刚获取的AccessToken     */    public static void updateStatus(String text,String accessToken)    {        String url="https://api.weibo.com/2/statuses/update.json";        String parameters="status="+text+"&access_token="+accessToken;        postUrl(url, parameters);        System.out.println("发布微博成功!");    }    /**     * 设置信任所有的http证书(正常情况下访问https打头的网站会出现证书不信任相关错误,所以必须在访问前调用此方法)     * @throws Exception     */    private static void trustAllHttpsCertificates() throws Exception    {        javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];        trustAllCerts[0] = new X509TrustManager()        {            @Override            public X509Certificate[] getAcceptedIssuers()            {                return null;            }            @Override            public void checkServerTrusted(X509Certificate[] arg0, String arg1)                    throws CertificateException            {}            @Override            public void checkClientTrusted(X509Certificate[] arg0, String arg1)                    throws CertificateException            {}        };        javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");        sc.init(null, trustAllCerts, null);        javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());    }}

访问授权页面:

授权成功:

 

发布微博成功:

 

控制台输出结果:

 

三、使用weibo4j-oauth2这个SDK做一个简单的抢沙发工具:

1、SDK下载:

下载下来是个包含测试代码的整个SDK源代码,可以打包成jar文件方便调用,我这里打包成名为weibo4j-oauth2.jar的文件,注意先修改config.properties文件中的应用id、应用密码、回调页面。

2、在项目中导入以下6个包:

 

3、使用WindowsBuild新建一个Jframe窗体,大体布局如下:

三个按钮的事件分别如下:

public Date minTime;//最近一条微博的更新时间    /**     * 打开授权页面     */    public void openUrl()    {        try        {            BareBonesBrowserLaunch.openURL(new Oauth().authorize("code"));        }        catch (WeiboException e)        {            e.printStackTrace();        }    }    /**     * 获取当前登录用户的好友列表     */    public void getFriends()    {        try        {            //获取好友列表            accessToken=new Oauth().getAccessTokenByCode(textFieldCode.getText());            Friendships friendships=new Friendships();            friendships.setToken(accessToken.getAccessToken());            for(User user:friendships.getFriendsByID(accessToken.getUid()).getUsers())            {                comboBox.addItem(user.getName());            }        }        catch (WeiboException e)        {            e.printStackTrace();        }    }    /**     * 开始监控关注用户的微博     * @throws WeiboException      */    public void start()    {        try        {            System.out.println("开始监控");            Timeline timeline=new Timeline();            timeline.setToken(accessToken.getAccessToken());            minTime = timeline.getUserTimelineByName(comboBox.getSelectedItem().toString()).getStatuses().get(0).getCreatedAt();            Timer timer=new Timer();            timer.schedule(new TimerTask()            {                @Override                public void run()                {                    try                    {                        Timeline timeline=new Timeline();                        timeline.setToken(accessToken.getAccessToken());                        Status status=timeline.getUserTimelineByName(comboBox.getSelectedItem().toString()).getStatuses().get(0);                        if(status.getCreatedAt().after(minTime))//如果最新微博的发表时间在之前相对时间的后面                        {                            minTime=status.getCreatedAt();                            System.out.println("你关注的用户更新微博啦");                            Comments comments=new Comments();                            comments.setToken(accessToken.getAccessToken());                            comments.createComment("哈哈,我来评论啦!", status.getId());                            JOptionPane.showMessageDialog(null, "恭喜,抢沙发成功!");                        }                    }                    catch (WeiboException e)                    {                        e.printStackTrace();                    }                }            }, 0, 5000);//设置5秒钟刷新一次        }        catch (WeiboException e)        {            e.printStackTrace();        }    }

项目源代码下载地址:

整理后的SDK下载地址:

有问题可以联系: 

微博:

博客园:

转载于:https://www.cnblogs.com/liuxianan/archive/2012/11/11/2765123.html

你可能感兴趣的文章
PHP性能优化
查看>>
poj 1743 后缀数组 最长不重叠子串
查看>>
python3 在文件确实存在的情况下,运行提示找不到文件
查看>>
机器学习单词记录--01章初识机器学习
查看>>
聊Javascript中的AOP编程
查看>>
读书笔记-你不知道的JS中-promise
查看>>
.35-浅析webpack源码之babel-loader入口文件路径读取
查看>>
VC++ ini文件操作
查看>>
忘记WiFi密码不用怕,一个命令轻松查看你连接过的所有WiFi及密码!
查看>>
魔术方法、魔术常量
查看>>
Eclipse搭建Struts2环境
查看>>
设备管理,连接两个数据库,用的easygui
查看>>
Ucore lab1实验报告
查看>>
算法导论之插入排序和归并排序
查看>>
VC++中对话框界面重绘1-概述
查看>>
正则例子
查看>>
简介---linux内核态和用户态
查看>>
MIT Python 第四课函数抽象与递归简介 函数调用与原代码的区别
查看>>
C++Primer第五版——习题答案详解(三)
查看>>
解决Google Play审核中的WebViewClient.onReceivedSslError问题
查看>>