mirror of
https://github.com/muhac/chinese-holidays-calendar.git
synced 2024-11-21 01:01:50 +08:00
Merge pull request #16 from theRank/feature-crawler
Feature: Website Crawler Automation
This commit is contained in:
commit
ac123b2fe7
3
.github/trigger.json
vendored
Normal file
3
.github/trigger.json
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"trigger": 0
|
||||
}
|
3
.github/workflows/ci.yml
vendored
3
.github/workflows/ci.yml
vendored
@ -6,8 +6,7 @@ on:
|
||||
- "**"
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- dev
|
||||
- "**"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
68
.github/workflows/data.yml
vendored
Normal file
68
.github/workflows/data.yml
vendored
Normal 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
|
34
.github/workflows/ics.yml
vendored
34
.github/workflows/ics.yml
vendored
@ -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
|
@ -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
111
crawler.py
Normal 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
12
data/2013.txt
Normal 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
12
data/2014.txt
Normal 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
12
data/2015.txt
Normal 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
12
data/2016.txt
Normal 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
11
data/2017.txt
Normal 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
12
data/2018.txt
Normal 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
12
data/2019.txt
Normal 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
11
data/2020.txt
Normal 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日(星期六)上班。
|
@ -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日(星期六)上班。
|
@ -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日(星期日)上班。
|
1994
docs/holiday.ics
1994
docs/holiday.ics
File diff suppressed because it is too large
Load Diff
1994
docs/index.html
1994
docs/index.html
File diff suppressed because it is too large
Load Diff
1424
docs/rest.ics
1424
docs/rest.ics
File diff suppressed because it is too large
Load Diff
376
docs/work.ics
376
docs/work.ics
@ -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天
|
||||
|
@ -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)
|
||||
|
@ -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
1
requirements.txt
Normal file
@ -0,0 +1 @@
|
||||
requests~=2.27.1
|
Loading…
Reference in New Issue
Block a user