Android抓取正方系统课程——实现自己的课程表

Android抓取正方系统课程——实现自己的课程表


上一篇博客讲解了如何使用http协议模拟登陆正方系统,今天继续实现如何抓取课程表并显示在Android界面上,效果如图:

由于偷懒,在界面上没下太多功夫,看得过去就行了哈哈哈。

在我们第一次点击 专业推荐课表查询 的时候,浏览器干了这么件事。

Request URL:http://210.38.162.117/(4nqfqf55wv4suyi0aewkdgiy)/tjkbcx.aspx?xh=131110142&xm=%D0%A4%C9%D9%D0%C7&gnmkdm=N121601
Request Method:GET
Host:210.38.162.117
Referer:http://210.38.162.117/(4nqfqf55wv4suyi0aewkdgiy)/xs_main.aspx?xh=131110142

它向服务器发起了一次get,请求的路径是

http://210.38.162.117/(4nqfqf55wv4suyi0aewkdgiy)/tjkbcx.aspx?xh=131110142&xm=%D0%A4%C9%D9%D0%C7&gnmkdm=N121601

其实和查成绩的路径很类似,
xh是学号,xm是Url编码过的你的名字,gnmkdm在查询课表的时候为N121601。

/**
 * 专业课表查询的url
 */
String queryTimeTableUrl = "http://210.38.162.117/(sxaiuuqeeivmbu555ha1bd55)/tjkbcx.aspx?xh={xh}&xm={name}&gnmkdm=N121605";

String REFERER="http://210.38.162.117/(sxaiuuqeeivmbu555ha1bd55)/xs_main.aspx?xh=131110142";

String HOST="210.38.162.117";
/**
 * 第一次查询的时候只需访问链接
 */
public void queryTimeTableFirstTime() throws UnsupportedEncodingException {
    queryTimeTableUrl = queryTimeTableUrl.replace("{xh}", account).replace("{name}", URLEncoder.encode(name, "gb2312"));
    final Request request = new Request.Builder()
            .url(queryTimeTableUrl)
            //必须带上登陆成功是返回的链接和Host
            .addHeader("Referer", REFERER)
            .addHeader("Host", HOST)
            .build();
    okHttpClient.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Request request, IOException e) {
            showToast("课表查询失败");
        }

        @Override
        public void onResponse(Response response) throws IOException {
            if (response.isSuccessful()) {
                BufferedReader br = new BufferedReader(new InputStreamReader(response.body().byteStream(), "gb2312"));
                StringBuilder sb = new StringBuilder();
                String line;
                while ((line = br.readLine()) != null) {
                    sb.append(line);
                }
                parseTimeTableHtml(sb.toString());
            }
        }
    });
}

之后要做的是就是解析html页面了,我简单抽取了部分html代码,如下:

这一部分保存了功课表的内容

<table id="Table6" class="blacktab" rules="all" border="1" height="132" width="100%">
    <tr>
        <td colspan="2" rowspan="1" width="2%">时间</td>
        <td align="Center" width="14%">星期一</td>
        <td align="Center" width="14%">星期二</td>
        <td align="Center" width="14%">星期三</td>
        <td align="Center" width="14%">星期四</td>
        <td align="Center" width="14%">星期五</td>
        <td align="Center" width="14%">星期六</td>
        <td align="Center" width="14%">星期日</td>
    </tr>
    <tr>
        <td colspan="2">早晨</td>
        <td align="Center">&nbsp;</td>
        <td align="Center">&nbsp;</td>
        <td align="Center">&nbsp;</td>
        <td align="Center">&nbsp;</td>
        <td align="Center">&nbsp;</td>
        <td align="Center">&nbsp;</td>
        <td align="Center">&nbsp;</td>
    </tr>
    <tr>
        <td rowspan="4" width="1%">上午</td>
        <td width="1%">第1节</td>
        <td align="Center" rowspan="2" width="7%">计算机组成原理<br>2节/周(1-17)<br>张凤英<br>田师208<br></td>
        <td align="Center" rowspan="2" width="7%">汇编语言程序设计<br>2节/周(1-17)<br>陈生庆<br>田师211<br></td>
        <td align="Center" width="7%">&nbsp;</td>
        <td align="Center" rowspan="2" width="7%">教育学<br>2节/周(1-16)<br>刘奕涛<br>田师208<br></td>
        <td align="Center" rowspan="2" width="7%">汇编语言程序设计<br>2节/双周(1-17)<br>陈生庆<br>锡科407<br><br><br>软件工程<br>2节/单周(1-17)<br>陈世基<br>锡科405<br></td>
        <td align="Center" width="7%">&nbsp;</td>
        <td align="Center" width="7%">&nbsp;</td>
    </tr>
    <tr>
        <td>第2节</td>
        <td align="Center">&nbsp;</td>
        <td align="Center">&nbsp;</td>
        <td align="Center">&nbsp;</td>
    </tr>
    <tr>
        <td>第3节</td>
        <td align="Center" rowspan="2">汇编语言程序设计<br>2节/单周(1-17)<br>陈生庆<br>田师211<br></td>
        <td align="Center" rowspan="2">数据库系统原理<br>2节/单周(1-17)<br>张海峰<br>田师201<br></td>
        <td align="Center" rowspan="2">计算机组成原理<br>2节/周(1-17)<br>张凤英<br>田师208<br></td>
        <td align="Center" rowspan="2">软件工程<br>2节/单周(1-17)<br>陈世基<br>锡科505<br></td>
        <td align="Center" rowspan="2">网络基础<br>2节/双周(1-17)<br>吴华光<br>锡科407<br></td>
        <td align="Center">&nbsp;</td>
        <td align="Center">&nbsp;</td>
    </tr>
    <tr>
        <td>第4节</td>
        <td align="Center">&nbsp;</td>
        <td align="Center">&nbsp;</td>
    </tr>
    <tr>
        <td rowspan="4" width="1%">下午</td>
        <td>第5节</td>
        <td align="Center" rowspan="2">数据库系统原理<br>2节/双周(1-17)<br>张海峰<br>锡科405<br></td>
        <td align="Center">&nbsp;</td>
        <td align
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值