吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2478|回复: 13
收起左侧

[Java 原创] 继教国培快速学习方法附件kotlin代码

[复制链接]
marblog 发表于 2023-10-26 14:55
本帖最后由 marblog 于 2023-10-26 14:57 编辑

北京继教国培教育研究院简介
北京继教国培教育研究院创办于2014年,主要致力于中国教育事业的发展与研究,围绕国家教育培训计划开展教育研究、教师培训、教研服务、教育咨询、论坛承办等服务,以开阔的视野,前瞻的思维,与国内多所知名师范院校建立战略合作关系,积极引进优质教育资源,汲取先进培训理念,建成研修融合,研训一体的线上与线下相结合的“多层次、多维度、全方位、立体式”网络研修平台。

目前有视频网课,但是无法用加速器,目前我研究了天津这边的学习方法,其他地区的不清楚,如有其他地区的请留意我会看

现在讲如何快速学习:

首先登陆网站首页,打开浏览器控制台F12,查看网络请求
查看getUser接口,拿到请求头数据
再看响应数据,拿到id

import com.alibaba.fastjson2.JSONObject
import kotlinx.coroutines.*
import org.springframework.http.HttpHeaders
import org.springframework.http.HttpMethod
import org.springframework.http.RequestEntity
import org.springframework.http.ResponseEntity
import org.springframework.web.client.RestTemplate
import java.net.URI

class ActivityData {
    var activityIds: List<LinkedHashMap<String, Any>>? = null
    var videoIds: List<Int>? = null
    var videoWatchTimes: List<Int>? = null
}

fun main() {
    val activityData = ActivityData()

    runBlocking {
        while (true) {
            // 如果数据为空,或者需要刷新,调用接口获取数据
            if (activityData.activityIds == null || needRefreshData()) {
                activityData.activityIds = getActivityId()
                activityData.videoIds = getVideoId()
                activityData.videoWatchTimes = getVideoWatchTime()
            }

            // 创建协程列表,用于存储所有请求的 Deferred 对象
            val requests = mutableListOf<Deferred<Unit>>()

            // 使用协程启动多个异步请求
            activityData.activityIds?.forEachIndexed { index, activity ->
                val videoId = activityData.videoIds?.get(index)
                val videoWatchTime = activityData.videoWatchTimes?.get(index)

                if (videoId != null && videoWatchTime != null) {
                    val requestDeferred = async {
                        sendPostRequest(activity["id"] as Int, videoId, videoWatchTime)
                    }
                    requests.add(requestDeferred)
                }
            }

            // 等待所有请求完成
            requests.awaitAll()

            // 暂停10秒钟
            delay(10000)
        }
    }
}

fun needRefreshData(): Boolean {
    return false
}
suspend fun sendPostRequest(activityId: Int, videoId: Int, videoWatchTime: Int) {
    val url = "http://api.jijiaoguopei.com/api/spActivity/changeActivityStatusNew"
    val headers = HttpHeaders()
    // 设置请求头信息
    headers.add("Accept", "application/json, text/plain, */*")
    headers.add("Accept-Encoding", "gzip, deflate")
    headers.add("Accept-Language", "zh-CN,zh;q=0.9")
    headers.add(
        "Authorization",“换成你的” )
    headers.add("Content-Type", "application/json;charset=UTF-8")
    headers.add("Content-Length", "79")
    headers.add("Host", "api.jijiaoguopei.com")
    headers.add("Origin", "http://jijiaoguopei.com")
    headers.add("Proxy-Connection", "keep-alive")
    headers.add("Referer", "http://jijiaoguopei.com/")
    headers.add(
        "User-Agent",
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
    )
    // 构建请求体
    val requestBody = """
        {
            "activityId": $activityId,
            "videoCompleteFlag": 0,
            "videoId": $videoId,
            "videoWatchTime": $videoWatchTime
        }
    """.trimIndent()

    // 发送POST请求
    val restTemplate = RestTemplate()
    val requestEntity: RequestEntity<String> = RequestEntity.post(URI.create(url))
        .headers(headers)
        .body(requestBody)

    val responseEntity: ResponseEntity<String> = withContext(Dispatchers.IO) {
        restTemplate.exchange(requestEntity, String::class.java)
    }

    // 处理响应,你可以根据需要进行处理
    println("Response: ${responseEntity.body}")
}

fun sendGetRequest(): JSONObject? {
    val url =
        "http://api.jijiaoguopei.com/api/spActivity/getActivityByTeacherId?id=“你拿到的ID”&page=1&limit=30&specialTopicId=252&activityClassifyId=299&courseTypeId=&compulsoryFlag=1&code="

    val requestEntity: RequestEntity<String> = requestEntity(url)
    val restTemplate = RestTemplate()
    val responseEntity: ResponseEntity<JSONObject> = restTemplate.exchange(requestEntity, JSONObject::class.java)
    return responseEntity.body
}

private fun requestEntity(url: String): RequestEntity<String> {
    val headers = HttpHeaders()
    headers.add("Accept", "application/json, text/plain, */*")
    headers.add("Accept-Encoding", "gzip, deflate")
    headers.add("Accept-Language", "zh-CN,zh;q=0.9")
    headers.add(
        "Authorization",
   )
    headers.add("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8")
    headers.add("Host", "api.jijiaoguopei.com")
    headers.add("Origin", "http://jijiaoguopei.com")
    headers.add("Proxy-Connection", "keep-alive")
    headers.add("Referer", "http://jijiaoguopei.com/")
    headers.add(
        "User-Agent",
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
    )
    val requestEntity: RequestEntity<String> = RequestEntity(
        headers,
        HttpMethod.GET,
        URI.create(url)
    )
    return requestEntity
}

fun getVideoId(): ArrayList<Int> {
    val videoIds = ArrayList<Int>()
    getActivityId().forEach { it ->
        val activityId = it["id"] as Int
        val url = "http://api.jijiaoguopei.com/api/spActivity/getById?id=$activityId&teacherId=你拿到的ID"
        val requestEntity: RequestEntity<String> = requestEntity(url)
        val restTemplate = RestTemplate()
        val responseEntity: ResponseEntity<JSONObject> = restTemplate.exchange(requestEntity, JSONObject::class.java)
        val video = ((responseEntity.body?.get("data")) as LinkedHashMap<*, *>)["courseChapters"] as ArrayList<*>

        if (video.size > 0) {
            video.forEach {
                it as LinkedHashMap<*, *>
                val videoId = it["video"] as ArrayList<LinkedHashMap<*, *>>
                videoId.forEach { ids ->
                    val idd = ids["id"] as Int
                    videoIds.add(idd)
                }
            }
        }

    }
    return videoIds
}

fun getVideoWatchTime(): ArrayList<Int> {
    val videoWatchTimes = ArrayList<Int>()
    getActivityId().forEach {
        val activityId = it["id"] as Int
        val url = "http://api.jijiaoguopei.com/api/spActivity/getTaskNode?teacherId=你的ID&activityId=$activityId"
        val requestEntity: RequestEntity<String> = requestEntity(url)
        val restTemplate = RestTemplate()
        val responseEntity: ResponseEntity<JSONObject> = restTemplate.exchange(requestEntity, JSONObject::class.java)
        val data = responseEntity.body?.get("data") as LinkedHashMap<*, *>
        val videoWatchTime = data["videoWatchTime"] as Int
        videoWatchTimes.add(videoWatchTime)
    }
    return videoWatchTimes
}

private fun getActivityId(): List<LinkedHashMap<String, Any>> {
    val json = sendGetRequest()
    val data = json?.get("data") as LinkedHashMap<*, *>
    val list = data["activityInfo"] as ArrayList<LinkedHashMap<String, Any>>
    // 使用filter函数过滤列表
    val filteredList = list.filter {
        // 获取LinkedHashMap中的allCompleteFlag字段,并检查其值是否为0
        val allCompleteFlag = it["allCompleteFlag"] as? Int
        allCompleteFlag == 0
    }
    return filteredList
}





接下来在IDEA中运行kotlin代码,修改id为你拿到的ID,请求头换成你拿到的请求头

image.png
image.png
image.png
image.png

免费评分

参与人数 3吾爱币 +8 热心值 +3 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
guanguanf + 1 + 1 热心回复!
ck1001CK + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2023-10-26 16:30
wjw0716 发表于 2023-10-26 16:55
功能简单可以考虑用jsoup或者httpclient或者okhttp,用spring感觉有些浪费
Pwaerm 发表于 2023-10-26 16:57
本帖最后由 Pwaerm 于 2023-10-26 18:06 编辑

有的网站视频可以模拟直接看完


xxxvideo.dispatchEvent(new Event("ended"))
kll545012 发表于 2023-10-26 17:42
Pwaerm 发表于 2023-10-26 16:57
js  一行代码搞定

秀儿~~!!
youm 发表于 2023-10-26 17:42
人工学完了
ck1001CK 发表于 2023-10-26 18:19
这和,看的感觉不一样
buyaojuzi 发表于 2023-10-26 18:21
http://sdjxjy.ylxue.net/大佬有空研究一下这个。
malio9950 发表于 2023-10-26 20:32
现在的学习任务是越来越重了!
5196 发表于 2023-10-27 08:43
都是APP、打卡、网络赚钱时代
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表