使用Github Action自動填寫疫情通


使用Github Action自動填寫疫情通

西電晨午晚檢一天三次,通過企業號功能進行填寫。實際上,西電企業號大部分功能是以網頁模式工作的,通過構造connection發送合適的request,設置計划按時間自動運行,即可完成自動填寫。

1、原理分析

打開晨午晚檢頁面,復制鏈接,得到實際的網頁地址:https://xxcapp.xidian.edu.cn/site/ncov/xidiandailyup

在瀏覽器打開后發現會重定向到登錄頁面:https://xxcapp.xidian.edu.cn/uc/wap/login

一般來說,登錄一次之后,會保留一段時間的cookies,我們要做的就是模擬一次登錄,獲得相應的connection,隨后再次向晨午晚檢網頁發送request

2、登錄過程

[TODO]

3、使用Python

  • 准備

Python中有很多與網絡相關的庫,例如scapy。在這里我們直接使用requests庫模擬http的request請求。

首先下載requests庫:pip install requests

隨后導入:import requests

由於填寫的信息是以json形式post的,因此要用到json庫格式化信息:import json

  • 數據處理

提前編輯好各個字段:是否在校(sfzx),體溫(列表形式,對應數字),區域(高德地圖API)等

{
  "sfzx": "1",
  "tw": "1",
  "area": 根據實際情況填寫,Unicode編碼,
  "city": 同上,
  "province": 同上,
  "address": 同上,
  "geo_api_info": 高德地圖API,Unicode編碼,
  "sfcyglq": "0",
  "sfyzz": "0",
  "qtqk": "",
  "askforleave": "0"
}

可以將其保存為單獨的json文件,再使用json.load導入

  • 登錄

首先新建一個requests.Session,使用登錄接口,post用戶名和密碼,獲得登陸結果

conn = requests.Session()
result = conn.post(
    url="https://xxcapp.xidian.edu.cn/uc/wap/login/check",
    data={'username': uname, 'password': upswd}
)
if result.status_code != 200:
    print('Failed to login.', result.status_code)
    exit()
  • 提交數據

使用上面新建的conn,再次向晨午晚檢接口post數據,並保存新的respond

result = conn.post(
    url="https://xxcapp.xidian.edu.cn/xisuncov/wap/open-report/save",
    data=data
)
if result.status_code != 200:
    print("Error.", result.status_code)
    exit()
  • 驗證結果

查看respond傳回的消息,判斷是否成功

rjson = json.loads(result.text)
print(rjson['m'])

Github Action

新建倉庫上傳配置好的數據和代碼,就可以使用Github Action幫我們自動完成任務了。在repository頁面上點擊Action,選擇set up a workflow yourself 來自定義任務

Github Action每次執行時,實際上是使用了一台新的虛擬機執行任務,因此需要在yml文件內完整地寫出從一個新系統到代碼啟動所需要執行的全部步驟

name: Daily Check In
on:
  schedule:
    - cron: '0,30 0,5,11 * * *'
    # UTC時間,分別對應了北京時間的8點、13點、19點的整點和30分

jobs:
  sign_in:
    runs-on: ubuntu-latest
    # 定義系統類型,這里選擇Ubuntu
    steps:
    - name: '[Prepare] Code Check'
      uses: actions/checkout@v2
      # 從該倉庫clone代碼到虛擬機
    - name: '[Prepare] Set python'
      uses: actions/setup-python@v1
      # 安裝python
      with:
        python-version: '3.x'
    - name: '[Prepare] Install Dependencies'
      run: |
        python -m pip install --upgrade pip
        python -m pip install --upgrade requests
        # 安裝需要的python庫
    - name: '[Final Main] Check In'
      run: |
        python submit.py
        # 執行代碼

有關詳細的Github Action yml文件格式,可以在官方文檔中找到解釋:https://docs.github.com/cn/actions


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM