服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - JAVA教程 - Java模拟登录正方教务抓取成绩、课表、空教室

Java模拟登录正方教务抓取成绩、课表、空教室

2020-04-16 13:54lijiao JAVA教程

这篇文章主要介绍了Java模拟登录正方教务抓取成绩、课表、空教室等信息,Java实现模拟登录正方教务抓取成绩、课表、空教室,通过HttpClient来模拟浏览器请求,Jsoup解析网页内容,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Java模拟登录正方教务抓取成绩、课表、空教室等信息,供大家参考,具体内容如下

1.Jwgl.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
package com.ican.yueban.jwgl;
 
import java.io.IOException;
 
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
 
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
 
import com.ican.yueban.utils.DateUtils;
import com.ican.yueban.utils.GlobalConstant;
import com.ican.yueban.utils.IOUtils;
import com.ican.yueban.utils.ParseUtils;
 
public class Jwgl {
  private static String stuNumber = "";
  private static String stuName = "";
  private static String Cookie = "";
  private String indexUrl = GlobalConstant.INDEX_URL;
  private String secretCodeUrl = GlobalConstant.SECRETCODE_URL;
  private String loginUrl = GlobalConstant.LOGIN_URL;
  private String mainUrl = GlobalConstant.MAIN_URL;
  private String queryClassroomUrl = GlobalConstant.QUERY_CLASSROOM_URL;
  private String queryClassroomGnmkdm = GlobalConstant.QUERY_CLASSROOM_GNMKDM;
  private String queryStuGradeUrl = GlobalConstant.QUERY_STU_GRADE_URL;
  private String queryStuGradeGnmkd = GlobalConstant.QUERY_STU_GRADE_GNMKDM;
  private String queryStuCourseUrl = GlobalConstant.QUERY_STU_COURSE_URL;
  private String queryStuCourseGnmkd = GlobalConstant.QUERY_STU_COURSE_GNMKDM;
  private String xixiaoqu = GlobalConstant.XIXIAOQU;
  private String identityStu = GlobalConstant.IDENTITY_STU;
 
  /**
   * 登录功能
   *
   * @param stuNumber
   * @param password
   * @return
   * @throws Exception
   * @throws UnsupportedOperationException
   */
  public boolean login(String stuNumber, String password)
      throws UnsupportedOperationException, Exception {
    this.stuNumber = stuNumber;
    // 获取验证码
    HttpGet secretCodeGet = new HttpGet(secretCodeUrl);
    CloseableHttpClient client = HttpClients.createDefault();
    CloseableHttpResponse responseSecret = client.execute(secretCodeGet);
    // 获取返回的Cookie
    Cookie = responseSecret.getFirstHeader("Set-Cookie").getValue();
    String viewState = IOUtils.getViewState(indexUrl, "", "");
    // 将验证码下载到C盘
    IOUtils.getSecret(responseSecret.getEntity().getContent(),
        "secretCode.png", "c://");
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入验证码:");
    // 手动填充刚才获取的验证码的值
    String secret = sc.next().trim();
    HttpPost loginPost = new HttpPost(loginUrl);// 创建登录的Post请求
    loginPost.setHeader("Cookie", Cookie);// 带上第一次请求的Cookie
    List<NameValuePair> nameValuePairLogin = new ArrayList<NameValuePair>();// 封装Post提交参数
    nameValuePairLogin
        .add(new BasicNameValuePair("__VIEWSTATE", viewState));// 隐藏表单值
    nameValuePairLogin
        .add(new BasicNameValuePair("txtUserName", stuNumber));// 学号
    nameValuePairLogin.add(new BasicNameValuePair("TextBox2", password));// 密码
    nameValuePairLogin.add(new BasicNameValuePair("txtSecretCode", secret));// 验证码
    nameValuePairLogin.add(new BasicNameValuePair("RadioButtonList1",
        identityStu));// 身份,默认学生
    nameValuePairLogin.add(new BasicNameValuePair("Button1", ""));
    nameValuePairLogin.add(new BasicNameValuePair("lbLanguage", ""));
    nameValuePairLogin.add(new BasicNameValuePair("hidPdrs", ""));
    nameValuePairLogin.add(new BasicNameValuePair("hidsc", ""));
    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(
        nameValuePairLogin, "GB2312");
    loginPost.setEntity(entity);
    HttpResponse responseLogin = client.execute(loginPost);
    // client1.close();
    // 第三步:判断提交数据是否成功,成功返回302
    if (responseLogin.getStatusLine().getStatusCode() == 302) {
      // 如果提交成功,带着Cookie请求重定向的main页面,并获取学生姓名
      HttpGet mainGet = new HttpGet(mainUrl + stuNumber);
      mainGet.setHeader("Cookie", Cookie);
      mainGet.setHeader("Referer", loginUrl);
      HttpResponse responseMain = client.execute(mainGet);
      InputStream is = responseMain.getEntity().getContent();
      String html = "";
      try {
        html = IOUtils.getHtml(is, "GB2312");
      } catch (Exception e) {
        System.out.println("解析html失败!");
        e.printStackTrace();
      }
      stuName = Jsoup.parse(html).getElementById("xhxm").text();
      System.out.println("登录成功!欢迎您:" + stuName);
      client.close();
      return true;
    } else {
      System.out.println("登录失败!");
      client.close();
      return false;
    }
 
  }
 
  /**
   * 查询空教室
   *
   * @throws Exception
   *
   * @throws Exception
   */
  public void queryClassroom(String xiaoqu, String xqj, String sjd)
      throws Exception {
 
    CloseableHttpClient client = HttpClients.createDefault();
    String newQueryClassrommUrl = queryClassroomUrl + stuNumber + "&xm="
        + stuName + queryClassroomGnmkdm;// 拼接请求的Url
    String parseSjd = ParseUtils.parseWeek(sjd);// 解析当前节次对应的字符串
    String nowWeek = DateUtils.getWeek() + "";// 获取当前时间是第几周
    String viewState = IOUtils.getViewState(newQueryClassrommUrl, Cookie,
        mainUrl + stuNumber);
    // 封装查询空教室请求参数
    List<NameValuePair> queryClassroomPair = new ArrayList<NameValuePair>();
    queryClassroomPair.add(new BasicNameValuePair("__EVENTTARGET", ""));
    queryClassroomPair.add(new BasicNameValuePair("__EVENTARGUMENT", ""));
    queryClassroomPair
        .add(new BasicNameValuePair("__VIEWSTATE", viewState));
    queryClassroomPair.add(new BasicNameValuePair("xiaoq", xiaoqu));// 校区类型,默认西校区
    queryClassroomPair.add(new BasicNameValuePair("jslb", ""));// 教室类别,默认为空
    queryClassroomPair.add(new BasicNameValuePair("min_zws", "0"));// 最小座位数,默认为0
    queryClassroomPair.add(new BasicNameValuePair("max_zws", ""));// 最大座位数,默认为空
    queryClassroomPair.add(new BasicNameValuePair("ddlKsz", nowWeek));// 起始周,默认当前周
    queryClassroomPair.add(new BasicNameValuePair("ddlJsz", nowWeek));// 结束周,默认当前周
    queryClassroomPair.add(new BasicNameValuePair("xqj", xqj));// 星期几,默认当天
    queryClassroomPair.add(new BasicNameValuePair("ddlDsz", ""));// 单双周,默认
    queryClassroomPair.add(new BasicNameValuePair("sjd", parseSjd));// 第几节
    queryClassroomPair.add(new BasicNameValuePair("Button2", "空教室查询"));
    queryClassroomPair.add(new BasicNameValuePair("xn", "2015-2016"));
    queryClassroomPair.add(new BasicNameValuePair("xq", "2"));
    queryClassroomPair.add(new BasicNameValuePair("ddlSyXn", "2015-2016"));
    queryClassroomPair.add(new BasicNameValuePair("ddlSyxq", "2"));
    UrlEncodedFormEntity entityClassroom = new UrlEncodedFormEntity(
        queryClassroomPair);
 
    HttpPost queryClassroomPost = new HttpPost(newQueryClassrommUrl);
    // newQueryClassrommUrl示例:http://jwgl2.ujn.edu.cn/xxjsjy.aspx?xh=20121214104&xm=XXX&gnmkdm=N121611
    queryClassroomPost.setEntity(entityClassroom);
    queryClassroomPost.setHeader("Referer", mainUrl + stuNumber);// 设置头信息
    queryClassroomPost.setHeader("Cookie", Cookie);
    HttpResponse responseClassroom = client.execute(queryClassroomPost);
    InputStream is = responseClassroom.getEntity().getContent();
    String html = IOUtils.getHtml(is, "GB2312");
    Document doc = Jsoup.parse(html);
    Elements eleClassroom = doc.select("td");
    Elements eleInfo = doc.select("#lblbt");
    System.out.println(eleInfo.get(0).text());
    for (int i = 0; i < eleClassroom.size(); i++) {
      // 只打印教室名称
      if (i % 8 == 1) {
        System.out.println(eleClassroom.get(i).text());
      }
    }
    client.close();
  }
 
  /**
   * 重载查询空教室方法,默认时间,课程节次的无参数查询方法
   *
   * @throws IOException
   * @throws ClientProtocolException
   */
  public void queryClassroom() throws ClientProtocolException, IOException,
      Exception {
    String weekDay = DateUtils.getWeekDay() + "";// 获取当前时间是星期几
    String sdj = DateUtils.getNowCourse() + "";// 获取当前时间是第几节课
    new Jwgl().queryClassroom(xixiaoqu, weekDay, sdj);
  }
 
  /**
   * 查询个人成绩方法
   *
   * @throws ClientProtocolException
   * @throws IOException
   */
  public void queryStuGrade(String xn, String xq)
      throws ClientProtocolException, IOException {
    CloseableHttpClient client = HttpClients.createDefault();
    String newQueryStuGradeUrl = queryStuGradeUrl + stuNumber + "&xm="
        + stuName + queryStuGradeGnmkd;
    HttpPost queryGradePost = new HttpPost(newQueryStuGradeUrl);
    String viewState = IOUtils.getViewState(newQueryStuGradeUrl, Cookie,
        mainUrl + stuNumber);
    // 封装请求参数
    List<NameValuePair> queryGradePair = new ArrayList<NameValuePair>();
    queryGradePair.add(new BasicNameValuePair("__EVENTTARGET", ""));
    queryGradePair.add(new BasicNameValuePair("__EVENTARGUMENT", ""));
    queryGradePair.add(new BasicNameValuePair("__VIEWSTATE", viewState));
    queryGradePair.add(new BasicNameValuePair("hidLanguage", ""));
    queryGradePair.add(new BasicNameValuePair("ddlXN", xn));// 学年
    queryGradePair.add(new BasicNameValuePair("ddlXQ", xq));// 学期
    queryGradePair.add(new BasicNameValuePair("ddl_kcxz", ""));
    queryGradePair.add(new BasicNameValuePair("btn_xq", "学期成绩"));
    queryGradePost.setHeader("Cookie", Cookie);
    queryGradePost.setHeader("Referer", mainUrl + stuNumber);
    UrlEncodedFormEntity entityGrade = new UrlEncodedFormEntity(
        queryGradePair);
    queryGradePost.setEntity(entityGrade);
    HttpResponse responQueryGradePost = client.execute(queryGradePost);
 
    String gradeHtml = IOUtils.getHtml(responQueryGradePost.getEntity()
        .getContent(), "GB2312");
    // System.out.println(gradeHtml);
    Document gradeDoc = Jsoup.parse(gradeHtml);
    Elements eleGrade = gradeDoc.select("td");
    // 按需求解析html<td>标签内容并输出
    for (int i = 0; i < 7; i++) {
      System.out.println(eleGrade.get(i).text());
    }
 
    for (int i = 11; i < eleGrade.size(); i = i + 10) {
      if (i + 15 < eleGrade.size()) {
        System.out.print(eleGrade.get(i).text() + "       ");
        i = i + 5;
        System.out.print(eleGrade.get(i).text());
        System.out.println();
      }
      client.close();
 
    }
 
  }
 
  /**
   * 查询个人课表方法
   *
   * @param xnd
   * @param xqd
   * @throws ClientProtocolException
   * @throws IOException
   */
  public void queryStuCourse(String xnd, String xqd)
      throws ClientProtocolException, IOException {
    CloseableHttpClient client = HttpClients.createDefault();
    String newQueryStuCourseUrl = queryStuCourseUrl + stuNumber + "&xm="
        + stuName + queryStuCourseGnmkd;
    String viewState = IOUtils.getViewState(newQueryStuCourseUrl, Cookie,
        mainUrl + stuNumber);
    HttpPost queryStuCoursePost = new HttpPost(newQueryStuCourseUrl);
    List<NameValuePair> stuCoursePair = new ArrayList<NameValuePair>();
    stuCoursePair.add(new BasicNameValuePair("__EVENTTARGET", "xqd"));
    stuCoursePair.add(new BasicNameValuePair("__EVENTARGUMENT", ""));
    stuCoursePair.add(new BasicNameValuePair("__VIEWSTATE", viewState));
    stuCoursePair.add(new BasicNameValuePair("xnd", xnd));
    stuCoursePair.add(new BasicNameValuePair("xqd", xqd));
    UrlEncodedFormEntity entitySource = new UrlEncodedFormEntity(
        stuCoursePair);
    queryStuCoursePost.setEntity(entitySource);
    queryStuCoursePost.setHeader("Cookie", Cookie);
    queryStuCoursePost.setHeader("Referer", mainUrl + stuNumber);
    HttpResponse responseStuCourse = client.execute(queryStuCoursePost);
    String html = IOUtils.getHtml(responseStuCourse.getEntity()
        .getContent(), "GB2312");
    Document docCourse = Jsoup.parse(html);
    Elements eleCourse = docCourse.select("td");
    for (int i = 2; i < eleCourse.size(); i++) {
      System.out.print(eleCourse.get(i).text() + "  ");
      if (i % 9 == 0) {
        System.out.println();
      }
    }
  }
 
  public static void main(String[] args) {
    Jwgl jw = new Jwgl();
    try {
      jw.login("这里是学号", "这里是密码");
      System.out.println("查询成绩测试-------");
      jw.queryStuGrade("2015-2016", "1");
      // 查询西校区,周一,第12节空教室测试。
      // jw.queryClassroom("1", "1", "2");
      System.out.println("查询空教室测试------");
      jw.queryClassroom();
      System.out.println("查询个人课表测试-------");
      jw.queryStuCourse("2014-2015", "1");
    } catch (ClientProtocolException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (Exception e) {
      e.printStackTrace();
    }
    //QQ:451209214
  }
 
}

2.DateUtils.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package com.ican.yueban.utils;
 
import java.text.ParseException;
 
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
 
public class DateUtils {
  private static String startDay = GlobalConstant.START_DAY;// 开学日期
  private static String endDay = GlobalConstant.END_DAY;// 放假日期
 
  /**
   * 获取当前时间是第几节课,只限8-16点之间,其他时间默认1,2节课。
   *
   * @return
   */
  public static int getNowCourse() {
    SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");// 设置日期格式
    String nowDate = df.format(new Date());
    if (nowDate.startsWith("08") || nowDate.startsWith("09")) {
      return 1;// 12节课。
    } else if (nowDate.startsWith("10") || nowDate.startsWith("11")) {
      return 2;// 34节课,以此类推。
    } else if (nowDate.startsWith("12") || nowDate.startsWith("13")
        || nowDate.startsWith("14")) {
      return 3;
    } else if (nowDate.startsWith("15") || nowDate.startsWith("16")) {
      return 4;
    } else {
      return 1;
    }
  }
 
  /**
   * 获取当前时间是第几周
   *
   * @return
   */
  public static int getWeek() {
    int days = 0;
    int nowWeek = 0;
    try {
      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");// 设置日期格式
      String nowDate = df.format(new Date());
      int nowDaysBetween = daysBetween(startDay, nowDate) + 1;
      days = daysBetween(startDay, endDay);
      int x = nowDaysBetween % 7;
      if (x == 0) {
        nowWeek = nowDaysBetween / 7;
      } else {
        nowWeek = nowDaysBetween / 7 + 1;
      }
 
    } catch (ParseException e) {
      System.out.println("输入的日期不合法,解析日期失败");
      e.printStackTrace();
    }
    return nowWeek;
  }
 
  /**
   * 获取当前时间是星期几
   *
   * @return
   */
  public static int getWeekDay() {
    Calendar cal = Calendar.getInstance();
    cal.setTime(new Date());
    if (cal.get(Calendar.DAY_OF_WEEK) - 1 == 0) {
      return 7;
    }
    return cal.get(Calendar.DAY_OF_WEEK) - 1;
  }
 
  /**
   * 计算两个String类型日期之间的天数
   *
   * @param startDay
   * @param endDay
   * @return
   * @throws ParseException
   */
  public static int daysBetween(String startDay, String endDay)
      throws ParseException {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Calendar cal = Calendar.getInstance();
    cal.setTime(sdf.parse(startDay));
    long time1 = cal.getTimeInMillis();
    cal.setTime(sdf.parse(endDay));
    long time2 = cal.getTimeInMillis();
    long between_days = (time2 - time1) / (1000 * 3600 * 24);
 
    return Integer.parseInt(String.valueOf(between_days));
  }
 
  /**
   * 以yyyy-MM-dd HH:mm:ss格式返回String类型系统时间
   *
   * @return
   */
  public static String getNowDate() {
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式
    return df.format(new Date());
  }
 
}

3.GlobalConstant.java  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.ican.yueban.utils;
 
/**
 * 本系统所有常量定义
 *
 * @author 宋开宗
 *
 */
public interface GlobalConstant {
  public static final String START_DAY = "2016-02-29";
  public static final String END_DAY = "2016-07-10";
  public static final String INDEX_URL = "http://jwgl2.ujn.edu.cn";// 济大教务系统首页
  public static final String SECRETCODE_URL = "http://jwgl2.ujn.edu.cn/CheckCode.aspx";// 验证码页面
  public static final String LOGIN_URL = "http://jwgl2.ujn.edu.cn/default2.aspx";// 济大教务系统登录页
  public static final String MAIN_URL = "http://jwgl2.ujn.edu.cn/xs_main.aspx?xh=";// 济大教务系统主页,菜单页面
  public static final String QUERY_CLASSROOM_URL = "http://jwgl2.ujn.edu.cn/xxjsjy.aspx?xh=";// 济大查询空教室链接
  public static final String QUERY_CLASSROOM_GNMKDM = "&gnmkdm=N121611";// 济大查询空教室gnmkdm
  public static final String QUERY_STU_COURSE_URL = "http://jwgl2.ujn.edu.cn/xskbcx.aspx?xh=";// 济大查询个人课表链接
  public static final String QUERY_STU_COURSE_GNMKDM = "&gnmkdm=N121603";// 济大查询个人课表gnmkdm
  public static final String QUERY_STU_GRADE_URL = "http://jwgl2.ujn.edu.cn/xscjcx.aspx?xh=";// 济大查询个人成绩链接
  public static final String QUERY_STU_GRADE_GNMKDM = "&gnmkdm=N121605";// 济大查询个人成绩gnmkdm
  public static final String IDENTITY_STU = "学生";// 身份:学生
  public static final String XIXIAOQU = "1";// 济大西校区标志
  public static final String DONGXIAOQU = "2";// 济大东校区标志
  public static final String ZHANGQIUXIAOQU = "3";// 济大章丘校区标志
  public static final String CLASS1 = "'1'|'1','0','0','0','0','0','0','0','0'";// 1,2节
  public static final String CLASS2 = "'2'|'0','3','0','0','0','0','0','0','0'";// 3,4节
  public static final String CLASS3 = "'3'|'0','0','5','0','0','0','0','0','0'";// 5,6节
  public static final String CLASS4 = "'4'|'0','0','0','7','0','0','0','0','0'";// 7,8节
  public static final String CLASS5 = "'5'|'0','0','0','0','9','0','0','0','0'";// 8,10节
  public static final String CLASS6 = "'6'|'0','0','0','0','0','11','0','0','0'";// 11,12节
  public static final String CLASS7 = "'7'|'1','3','0','0','0','0','0','0','0'";// 上午
  public static final String CLASS8 = "'8'|'0','0','5','7','0','0','0','0','0'";// 下午
  public static final String CLASS9 = "'9'|'1','3','5','7','0','0','0','0','0'";// 白天
  public static final String CLASS10 = "'10'|'0','0','0','0','9','11','0','0','0'";// 晚上
  public static final String CLASS11 = "'11'|'1','3','5','7','9','11','0','0','0'";// 全天
  public static final String BTN_XUEQI = "btn_xq";// 学期成绩
  public static final String BTN_XUENIAN = "btn_xn";// 学年成绩
  public static final String BTN_LINIAN = "btn_zcj";// 历年成绩
  public static final String UNIVERSITY_CODE_UJN = "00001";// 济南大学标识代码
  public static final String USER_STATE_N = "1";// 未认证
  public static final String USER_STATE_Y = "2";// 认证通过
  public static final String COMMENT_TYPE_NEWTHINGS = "1";// 评论类型1:新鲜事
  public static final String COMMENT_TYPE_INTEREST = "2";// 评论类型2:兴趣活动
}

4.IOUtils.java 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
package com.ican.yueban.utils;
 
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
 
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
 
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.jsoup.Jsoup;
 
public class IOUtils {
  /**
   * 指定编码格式 ,把输入流转化为字符串
   *
   * @param is
   * @return
   * @throws IOException
   */
  public static String getHtml(InputStream is, String encoding)
      throws IOException {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int len = 0;
    while ((len = is.read(buffer)) != -1) {
      bos.write(buffer, 0, len);
    }
    is.close();
    return new String(bos.toByteArray(), encoding);
  }
 
  /**
   * 下载图片
   *
   * @param urlString
   * @param filename
   * @param savePath
   * @throws Exception
   */
  public static void download(String urlString, String filename,
      String savePath) throws Exception {
    // 构造URL
    URL url = new URL(urlString);
    // 打开连接
    URLConnection con = url.openConnection();
    // 设置请求超时为5s
    con.setConnectTimeout(5 * 1000);
    // 输入流
    InputStream is = con.getInputStream();
 
    // 1K的数据缓冲
    byte[] bs = new byte[1024];
    // 读取到的数据长度
    int len;
    // 输出的文件流
    File sf = new File(savePath);
    if (!sf.exists()) {
      sf.mkdirs();
    }
    OutputStream os = new FileOutputStream(sf.getPath() + "\\" + filename);
    // 开始读取
    while ((len = is.read(bs)) != -1) {
      os.write(bs, 0, len);
    }
    // 完毕,关闭所有链接
    os.close();
    is.close();
  }
 
  /**
   * 图片裁剪工具类
   *
   * @param src
   * @param dest
   * @param x
   * @param y
   * @param w
   * @param h
   * @throws IOException
   */
  public static void cutImage(String src, String dest, int x, int y, int w,
      int h) throws IOException {
    Iterator iterator = ImageIO.getImageReadersByFormatName("jpg");
    ImageReader reader = (ImageReader) iterator.next();
    InputStream in = new FileInputStream(src);
    ImageInputStream iis = ImageIO.createImageInputStream(in);
    reader.setInput(iis, true);
    ImageReadParam param = reader.getDefaultReadParam();
    Rectangle rect = new Rectangle(x, y, w, h);
    param.setSourceRegion(rect);
    BufferedImage bi = reader.read(0, param);
    ImageIO.write(bi, "jpg", new File(dest));
    in.close();
 
  }
 
  /**
   * 判断字符编码集
   *
   * @param str
   * @return
   */
  public static String getEncoding(String str) {
    String encode = "GB2312";
    try {
      if (str.equals(new String(str.getBytes(encode), encode))) {
        String s = encode;
        return s;
      }
    } catch (Exception exception) {
    }
    encode = "ISO-8859-1";
    try {
      if (str.equals(new String(str.getBytes(encode), encode))) {
        String s1 = encode;
        return s1;
      }
    } catch (Exception exception1) {
    }
    encode = "UTF-8";
    try {
      if (str.equals(new String(str.getBytes(encode), encode))) {
        String s2 = encode;
        return s2;
      }
    } catch (Exception exception2) {
    }
    encode = "GBK";
    try {
      if (str.equals(new String(str.getBytes(encode), encode))) {
        String s3 = encode;
        return s3;
      }
    } catch (Exception exception3) {
    }
    return "未知";
  }
 
  /**
   * 把输入流转换成图片---》获取验证码
   *
   * @param is
   * @param filename
   * @param savePath
   * @throws Exception
   */
  public static void getSecret(InputStream is, String filename,
      String savePath) throws Exception {
    // 1K的数据缓冲
    byte[] bs = new byte[1024];
    // 读取到的数据长度
    int len;
    // 输出的文件流
    File sf = new File(savePath);
    if (!sf.exists()) {
      sf.mkdirs();
    }
    OutputStream os = new FileOutputStream(sf.getPath() + "\\" + filename);
    // 开始读取
    while ((len = is.read(bs)) != -1) {
      os.write(bs, 0, len);
    }
    // 完毕,关闭所有链接
    os.close();
    is.close();
  }
 
  /**
   * 获取隐藏字段的__VIEWSTATE值
   *
   * @param url
   * @param cookie
   * @param referer
   * @return
   * @throws UnsupportedOperationException
   * @throws ClientProtocolException
   * @throws IOException
   */
  public static String getViewState(String url, String cookie, String referer)
      throws UnsupportedOperationException, ClientProtocolException,
      IOException {
    CloseableHttpClient client = HttpClients.createDefault();
    HttpGet getViewState = new HttpGet(url);
    getViewState.setHeader("Cookie", cookie);
    getViewState.setHeader("Referer", referer);// 设置头信息
    String s = IOUtils.getHtml(client.execute(getViewState).getEntity()
        .getContent(), "GB2312");
    String viewstate = Jsoup.parse(s).select("input[name=__VIEWSTATE]")
        .val();
    client.close();
    return viewstate;
  }
}

5. ParseUtils.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package com.ican.yueban.utils;
 
public class ParseUtils {
  /**
   * 获取课程节次对应的字符串
   * @param course
   * @return
   */
  public static String parseWeek(String course) {
    String sjd="";
    int nowCourse = Integer.parseInt(course);
    switch (nowCourse) {
    case 1:
      sjd=GlobalConstant.CLASS1;
      break;
    case 2:
      sjd=GlobalConstant.CLASS2;
      break;
    case 3:
      sjd=GlobalConstant.CLASS3;
      break;
    case 4:
      sjd=GlobalConstant.CLASS4;
      break;
    case 5:
      sjd=GlobalConstant.CLASS5;
      break;
    case 6:
      sjd=GlobalConstant.CLASS6;
      break;
    case 7:
      sjd=GlobalConstant.CLASS7;
      break;
    case 8:
      sjd=GlobalConstant.CLASS8;
      break;
    case 9:
      sjd=GlobalConstant.CLASS9;
      break;
    case 10:
      sjd=GlobalConstant.CLASS10;
      break;
    case 11:
      sjd=GlobalConstant.CLASS11;
      break;
    default:
      sjd=GlobalConstant.CLASS1;
      break;
    }
 
    return sjd;
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助。

延伸 · 阅读

精彩推荐