Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
YZune committed Jan 8, 2020
0 parents commit af23c32
Show file tree
Hide file tree
Showing 22 changed files with 1,017 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Project exclude paths
/out/
2 changes: 2 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions .idea/codeStyles/Project.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions .idea/codeStyles/codeStyleConfig.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/kotlinc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 19 additions & 0 deletions .idea/libraries/KotlinJavaRuntime.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions .idea/libraries/com_google_code_gson_gson_2_8_6.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions .idea/libraries/org_jsoup_jsoup_1_12_1.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

124 changes: 124 additions & 0 deletions .idea/uiDesigner.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions CourseAdapter.iml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="KotlinJavaRuntime" level="project" />
<orderEntry type="library" name="org.jsoup:jsoup:1.12.1" level="project" />
<orderEntry type="library" name="com.google.code.gson:gson:2.8.6" level="project" />
</component>
</module>
25 changes: 25 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# 本项目试图降低接入门槛

## 愉快食用需要

1. 简单 Java 基础,Kotlin 入门:字符串处理、类的继承、方法重写

2. Jsoup 入门

## 食用方法

1. 继承抽象类 `Parser`,重写它的 `generateCourseList` 方法。

2. `Common` 中抽取了一些可能通用的解析函数,当然你也可以补充。

3. 重写好函数后,新建一个测试的kt文件,如示例中的 `ZhengFangTest.kt`,你运行一下就懂了。

## 注意

1. 建议从项目外引用 html 文件,提交时一定不要上传 html 文件,涉及隐私问题。

2. 其实继承该抽象类,数据来源不一定是 html,可以是 Excel、Json 等等(发挥下想象力)。

## Todo

1. 增加模拟登录导入的模板
109 changes: 109 additions & 0 deletions src/Common.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
import bean.CourseBaseBean

object Common {

val nodePattern = Regex(""""\(\d{1,2}[-]*\d*节""")
val weekPattern = Regex("""\{第\d{1,2}[-]*\d*周""")

val chineseWeekList = arrayOf("", "周一", "周二", "周三", "周四", "周五", "周六", "周日")
val otherHeader = arrayOf("时间", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日", "早晨", "上午", "下午", "晚上")
val courseProperty = arrayOf("任选", "限选", "实践选修", "必修课", "选修课", "必修", "选修", "专基", "专选", "公必", "公选", "义修", "", "", "主干", "专限", "公基", "值班", "通选",
"思政必", "思政选", "自基必", "自基选", "语技必", "语技选", "体育必", "体育选", "专业基础课", "双创必", "双创选", "新生必", "新生选", "学科必修", "学科选修",
"通识必修", "通识选修", "公共基础", "第二课堂", "学科实践", "专业实践", "专业必修", "辅修", "专业选修", "外语", "方向", "专业必修课", "全选")

private val headerNodePattern = Regex("""第.*节""")

fun findExistedCourseId(list: List<CourseBaseBean>, name: String): Int {
val result = list.findLast {
it.courseName == name
}
return result?.id ?: -1
}

fun parseHeaderNodeString(str: String): Int {
var node = -1
if (headerNodePattern.matches(str)) {
val nodeStr = str.substring(1, str.length - 1)
node = try {
nodeStr.toInt()
} catch (e: Exception) {
getNodeInt(nodeStr)
}
}
return node
}

fun getWeekFromChinese(chineseWeek: String): Int {
for (i in chineseWeekList.indices) {
if (chineseWeekList[i] == chineseWeek) {
return i
}
}
return 0
}

fun countStr(str1: String, str2: String): Int {
var times = 0
var startIndex = 0
var findIndex = str1.indexOf(str2, startIndex)
while (findIndex != -1 && findIndex != str1.length - 1) {
times += 1
startIndex = findIndex + 1
findIndex = str1.indexOf(str2, startIndex)
}
if (findIndex == str1.length - 1) {
times += 1
}
return times
}

fun getNodeStr(node: Int): String {
return when (node) {
1 -> ""
2 -> ""
3 -> ""
4 -> ""
5 -> ""
6 -> ""
7 -> ""
8 -> ""
9 -> ""
10 -> ""
11 -> "十一"
12 -> "十二"
13 -> "十三"
14 -> "十四"
15 -> "十五"
16 -> "十六"
else -> ""
}
}

private fun getNodeInt(nodeStr: String): Int {
return when (nodeStr) {
"" -> 1
"" -> 2
"" -> 3
"" -> 4
"" -> 5
"" -> 6
"" -> 7
"" -> 7
"" -> 8
"" -> 9
"" -> 10
"十一" -> 11
"十二" -> 12
"十三" -> 13
"十四" -> 14
"十五" -> 15
"十六" -> 16
"十七" -> 17
"十八" -> 18
"十九" -> 19
"二十" -> 20
else -> -1
}
}

}
3 changes: 3 additions & 0 deletions src/NewZFTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
fun main() {
println("Hello World!")
}
11 changes: 11 additions & 0 deletions src/ZhengFangTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import parser.ZhengFangParser
import java.io.File

fun main() {
// 示例中用了相对路径,Windows 下可能需要修改
// 建议从项目外引用 html 文件
// 提交时一定不要上传 html 文件,涉及隐私问题
val file = File("苏大医学.html")
val parser = ZhengFangParser(file.readText(), 0)
parser.saveCourse()
}
Loading

0 comments on commit af23c32

Please sign in to comment.