
寫排程有很多方式可以達到,我們來玩玩 Github Action 的 Cron job,讓它在每天的固定時間幫我們更新 kintone 上面的紀錄。
Github Free Plan 每個月有 2,000 分鐘的免費使用時間,正好適合讓我們玩玩看,不過這個排程並不是那麼準時,都會延遲個 10 分鐘以上才執行,且如果是設定每分鐘執行這種高頻率的話,會被忽略掉。
所以如果你的專案要非常準時執行,且短時間要執行多次,那就要挑選其他工具。
先在 kintone 的應用程式中建立一個 日期 欄位,這個日期會顯示年月日,如 2024-10-12,我們的排程每天會將這個欄位更新成今天的日期,更新時間是晚上的 9 點。
以下用 python 寫個更新紀錄的程式,先在本地建好專案並測試沒問題後,我們再推到 Github 上。先來開個虛擬環境(MAC):
python3 -m venv cron_env
啟動虛擬環境:
source cron_env/bin/activate
接著安裝發送請求的套件
pip3 install requests
再來就可以開始寫 code 了!
我們先取得當天的時間,接著把這時間寫進名為 date 的 kintone 欄位,token 跟 url 之類的我就直接寫死了,如果有需要的話可以放在 .env,推到 github 的時候再做設定。
import requests
from datetime import datetime
from typing import Dict, Any
base_url = 'https://xxx.cybozu.com/k/v1/record.json'
headers = {
    'X-Cybozu-API-Token': 'xxxxxx',
    'Content-Type': 'application/json'
}
def create_today_date() -> str:
    return datetime.now().strftime('%Y-%m-%d')
def get_payload(date: str) -> Dict[str, Any]:
    return {
        'app': '175',
        'id': 1,
        'record': {
            'date': {
                'value': date
            }
        }
    }
def update_record():
    today_date = create_today_date()
    payload = get_payload(today_date)
    response = requests.put(base_url, json=payload, headers=headers)
    print(response.json())
順利的話應該會 print 出  {'revision': ''} 的訊息,我就不多做錯誤處理了。
最後我們把需要用的套件輸出到 requirements.txt:
pip3 freeze > requirements.txt
專案內建立 .github/workflows/python-script.ym,等等推到 Github 上讓他跑,我們讓這個程式碼在每天的晚上九點執行,實測大概會延遲 10 - 20 分鐘左右。
name: Run Python Script Daily
on:
  schedule:
    - cron: '0 13 * * *'
jobs:
  run-python:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v3
    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: '3.x'
    - name: Cache Python packages
      uses: actions/cache@v3
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
        restore-keys: |
          ${{ runner.os }}-pip-
    - name: Install dependencies
      run: pip install -r requirements.txt
    - name: Run Python script
      run: python app.py
排程的時程,可以用 cron expression 來生成。
最後的最後,只要把專案推到 github 上就可以了,可以在 Action 的地方看看是否有成功。