#!/usr/bin/env python3 """创建早报页面,自动挂到按周分组目录下""" import json, sys, os, argparse from datetime import datetime import subprocess SCRIPTS_DIR = os.path.dirname(os.path.abspath(__file__)) SPACE_ID = os.environ.get('FEISHU_SPACE_ID', '7664817589230570761') DIGEST_PARENT = os.environ.get('FEISHU_DIGEST_PARENT', 'BH8AwLgJhipBcUkehCAcyKvDngE') def run_script(name, *args): cmd = ['python3', os.path.join(SCRIPTS_DIR, name)] + list(args) r = subprocess.run(cmd, capture_output=True, text=True) if r.returncode != 0: raise Exception(f"{name} failed: {r.stderr}") return json.loads(r.stdout) def get_token(): r = subprocess.run(['python3', os.path.join(SCRIPTS_DIR, 'init_token.py')], capture_output=True, text=True) return json.loads(r.stdout)['token'] def create_digest(title, content_file=None): import requests token = get_token() h = {'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json'} # Find or create this week's node from datetime import timedelta today = datetime.now() iso_week = today.isocalendar()[1] week_end = today + timedelta(days=(6 - today.weekday())) week_title = f"{today.year}年第{iso_week}周 {today.strftime('%m.%d')}-{week_end.strftime('%m.%d')}" # List children of digest parent r = requests.get( f'https://open.feishu.cn/open-apis/wiki/v2/spaces/{SPACE_ID}/nodes', params={'parent_node_token': DIGEST_PARENT}, headers=h ) kids = r.json()['data']['items'] week_token = None for k in kids: if str(iso_week) in k['title']: week_token = k['node_token'] break if not week_token: r = requests.post( f'https://open.feishu.cn/open-apis/wiki/v2/spaces/{SPACE_ID}/nodes', headers=h, json={'obj_type': 'docx', 'node_type': 'origin', 'parent_node_token': DIGEST_PARENT, 'title': week_title} ) data = r.json() if data.get('code') != 0: raise Exception(f"Create week node failed: {data.get('msg')}") week_token = data['data']['node']['node_token'] # Create today's digest r = requests.post( f'https://open.feishu.cn/open-apis/wiki/v2/spaces/{SPACE_ID}/nodes', headers=h, json={'obj_type': 'docx', 'node_type': 'origin', 'parent_node_token': week_token, 'title': title} ) data = r.json() if data.get('code') != 0: raise Exception(f"Create digest failed: {data.get('msg')}") node = data['data']['node'] print(json.dumps({'node_token': node['node_token'], 'obj_token': node['obj_token']})) # Write content if provided if content_file: node_token = node['node_token'] subprocess.run( ['python3', os.path.join(SCRIPTS_DIR, 'wiki_write.py'), '--node', node_token, '--file', content_file], check=True ) return node if __name__ == '__main__': p = argparse.ArgumentParser() p.add_argument('--title', required=True, help='Digest title') p.add_argument('--content', default=None, help='Content JSON file') args = p.parse_args() try: create_digest(args.title, args.content) except Exception as e: print(f'Error: {e}', file=sys.stderr) sys.exit(1)