├── .dockerignore ├── .github ├── ISSUE_TEMPLATE │ ├── bug-report.md │ └── feature_request.md └── workflows │ ├── keep-alive.yml │ └── main.yml ├── .gitignore ├── .vscode └── settings.json ├── Dockerfile ├── LICENSE ├── Pipfile ├── Pipfile.lock ├── README.md ├── requirements.txt └── src ├── main.py └── sites.json /.dockerignore: -------------------------------------------------------------------------------- 1 | .github 2 | .gitignore 3 | *.md 4 | LICENSE 5 | requirements.txt -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: 反馈您遇到的问题,来帮助我们改进。 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## 问题描述 11 | 12 | 简明扼要地描述问题的内容。 13 | 14 | ## Traceback 详情 15 | 16 | 将 Python 的 Traceback 报错信息完整地粘贴到此处。 17 | 18 | ## 截图 19 | 20 | 如果可能,请附上截图来提供更多信息。 21 | 22 | ## 运行环境 23 | 24 | > 仅本地部署需要填写。 25 | 26 | - 操作系统:【例:Windows 11, Ubuntu-20.04】 27 | - Python 版本:【例:3.6, 3.8.10】 28 | - SHELL:【例:Powershell, zsh】 29 | 30 | ## 备注 31 | 32 | 其它与问题相关的信息。 33 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: 提出创意或改进性能。 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## 功能描述 11 | 12 | 简明扼要地描述您期望加入的功能。 13 | 14 | ## 方案建议 15 | 16 | 在新功能的实现上,您是否已经有了初步的想法? 17 | 18 | ## 是否解决隐患? 19 | 20 | 这项新功能是否能够解决现有代码的隐患?如果它能够解决 Issue 中的某个问题反馈,也在这里以 `#编号` 的形式引用。 21 | 22 | ## 备注 23 | 24 | 其它与功能相关的信息。 25 | -------------------------------------------------------------------------------- /.github/workflows/keep-alive.yml: -------------------------------------------------------------------------------- 1 | name: Github Action with a cronjob trigger 2 | on: 3 | workflow_dispatch: 4 | schedule: 5 | - cron: "0 0 */5 * *" 6 | 7 | jobs: 8 | cronjob-based-github-action: 9 | name: Cronjob based github action 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v2 13 | - uses: gautamkrishnar/keepalive-workflow@v1 # using the workflow with default settings -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Daily report 2 | 3 | on: 4 | workflow_dispatch: 5 | schedule: 6 | - cron: "0 6,16 * * *" 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@v2.4.0 14 | 15 | - name: Setup Python 16 | uses: actions/setup-python@v2.3.2 17 | with: 18 | python-version: "3.10" 19 | architecture: "x64" 20 | 21 | - name: Install packages 22 | run: pip install -r requirements.txt 23 | 24 | - name: Run application 25 | env: 26 | COOKIES: ${{ secrets.COOKIES }} 27 | run: python -u src/main.py 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "python.formatting.provider": "black" 3 | } 4 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # syntax=docker/dockerfile:1 2 | 3 | FROM python:3-slim 4 | 5 | WORKDIR /app 6 | 7 | RUN pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 8 | RUN pip3 install --upgrade pip 9 | RUN pip3 install pipenv 10 | 11 | COPY Pipfile Pipfile 12 | COPY Pipfile.lock Pipfile.lock 13 | 14 | RUN pipenv install 15 | 16 | COPY . . 17 | 18 | CMD [ "pipenv", "run", "python", "-u", "src/main.py" ] 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 mrcai 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Pipfile: -------------------------------------------------------------------------------- 1 | [[source]] 2 | url = "https://pypi.tuna.tsinghua.edu.cn/simple" 3 | verify_ssl = true 4 | name = "tsinghua" 5 | 6 | [packages] 7 | requests = "*" 8 | 9 | [dev-packages] 10 | black = "*" 11 | 12 | [requires] 13 | python_version = "3.10" 14 | -------------------------------------------------------------------------------- /Pipfile.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_meta": { 3 | "hash": { 4 | "sha256": "d9ab160889d42838c9d35aa9274f2fba8e4b07a2229a48d845366d0400ad01d9" 5 | }, 6 | "pipfile-spec": 6, 7 | "requires": { 8 | "python_version": "3.10" 9 | }, 10 | "sources": [ 11 | { 12 | "name": "tsinghua", 13 | "url": "https://pypi.tuna.tsinghua.edu.cn/simple", 14 | "verify_ssl": true 15 | } 16 | ] 17 | }, 18 | "default": { 19 | "certifi": { 20 | "hashes": [ 21 | "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", 22 | "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" 23 | ], 24 | "index": "tsinghua", 25 | "version": "==2022.12.7" 26 | }, 27 | "charset-normalizer": { 28 | "hashes": [ 29 | "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597", 30 | "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df" 31 | ], 32 | "markers": "python_version >= '3'", 33 | "version": "==2.0.12" 34 | }, 35 | "idna": { 36 | "hashes": [ 37 | "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", 38 | "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" 39 | ], 40 | "markers": "python_version >= '3'", 41 | "version": "==3.4" 42 | }, 43 | "requests": { 44 | "hashes": [ 45 | "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61", 46 | "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d" 47 | ], 48 | "index": "tsinghua", 49 | "version": "==2.27.1" 50 | }, 51 | "urllib3": { 52 | "hashes": [ 53 | "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc", 54 | "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8" 55 | ], 56 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", 57 | "version": "==1.26.13" 58 | } 59 | }, 60 | "develop": { 61 | "black": { 62 | "hashes": [ 63 | "sha256:07e5c049442d7ca1a2fc273c79d1aecbbf1bc858f62e8184abe1ad175c4f7cc2", 64 | "sha256:0e21e1f1efa65a50e3960edd068b6ae6d64ad6235bd8bfea116a03b21836af71", 65 | "sha256:1297c63b9e1b96a3d0da2d85d11cd9bf8664251fd69ddac068b98dc4f34f73b6", 66 | "sha256:228b5ae2c8e3d6227e4bde5920d2fc66cc3400fde7bcc74f480cb07ef0b570d5", 67 | "sha256:2d6f331c02f0f40aa51a22e479c8209d37fcd520c77721c034517d44eecf5912", 68 | "sha256:2ff96450d3ad9ea499fc4c60e425a1439c2120cbbc1ab959ff20f7c76ec7e866", 69 | "sha256:3524739d76b6b3ed1132422bf9d82123cd1705086723bc3e235ca39fd21c667d", 70 | "sha256:35944b7100af4a985abfcaa860b06af15590deb1f392f06c8683b4381e8eeaf0", 71 | "sha256:373922fc66676133ddc3e754e4509196a8c392fec3f5ca4486673e685a421321", 72 | "sha256:5fa1db02410b1924b6749c245ab38d30621564e658297484952f3d8a39fce7e8", 73 | "sha256:6f2f01381f91c1efb1451998bd65a129b3ed6f64f79663a55fe0e9b74a5f81fd", 74 | "sha256:742ce9af3086e5bd07e58c8feb09dbb2b047b7f566eb5f5bc63fd455814979f3", 75 | "sha256:7835fee5238fc0a0baf6c9268fb816b5f5cd9b8793423a75e8cd663c48d073ba", 76 | "sha256:8871fcb4b447206904932b54b567923e5be802b9b19b744fdff092bd2f3118d0", 77 | "sha256:a7c0192d35635f6fc1174be575cb7915e92e5dd629ee79fdaf0dcfa41a80afb5", 78 | "sha256:b1a5ed73ab4c482208d20434f700d514f66ffe2840f63a6252ecc43a9bc77e8a", 79 | "sha256:c8226f50b8c34a14608b848dc23a46e5d08397d009446353dad45e04af0c8e28", 80 | "sha256:ccad888050f5393f0d6029deea2a33e5ae371fd182a697313bdbd835d3edaf9c", 81 | "sha256:dae63f2dbf82882fa3b2a3c49c32bffe144970a573cd68d247af6560fc493ae1", 82 | "sha256:e2f69158a7d120fd641d1fa9a921d898e20d52e44a74a6fbbcc570a62a6bc8ab", 83 | "sha256:efbadd9b52c060a8fc3b9658744091cb33c31f830b3f074422ed27bad2b18e8f", 84 | "sha256:f5660feab44c2e3cb24b2419b998846cbb01c23c7fe645fee45087efa3da2d61", 85 | "sha256:fdb8754b453fb15fad3f72cd9cad3e16776f0964d67cf30ebcbf10327a3777a3" 86 | ], 87 | "index": "tsinghua", 88 | "version": "==22.1.0" 89 | }, 90 | "click": { 91 | "hashes": [ 92 | "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", 93 | "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" 94 | ], 95 | "markers": "python_version >= '3.7'", 96 | "version": "==8.1.3" 97 | }, 98 | "mypy-extensions": { 99 | "hashes": [ 100 | "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d", 101 | "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8" 102 | ], 103 | "version": "==0.4.3" 104 | }, 105 | "pathspec": { 106 | "hashes": [ 107 | "sha256:88c2606f2c1e818b978540f73ecc908e13999c6c3a383daf3705652ae79807a5", 108 | "sha256:8f6bf73e5758fd365ef5d58ce09ac7c27d2833a8d7da51712eac6e27e35141b0" 109 | ], 110 | "markers": "python_version >= '3.7'", 111 | "version": "==0.10.2" 112 | }, 113 | "platformdirs": { 114 | "hashes": [ 115 | "sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca", 116 | "sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e" 117 | ], 118 | "markers": "python_version >= '3.7'", 119 | "version": "==2.6.0" 120 | }, 121 | "tomli": { 122 | "hashes": [ 123 | "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", 124 | "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" 125 | ], 126 | "markers": "python_version >= '3.7'", 127 | "version": "==2.0.1" 128 | } 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |