Java实现超星学习通的签到(学习记录贴)--- 详细版可查看我的另一篇文章Python实现

声明:
本篇博客目的仅为了读者学习Java,任何用于非法途径与本人无关,欢迎大家学习,本类型博客不作为讲解博客,仅作为记录!!

package Chaoxing;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import net.dongliu.requests.RawResponse;
import net.dongliu.requests.Requests;
import net.dongliu.requests.Session;

import java.util.*;

public class test {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username = in.nextLine();
        System.out.println("请输入密码:");
        String password = in.nextLine();
        var student = new Student(username,password);
        boolean condition = student.Login_Status();
        if (condition){
            student.Course_get();
            while(true){
                try{
                    //获取Map中的所有key
                    Set<String> keySet = student.data.keySet();
                    //遍历存放所有key的Set集合
                    Iterator<String> it =keySet.iterator();
                    while(it.hasNext()){                         //利用了Iterator迭代器**
                        //得到每一个key
                        String key = it.next();
                        //通过key获取对应的value
                        String value = student.data.get(key);
                        student.signSearch(key,value);
                        if (student.cond==1){
                            System.out.println("yes");
                            student.cond=0;
                        }else{
                            System.out.println("未查询到签到活动");
                        }
                        Thread.sleep(10000);
                    }
                }catch (Exception e){
                    System.out.printf("666");
                }
            }
        }
    }

}





class Student{
    public static Session session = Requests.session();
    private String username;
    private String password;
    private String uid;
    private Map<String,Object> headers = new HashMap<>();
    private StringJoiner activates = new StringJoiner(", ");
    public Student(String username,String password){
        this.username = username;
        this.password = password;
    }
    public Map<String,String> data = new HashMap<>();
    public boolean Login_Status() {
        String url = "https://passport2-api.chaoxing.com/v11/loginregister";
        Map parameters = new HashMap();
        parameters.put("uname",username);
        parameters.put("code",password);
        headers.put("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36");
        String result = session.post(url).headers(headers).params(parameters).send().readToText();
        if(result.contains("true")){
            for (int i = 0; i < session.currentCookies().size(); i++) {
                String name = session.currentCookies().get(i).getName();
                if (name.contains("UID")){
                    uid = session.currentCookies().get(i).getValue();
                    break;
                }
            }
            return true;
        }else{
            return false;
        }
    }
    public int cond = 0;

    public void Course_get(){
        String url = "http://mooc1-api.chaoxing.com/mycourse/backclazzdata?view=json&rss=1";
        String result = session.get(url).headers(headers).send().readToText();
        JSONObject obj = JSON.parseObject(result);
        System.out.println(result);
        System.out.println(obj);
        String results = obj.getString("result");
        if (results.contains("1")){
            System.out.println("获取成功:");
            JSONArray arr = obj.getJSONArray("channelList");
            for (int i = 0; i < arr.size() ; i++) {
                JSONObject temp = arr.getJSONObject(i).getJSONObject("content");
                    if (! temp.toString().contains("course")){
                        continue;
                    }
                    String course_id = temp
                            .getJSONObject("course")
                            .getJSONArray("data")
                            .getJSONObject(0)
                            .getString("id");
                    String name = temp
                            .getJSONObject("course")
                            .getJSONArray("data")
                            .getJSONObject(0)
                            .getString("name");
                    String class_id = temp.getString("id");
                    data.put(name,course_id);
                    System.out.printf("%d.课程名称:%s\n",i+1,name);

            }

        }
    }
    public void signSearch(String course_id,String class_id){
//        String url="https://mobilelearn.chaoxing.com/ppt/activeAPI/taskactivelist?courseId="+course_id+"&classId="+
//                class_id+"&uid="+uid;
        String url="https://mobilelearn.chaoxing.com/ppt/activeAPI/taskactivelist?courseId="+"207611834"+"&classId="+
                "15284909"+"&uid="+uid;
        RawResponse result = session.get(url).headers(headers).send();
        int code = result.getStatusCode();
        if(code==200){
            String res = result.readToText();
            JSONArray arr = JSON.parseObject(res).getJSONArray("activeList");
            for (int i = 0; i <arr.size() ; i++) {
                if (! arr.getJSONObject(0).toString().contains("nameTwo")){
                    continue;
                }
                String activeType = arr.getJSONObject(i).getString("activeType");
                int status = arr.getJSONObject(i).getIntValue("status");
                if (status==1&activeType.equals("2")){
                    String sign_url = arr.getJSONObject(i).getString("url");
                    String aid = aid_get(sign_url);
                    if (! activates.toString().contains(aid)){
                        System.out.printf("查询到待签到活动 活动名称:%s 活动状态:%s 活动时间:%s aid:%s"
                        ,arr.getJSONObject(i).getString("nameOne")
                        ,arr.getJSONObject(i).getString("nameTne")
                        ,arr.getJSONObject(i).getString("nameFour")
                        ,aid);
                    sign(aid,uid);
                    cond=1;
                    }
                }
            }
        }

    }
    public String aid_get(String sign_url){
        for (int j = 0; j < sign_url.split("&").length; j++) {
            String[] var = sign_url.split("&")[j].split("=");
            if (var[0].equals("activePrimaryId")) {
                return var[1];
            }
        }
        return "ccc";
    }
    public void sign(String aid,String uid){
        Map params = new HashMap();
        params.put("name","");
        params.put("address","自己改谢谢");
        params.put("activeId",aid);
        params.put("uid",uid);
        String url = "https://mobilelearn.chaoxing.com/pptSign/stuSignajax";
        String result = session.post(url).headers(headers).body(params).send().readToText();
        if (result.contains("success")){
            System.out.println("用户签到成功");
            activates.add(aid);
        }else{
            System.out.println("用户签到失败");
            activates.add(aid);
        }
    }
}


发布了82 篇原创文章 · 获赞 235 · 访问量 108万+

猜你喜欢

转载自blog.csdn.net/solitudi/article/details/105222711