Merge pull request #16 from theRank/feature-crawler

Feature: Website Crawler Automation
This commit is contained in:
Muhan Li 2022-03-27 07:26:49 +08:00 committed by GitHub
commit ac123b2fe7
23 changed files with 5682 additions and 474 deletions

3
.github/trigger.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"trigger": 0
}

View File

@ -6,8 +6,7 @@ on:
- "**"
pull_request:
branches:
- main
- dev
- "**"
jobs:
build:

68
.github/workflows/data.yml vendored Normal file
View File

@ -0,0 +1,68 @@
name: Update Calendar Data
on:
workflow_dispatch:
schedule:
- cron: "0 * * * *"
push:
branches:
- "**"
jobs:
main:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.head_ref }}
fetch-depth: 2
- name: Set up Python environment
uses: actions/setup-python@v2
with:
python-version: 3.9
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Run crawler
shell: bash
run: python crawler.py
- name: Setup Go
uses: actions/setup-go@v2
with:
go-version: 1.17
- name: Go Build
run: go build -o . main
- name: Generate ICS
run: ./main
- name: Commit changes
uses: stefanzweifel/git-auto-commit-action@v4
with:
file_pattern: docs/*.html docs/*.ics data/*.txt
commit_message: update calendar data automatically
commit_user_name: bugstop
commit_user_email: github@umm.one
- name: Get last commit message
id: last-commit-message
run: |
echo "::set-output name=msg::$(git log -1 --pretty=%s)"
- name: Update README
uses: stefanzweifel/git-auto-commit-action@v4
with:
file_pattern: README.md
commit_message: ${{ steps.last-commit-message.outputs.msg }}
commit_user_name: bugstop
commit_user_email: github@umm.one
commit_options: '--amend --no-edit'
push_options: '--force'
skip_fetch: true

View File

@ -1,34 +0,0 @@
name: ICS Generator
on:
pull_request:
push:
branches:
- "**"
jobs:
commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.head_ref }}
- name: Setup Go
uses: actions/setup-go@v2
with:
go-version: 1.17
- name: Go Build
run: go build -o . main
- name: Generate ICS
run: ./main
- uses: stefanzweifel/git-auto-commit-action@v4
with:
file_pattern: docs/*.html docs/*.ics
commit_message: generate .ics file automatically
commit_user_name: bugstep
commit_user_email: github@isaacx.com

View File

@ -2,6 +2,8 @@
subscription link of public holidays in mainland China
> Calendar data updated at: March 27, 2022
## Demo
![demo](./docs/readme/demo.png)

111
crawler.py Normal file
View File

@ -0,0 +1,111 @@
import os
import re
from datetime import datetime, timezone, timedelta
from typing import Iterator, Tuple
import requests
def main():
comments: list[str] = [
"// automatically generated by crawler.py",
"// manually checked by DATA NOT VERIFIED",
]
for year, link, holidays in data():
print(year, link, holidays, sep='\n')
file = f'./data/{year}.txt'
if os.path.isfile(file):
with open(file) as f:
existing = f.read()
if comments[0] in existing and comments[1] not in existing:
continue
with open(file, 'w') as f:
f.write(
f"{comments[0]} ({beijing_time().strftime('%-m/%-d/%Y')})\n"
f"{comments[1]}\n\n// source: {link}\n\n{holidays}"
)
update_info = "> Calendar data updated at: "
with open('./README.md', 'r') as f:
content = f.read().split('\n')
for i in range(len(content)):
if content[i].startswith(update_info):
content[i] = update_info + beijing_time().strftime("%B %-d, %Y")
with open('./README.md', 'w') as f:
f.write('\n'.join(content))
def data() -> Iterator[Tuple[str, str, str]]:
for year, link in source():
print(f"\n\n{year}: {link}")
results: list[str] = []
r = requests.get(link)
r.encoding = r.apparent_encoding
line_regex = r"(?P<id>.)、(?P<name>.*)(</.*?>)?(?P<detail>.*放假.*。)"
for line in r.text.replace('<br/>', '\n').split('\n'):
match = re.search(line_regex, line)
if match is None:
continue
work, rest, *_ = match.group('detail').split('')
dates = ';'.join((match.group('name'), parse(work), parse(rest)))
print(dates) # todo: 需要人工干预如下情况: 1.与周末连休, 2.补休
results.append(f"{dates:30} // {match.group('detail')}")
yield year, link, '\n'.join(results)
def parse(text: str) -> str:
results: list[str] = []
range_type_a = r"(?P<m1>\d?\d)月(?P<d1>\d?\d)日至(?P<m2>\d?\d)月(?P<d2>\d?\d)日"
range_type_b = r"(?P<m1>\d?\d)月(?P<d1>\d?\d)日至(?P<d2>\d?\d)日"
single_date = r"(?P<m1>\d?\d)月(?P<d1>\d?\d)日"
for item in text.split(''):
match = re.search(range_type_a, item)
if match is not None:
results.append(f"{match.group('m1')}.{match.group('d1')}-{match.group('m2')}.{match.group('d2')}")
print(f"\tA: {results[-1]:15} {item}")
continue
match = re.search(range_type_b, item)
if match is not None:
results.append(f"{match.group('m1')}.{match.group('d1')}-{match.group('m1')}.{match.group('d2')}")
print(f"\tB: {results[-1]:15} {item}")
continue
match = re.search(single_date, item)
if match is not None:
results.append(f"{match.group('m1')}.{match.group('d1')}")
print(f"\tS: {results[-1]:15} {item}")
continue
print(f"\tX: {'':15} {item}")
return ','.join(results)
def source() -> Iterator[Tuple[str, str]]:
search_url = "http://sousuo.gov.cn/s.htm?t=paper&advance=false&n=&codeYear=&codeCode=" \
"&searchfield=title&sort=&q=%E8%8A%82%E5%81%87%E6%97%A5%E5%AE%89%E6%8E%92"
link_regex = r"href=['\"](?P<link>.*?)['\"].*国务院办公厅关于(?P<year>20\d\d)年.*通知"
for line in requests.get(search_url).text.split('\n'):
match = re.search(link_regex, line)
if match is None:
continue
yield match.group('year'), match.group('link')
def beijing_time() -> datetime:
utc_time = datetime.utcnow().replace(tzinfo=timezone.utc)
return utc_time.astimezone(timezone(timedelta(hours=8)))
if __name__ == '__main__':
main()

12
data/2013.txt Normal file
View File

@ -0,0 +1,12 @@
// automatically generated by crawler.py (3/27/2022)
// manually checked by DATA NOT VERIFIED
// source: http://www.gov.cn/zhengce/content/2012-12/10/content_1353.htm
元旦;1.1-1.3;1.5,1.6 // 1月1日至3日放假调休共3天。1月5日(星期六)、1月6日(星期日)上班。
春节;2.9-2.15;2.16,2.17 // 2月9日至15日放假调休共7天。2月16日(星期六)、2月17日(星期日)上班。
清明节;4.4-4.6;4.7 // 4月4日至6日放假调休共3天。4月7日(星期日)上班。
劳动节;4.29-5.1;4.27,4.28 // 4月29日至5月1日放假调休共3天。4月27日(星期六)、4月28日(星期日)上班。
端午节;6.10-6.12;6.8,6.9 // 6月10日至12日放假调休共3天。6月8日(星期六)、6月9日(星期日)上班。
中秋节;9.19-9.21;9.22 // 9月19日至21日放假调休共3天。9月22日(星期日)上班。
国庆节;10.1-10.7;9.29,10.12 // 10月1日至7日放假调休共7天。9月29日(星期日)、10月12日(星期六)上班。

12
data/2014.txt Normal file
View File

@ -0,0 +1,12 @@
// automatically generated by crawler.py (3/27/2022)
// manually checked by DATA NOT VERIFIED
// source: http://www.gov.cn/zhengce/content/2014-01/02/content_1194.htm
元旦;1.1; // 1月1日放假1天。
春节;1.31-2.6;1.26,2.8 // 1月31日至2月6日放假调休共7天。1月26日星期日、2月8日星期六上班。
清明节;4.5; // 4月5日放假4月7日星期一补休。
劳动节;5.1-5.3;5.4 // 5月1日至3日放假调休共3天。5月4日星期日上班。
端午节;6.2; // 6月2日放假与周末连休。
中秋节;9.8; // 9月8日放假与周末连休。
国庆节;10.1-10.7;9.28,10.11 // 10月1日至7日放假调休共7天。9月28日星期日、10月11日星期六上班。

12
data/2015.txt Normal file
View File

@ -0,0 +1,12 @@
// automatically generated by crawler.py (3/27/2022)
// manually checked by DATA NOT VERIFIED
// source: http://www.gov.cn/zhengce/content/2014-12/16/content_9302.htm
元旦;1.1-1.3;1.4 // 1月1日至3日放假调休共3天。1月4日星期日上班。
春节;2.18-2.24;2.15,2.28 // 2月18日至24日放假调休共7天。2月15日星期日、2月28日星期六上班。
清明节;4.5; // 4月5日放假4月6日星期一补休。
劳动节;5.1; // 5月1日放假与周末连休。
端午节;6.20; // 6月20日放假6月22日星期一补休。
中秋节;9.27; // 9月27日放假。
国庆节;10.1-10.7;10.10 // 10月1日至7日放假调休共7天。10月10日星期六上班。

12
data/2016.txt Normal file
View File

@ -0,0 +1,12 @@
// automatically generated by crawler.py (3/27/2022)
// manually checked by DATA NOT VERIFIED
// source: http://www.gov.cn/zhengce/content/2015-12/10/content_10394.htm
元旦;1.1; // 1月1日放假与周末连休。
春节;2.7-2.13;2.6,2.14 // 2月7日至13日放假调休共7天。2月6日星期六、2月14日星期日上班。
清明节;4.4; // 4月4日放假与周末连休。
劳动节;5.1; // 5月1日放假5月2日星期一补休。
端午节;6.9-6.11;6.12 // 6月9日至11日放假调休共3天。6月12日星期日上班。
中秋节;9.15-9.17;9.18 // 9月15日至17日放假调休共3天。9月18日星期日上班。
国庆节;10.1-10.7;10.8,10.9 // 10月1日至7日放假调休共7天。10月8日星期六、10月9日星期日上班。

11
data/2017.txt Normal file
View File

@ -0,0 +1,11 @@
// automatically generated by crawler.py (3/27/2022)
// manually checked by DATA NOT VERIFIED
// source: http://www.gov.cn/zhengce/content/2016-12/01/content_5141603.htm
元旦;1.1; // 1月1日放假1月2日星期一补休。
春节;1.27-2.2;1.22,2.4 // 1月27日至2月2日放假调休共7天。1月22日星期日、2月4日星期六上班。
清明节;4.2-4.4;4.1 // 4月2日至4日放假调休共3天。4月1日星期六上班。
劳动节;5.1; // 5月1日放假与周末连休。
端午节;5.28-5.30;5.27 // 5月28日至30日放假调休共3天。5月27日星期六上班。
中秋节、国庆节;10.1-10.8;9.30 // 10月1日至8日放假调休共8天。9月30日星期六上班。

12
data/2018.txt Normal file
View File

@ -0,0 +1,12 @@
// automatically generated by crawler.py (3/27/2022)
// manually checked by DATA NOT VERIFIED
// source: http://www.gov.cn/zhengce/content/2017-11/30/content_5243579.htm
元旦;1.1; // 1月1日放假与周末连休。
春节;2.15-2.21;2.11,2.24 // 2月15日至21日放假调休共7天。2月11日星期日、2月24日星期六上班。
清明节;4.5-4.7;4.8 // 4月5日至7日放假调休共3天。4月8日星期日上班。
劳动节;4.29-5.1;4.28 // 4月29日至5月1日放假调休共3天。4月28日星期六上班。
端午节;6.18; // 6月18日放假与周末连休。
中秋节;9.24; // 9月24日放假与周末连休。
国庆节;10.1-10.7;9.29,9.30 // 10月1日至7日放假调休共7天。9月29日星期六、9月30日星期日上班。

12
data/2019.txt Normal file
View File

@ -0,0 +1,12 @@
// automatically generated by crawler.py (3/27/2022)
// manually checked by DATA NOT VERIFIED
// source: http://www.gov.cn/zhengce/content/2018-12/06/content_5346276.htm
元旦;12.30;12.29 // 2018年12月30日至2019年1月1日放假调休共3天。2018年12月29日星期六上班。
春节;2.4-2.10;2.2,2.3 // 2月4日至10日放假调休共7天。2月2日星期六、2月3日星期日上班。
清明节;4.5; // 4月5日放假与周末连休。
劳动节;5.1; // 5月1日放假。
端午节;6.7; // 6月7日放假与周末连休。
中秋节;9.13; // 9月13日放假与周末连休。
国庆节;10.1-10.7;9.29,10.12 // 10月1日至7日放假调休共7天。9月29日星期日、10月12日星期六上班。

11
data/2020.txt Normal file
View File

@ -0,0 +1,11 @@
// automatically generated by crawler.py (3/27/2022)
// manually checked by DATA NOT VERIFIED
// source: http://www.gov.cn/zhengce/content/2019-11/21/content_5454164.htm
元旦;1.1; // 2020年1月1日放假共1天。
春节;1.24-1.30;1.19,2.1 // 1月24日至30日放假调休共7天。1月19日星期日、2月1日星期六上班。
清明节;4.4-4.6; // 4月4日至6日放假调休共3天。
劳动节;5.1-5.5;4.26,5.9 // 5月1日至5日放假调休共5天。4月26日星期日、5月9日星期六上班。
端午节;6.25-6.27;6.28 // 6月25日至27日放假调休共3天。6月28日星期日上班。
国庆节、中秋节;10.1-10.8;9.27,10.10 // 10月1日至8日放假调休共8天。9月27日星期日、10月10日星期六上班。

View File

@ -1,9 +1,12 @@
// 数据来源 http://www.gov.cn/gongbao/content/2020/content_5567750.htm
// 数据格式 节日名;放假日期;补班日期 日期支持多选“,”和区间“-”
元旦;1.1-1.3;
春节;2.11-2.17;2.7,2.20
清明节;4.3-4.5;
劳动节;5.1-5.5;4.25,5.8
端午节;6.12-6.14;
中秋节;9.19-9.21;9.18
国庆节;10.1-10.7;9.26,10.9
// automatically generated by crawler.py (3/27/2022)
// manually checked by @bugstop (3/27/2022)
// source: http://www.gov.cn/zhengce/content/2020-11/25/content_5564127.htm
元旦;1.1-1.3; // 2021年1月1日至3日放假共3天。
春节;2.11-2.17;2.7,2.20 // 2月11日至17日放假调休共7天。2月7日星期日、2月20日星期六上班。
清明节;4.3-4.5; // 4月3日至5日放假调休共3天。
劳动节;5.1-5.5;4.25,5.8 // 5月1日至5日放假调休共5天。4月25日星期日、5月8日星期六上班。
端午节;6.12-6.14; // 6月12日至14日放假共3天。
中秋节;9.19-9.21;9.18 // 9月19日至21日放假调休共3天。9月18日星期六上班。
国庆节;10.1-10.7;9.26,10.9 // 10月1日至7日放假调休共7天。9月26日星期日、10月9日星期六上班。

View File

@ -1,9 +1,12 @@
// 数据来源 http://www.gov.cn/zhengce/content/2021-10/25/content_5644835.htm
// 数据格式 节日名;放假日期;补班日期 日期支持多选“,”和区间“-”
元旦;1.1-1.3;
春节;1.31-2.6;1.29,1.30
清明节;4.3-4.5;4.2
劳动节;4.30-5.4;4.24,5.7
端午节;6.3-6.5;
中秋节;9.10-9.12;
国庆节;10.1-10.7;10.8,10.9
// automatically generated by crawler.py (3/27/2022)
// manually checked by @bugstop (3/27/2022)
// source: http://www.gov.cn/zhengce/content/2021-10/25/content_5644835.htm
元旦;1.1-1.3; // 2022年1月1日至3日放假共3天。
春节;1.31-2.6;1.29,1.30 // 1月31日至2月6日放假调休共7天。1月29日星期六、1月30日星期日上班。
清明节;4.3-4.5;4.2 // 4月3日至5日放假调休共3天。4月2日星期六上班。
劳动节;4.30-5.4;4.24,5.7 // 4月30日至5月4日放假调休共5天。4月24日星期日、5月7日星期六上班。
端午节;6.3-6.5; // 6月3日至5日放假共3天。
中秋节;9.10-9.12; // 9月10日至12日放假共3天。
国庆节;10.1-10.7;10.8,10.9 // 10月1日至7日放假调休共7天。10月8日星期六、10月9日星期日上班。

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -6,97 +6,447 @@ X-WR-CALNAME:节假日(补班)
BEGIN:VEVENT
UID:63b0ed55-24d8-423f-bbf8-98cfab2ddc4e
DTSTART;VALUE=DATE:20130105
SUMMARY:元旦补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:e4165ccc-14a7-49e9-80de-c9efd90de4e2
DTSTART;VALUE=DATE:20130106
SUMMARY:元旦补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:72cc510c-57c3-457d-85d8-2cdd04ab5086
DTSTART;VALUE=DATE:20130216
SUMMARY:春节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:122871c3-6c12-44f3-b9eb-740e5efdfb5f
DTSTART;VALUE=DATE:20130217
SUMMARY:春节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:c19c48e3-c2fd-4f8c-9bcd-b2c9850293db
DTSTART;VALUE=DATE:20130407
SUMMARY:清明节补班
DESCRIPTION:补班 第1天/共1天
END:VEVENT
BEGIN:VEVENT
UID:3b479ad4-35f9-47e6-920d-53f3b51005c7
DTSTART;VALUE=DATE:20130427
SUMMARY:劳动节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:781c09fc-5e8b-4464-aa02-eb799ee5613b
DTSTART;VALUE=DATE:20130428
SUMMARY:劳动节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:9d2b8eb5-09e3-48c9-b25d-c5eebdad6964
DTSTART;VALUE=DATE:20130608
SUMMARY:端午节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:ff76606f-bf58-4b1b-83ce-63645f427063
DTSTART;VALUE=DATE:20130609
SUMMARY:端午节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:2dbd9c1b-4f64-47c5-b64f-1e0c1863157f
DTSTART;VALUE=DATE:20130922
SUMMARY:中秋节补班
DESCRIPTION:补班 第1天/共1天
END:VEVENT
BEGIN:VEVENT
UID:12afb3aa-32c9-41a3-bb22-c69179cebf49
DTSTART;VALUE=DATE:20130929
SUMMARY:国庆节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:b6adb201-5bda-4cc7-b1db-cd64d515936d
DTSTART;VALUE=DATE:20131012
SUMMARY:国庆节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:d63f74a3-236c-4ad3-a333-cc3a86008d8a
DTSTART;VALUE=DATE:20140126
SUMMARY:春节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:e5625a90-dcef-42e3-8c6c-33670431e32b
DTSTART;VALUE=DATE:20140208
SUMMARY:春节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:b569e755-ac7b-4c5b-8093-8614e7674557
DTSTART;VALUE=DATE:20140504
SUMMARY:劳动节补班
DESCRIPTION:补班 第1天/共1天
END:VEVENT
BEGIN:VEVENT
UID:09c1818f-7d99-4377-ad49-876734295ac1
DTSTART;VALUE=DATE:20140928
SUMMARY:国庆节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:32388361-986a-4dbe-9601-7f7b36b87c31
DTSTART;VALUE=DATE:20141011
SUMMARY:国庆节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:22790e72-be9d-47bd-8731-de4845594c00
DTSTART;VALUE=DATE:20150104
SUMMARY:元旦补班
DESCRIPTION:补班 第1天/共1天
END:VEVENT
BEGIN:VEVENT
UID:634871b9-3714-4e38-b9d4-336b07235633
DTSTART;VALUE=DATE:20150215
SUMMARY:春节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:6ef76598-7f87-4e9a-9a88-9b1d24778838
DTSTART;VALUE=DATE:20150228
SUMMARY:春节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:3ca4e4dc-b5cc-41b8-bcbe-cba93d525a63
DTSTART;VALUE=DATE:20151010
SUMMARY:国庆节补班
DESCRIPTION:补班 第1天/共1天
END:VEVENT
BEGIN:VEVENT
UID:95f3c2ef-b163-4aa6-9bde-8844b6b80b2e
DTSTART;VALUE=DATE:20160206
SUMMARY:春节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:f455493c-ea4d-4cc8-a1e4-d04d0ec3ec7c
DTSTART;VALUE=DATE:20160214
SUMMARY:春节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:bf737a3b-13ca-47fe-b02a-ac7dae781cfe
DTSTART;VALUE=DATE:20160612
SUMMARY:端午节补班
DESCRIPTION:补班 第1天/共1天
END:VEVENT
BEGIN:VEVENT
UID:e21253e3-b15b-4419-8f05-64e232571e4e
DTSTART;VALUE=DATE:20160918
SUMMARY:中秋节补班
DESCRIPTION:补班 第1天/共1天
END:VEVENT
BEGIN:VEVENT
UID:e8e6c727-2493-4129-afa1-9f10e9020f02
DTSTART;VALUE=DATE:20161008
SUMMARY:国庆节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:7a46a370-7f7d-45c0-9408-2f1bc9c3cda3
DTSTART;VALUE=DATE:20161009
SUMMARY:国庆节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:ae15d00a-09b3-4041-93e4-759738891cef
DTSTART;VALUE=DATE:20170122
SUMMARY:春节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:a57f73de-e5af-4878-a150-6718a5a892fe
DTSTART;VALUE=DATE:20170204
SUMMARY:春节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:d50e900b-9fe4-440e-af05-82a3b7bcdb3f
DTSTART;VALUE=DATE:20170401
SUMMARY:清明节补班
DESCRIPTION:补班 第1天/共1天
END:VEVENT
BEGIN:VEVENT
UID:8f1ea2bf-bed8-4751-9a59-944f409dc14f
DTSTART;VALUE=DATE:20170527
SUMMARY:端午节补班
DESCRIPTION:补班 第1天/共1天
END:VEVENT
BEGIN:VEVENT
UID:ed355d53-71c8-4c83-a81a-1d7793e2b4bb
DTSTART;VALUE=DATE:20170930
SUMMARY:中秋节、国庆节补班
DESCRIPTION:补班 第1天/共1天
END:VEVENT
BEGIN:VEVENT
UID:50ff7532-db99-4dcb-806d-11d69325ee9b
DTSTART;VALUE=DATE:20180211
SUMMARY:春节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:3a2a27dc-9d8d-4d6e-835c-c380b0589644
DTSTART;VALUE=DATE:20180224
SUMMARY:春节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:902c6a92-2661-40cc-a468-8b1ae133e707
DTSTART;VALUE=DATE:20180408
SUMMARY:清明节补班
DESCRIPTION:补班 第1天/共1天
END:VEVENT
BEGIN:VEVENT
UID:f942b1c6-dd1c-4ae6-8945-90a3f464435f
DTSTART;VALUE=DATE:20180428
SUMMARY:劳动节补班
DESCRIPTION:补班 第1天/共1天
END:VEVENT
BEGIN:VEVENT
UID:a053ab47-9d88-47d1-b385-58d70c5bf2ab
DTSTART;VALUE=DATE:20180929
SUMMARY:国庆节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:dcddac35-bc76-4731-b3f1-d264dd1bd5eb
DTSTART;VALUE=DATE:20180930
SUMMARY:国庆节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:ac7fa11a-6372-48b1-a0a8-c9ad837a26d0
DTSTART;VALUE=DATE:20190202
SUMMARY:春节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:408c0fce-7bf0-4a4c-ba71-5f74d4490065
DTSTART;VALUE=DATE:20190203
SUMMARY:春节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:a20e3946-33b6-4fe1-b4c6-e348cd9e88c0
DTSTART;VALUE=DATE:20190929
SUMMARY:国庆节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:02d4ef2d-549e-4d06-ab4f-e6baaafdd9f9
DTSTART;VALUE=DATE:20191012
SUMMARY:国庆节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:6fdd77e5-1b99-4044-86cb-f8a656aa81b2
DTSTART;VALUE=DATE:20191229
SUMMARY:元旦补班
DESCRIPTION:补班 第1天/共1天
END:VEVENT
BEGIN:VEVENT
UID:1bc6650f-97ca-4fad-bde7-ff4fdb32cf4c
DTSTART;VALUE=DATE:20200119
SUMMARY:春节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:1072be70-90e3-446f-bafd-ca5713fdbffe
DTSTART;VALUE=DATE:20200201
SUMMARY:春节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:5b1e5188-8b41-418c-b25d-d5740f0f3feb
DTSTART;VALUE=DATE:20200426
SUMMARY:劳动节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:057e4374-b0ee-4712-a5da-bcb04a291fef
DTSTART;VALUE=DATE:20200509
SUMMARY:劳动节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:b9efe0f8-d6e9-48da-aa72-3a41fde9fe21
DTSTART;VALUE=DATE:20200628
SUMMARY:端午节补班
DESCRIPTION:补班 第1天/共1天
END:VEVENT
BEGIN:VEVENT
UID:ae90b189-25f7-490f-bd13-0134d92e95d8
DTSTART;VALUE=DATE:20200927
SUMMARY:国庆节、中秋节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:629956ce-39d3-4c08-8611-d19bad16aa2e
DTSTART;VALUE=DATE:20201010
SUMMARY:国庆节、中秋节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:024c3846-15e1-4ed5-91cf-aeb7a934881a
DTSTART;VALUE=DATE:20210207
SUMMARY:春节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:e4165ccc-14a7-49e9-80de-c9efd90de4e2
UID:1c5a15d1-e4ca-42e9-99bd-1e51241225d6
DTSTART;VALUE=DATE:20210220
SUMMARY:春节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:72cc510c-57c3-457d-85d8-2cdd04ab5086
UID:7022432e-fa34-4b3e-9541-81cc8e83debd
DTSTART;VALUE=DATE:20210425
SUMMARY:劳动节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:122871c3-6c12-44f3-b9eb-740e5efdfb5f
UID:7dd8a9da-d8b3-4eae-97dd-51320ea9f16e
DTSTART;VALUE=DATE:20210508
SUMMARY:劳动节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:c19c48e3-c2fd-4f8c-9bcd-b2c9850293db
UID:6e44fd91-df00-425a-8020-dc6f777082ad
DTSTART;VALUE=DATE:20210918
SUMMARY:中秋节补班
DESCRIPTION:补班 第1天/共1天
END:VEVENT
BEGIN:VEVENT
UID:3b479ad4-35f9-47e6-920d-53f3b51005c7
UID:46c92fba-e981-49aa-aec7-8e11336aa38c
DTSTART;VALUE=DATE:20210926
SUMMARY:国庆节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:781c09fc-5e8b-4464-aa02-eb799ee5613b
UID:bd006d65-dddd-44f7-bacb-8c52c969e67b
DTSTART;VALUE=DATE:20211009
SUMMARY:国庆节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:9d2b8eb5-09e3-48c9-b25d-c5eebdad6964
UID:89834a5f-de10-4ed6-a344-27498c5bc797
DTSTART;VALUE=DATE:20220129
SUMMARY:春节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:ff76606f-bf58-4b1b-83ce-63645f427063
UID:5e3188a9-1ffb-4601-82ba-b06c634a496d
DTSTART;VALUE=DATE:20220130
SUMMARY:春节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:2dbd9c1b-4f64-47c5-b64f-1e0c1863157f
UID:4a7bf487-cf94-4071-84be-29aa31ff3e76
DTSTART;VALUE=DATE:20220402
SUMMARY:清明节补班
DESCRIPTION:补班 第1天/共1天
END:VEVENT
BEGIN:VEVENT
UID:12afb3aa-32c9-41a3-bb22-c69179cebf49
UID:154dca15-7fcf-44c3-ada9-516c97912859
DTSTART;VALUE=DATE:20220424
SUMMARY:劳动节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:b6adb201-5bda-4cc7-b1db-cd64d515936d
UID:64965ff2-4ef9-48e2-9cdd-86fc0c001862
DTSTART;VALUE=DATE:20220507
SUMMARY:劳动节补班
DESCRIPTION:补班 第2天/共2天
END:VEVENT
BEGIN:VEVENT
UID:d63f74a3-236c-4ad3-a333-cc3a86008d8a
UID:ed9bb1c8-9908-4244-b560-dd8cca4f9ecb
DTSTART;VALUE=DATE:20221008
SUMMARY:国庆节补班
DESCRIPTION:补班 第1天/共2天
END:VEVENT
BEGIN:VEVENT
UID:e5625a90-dcef-42e3-8c6c-33670431e32b
UID:15b1d7cc-be34-4787-83ae-89ea92ef83ee
DTSTART;VALUE=DATE:20221009
SUMMARY:国庆节补班
DESCRIPTION:补班 第2天/共2天

View File

@ -105,6 +105,7 @@ func lines(data string) (result []string) {
)
for _, line := range strings.Split(data, "\n") {
line = strings.Split(line, "//")[0]
line = strings.TrimSpace(line)
if dateRegex.MatchString(line) {
result = append(result, line)

View File

@ -56,10 +56,11 @@ func Test_lines(t *testing.T) {
{"9", args{"9;,1.1;2.2"}, nil},
{"10", args{"10;1.1"}, nil},
{"11", args{"11;1.1;2.2,"}, nil},
{"12", args{"12;1.1;2.2 // none"}, nil},
{"13", args{"13;1.1;2.2 "}, []string{"13;1.1;2.2"}},
{"14", args{" 14;1.1;2.2"}, []string{"14;1.1;2.2"}},
{"15", args{" 15;1.1;2.2 "}, []string{"15;1.1;2.2"}},
{"12", args{"// 13;1.1;2.2 "}, nil},
{"13", args{"13;1.1;2.2 // none"}, []string{"13;1.1;2.2"}},
{"14", args{"14;1.1;2.2 "}, []string{"14;1.1;2.2"}},
{"15", args{" 15;1.1;2.2"}, []string{"15;1.1;2.2"}},
{"16", args{" 16;1.1;2.2 "}, []string{"16;1.1;2.2"}},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {

1
requirements.txt Normal file
View File

@ -0,0 +1 @@
requests~=2.27.1