Skip to content

AL1732/Worlds-Earning-Call

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

财报电话会议音频管理系统

项目概述

这是一个本地化、个人使用的财报电话会议音频管理网站,你可以在浏览器里:

  • 搜索各大公司最新季度的财报电话会议音频
  • 收藏、管理你关心的公司的季度财报
  • 可视化监控爬虫抓取状态和收藏夹统计

整个项目完全在 WSL2 本地环境运行,通过 Docker 容器化和 Kubernetes 编排保证环境一致性和易维护性,同时用 GitHub Actions 做 CI/CD 自动化构建和部署,支持手动触发——你自己想用的时候启动服务即可。

技术栈

功能模块 技术/工具 功能说明
前端 React + TypeScript + Docker 收藏夹界面、音频播放、搜索公司财报、显示收藏状态
后端 API Node.js + Express + Docker 提供前端数据接口、收藏夹增删改查、调用爬虫获取音频链接
爬虫服务 Node.js + Axios + Cheerio + Docker 自动抓取公司 IR 页面上的财报音频链接,解析 HTML 并写入数据库
数据库 SQLite / MySQL + Docker 存储收藏夹数据、音频链接、爬虫抓取状态
可视化监控 Grafana + Docker 展示爬虫状态、收藏夹统计、音频链接数量的仪表盘
CI/CD GitHub Actions 自动化构建、测试、推送镜像、部署到 Kubernetes
容器编排 Kubernetes (K8S) 容器编排、服务调度、自动扩缩容、滚动更新
容器化 Docker + docker-compose 各模块独立运行、环境隔离、本地开发测试
服务触发方式 手动启动 你需要使用时在 WSL2 或本地服务器执行 kubectl apply 或 docker-compose up -d

功能实现

前端功能(React + TypeScript)

  • 搜索公司财报音频
  • 收藏指定公司的季度财报
  • 播放音频
  • 收藏夹增删改查

后端功能(Node.js + Express)

  • 提供 REST API 给前端访问收藏夹和音频数据
  • 调用爬虫抓取最新音频链接
  • 把爬虫结果写入数据库

爬虫功能(Node.js + Cheerio)

  • 抓取公司官方投资者关系(IR)页面
  • 自动解析 HTML 找到季度财报音频链接
  • 将链接存入数据库

数据库(SQLite / MySQL)

  • 收藏夹表:存储你收藏的公司和季度
  • 音频链接表:存储抓到的音频 URL
  • 爬虫状态表:记录抓取成功/失败状态

可视化监控(Grafana)

  • 显示每个公司音频抓取状态
  • 收藏夹数量统计
  • 每季度新增音频数量

CI/CD(GitHub Actions)

  • 自动构建前端 React 容器镜像
  • 自动构建 Node.js API + 爬虫容器镜像
  • 运行单元测试和集成测试
  • 推送镜像到容器镜像仓库(如 GitHub Container Registry)
  • 自动部署到 Kubernetes 集群
  • 支持 workflow_dispatch 手动触发

容器编排(Kubernetes)

  • 使用 Deployment 管理各服务副本
  • 使用 Service 暴露服务端口
  • 使用 ConfigMap 和 Secret 管理配置和敏感信息
  • 使用 PersistentVolume 持久化数据库数据
  • 支持 Horizontal Pod Autoscaler 自动扩缩容
  • 支持滚动更新和回滚

数据流概览

  1. 用户在浏览器操作前端 → 请求 Node.js API
  2. Node.js API 查询数据库 → 返回收藏夹 / 音频数据
  3. 爬虫定向抓取 IR 页面音频链接 → 写入数据库
  4. Grafana 读取数据库 → 展示爬虫状态、收藏夹统计、音频数量
  5. GitHub Actions 管理整个构建和部署流程 → 自动构建镜像并部署到 Kubernetes
  6. Kubernetes 编排各服务容器 → 保证服务高可用和弹性伸缩

使用流程(手动启动)

方式一:Docker Compose(本地开发测试)

  1. 打开 WSL2 或本地服务器
  2. 执行:
    docker-compose up -d
  3. 浏览器访问:
  4. 你可以:
    • 搜索公司财报
    • 收藏季度财报
    • 播放音频
    • 查看爬虫状态和统计数据
  5. 使用完毕,停止服务:
    docker-compose down

方式二:Kubernetes(生产环境部署)

  1. 确保 Kubernetes 集群已启动(如 minikube 或 k3s)
  2. 应用 Kubernetes 配置:
    kubectl apply -f k8s/
  3. 查看服务状态:
    kubectl get pods -n earnings-call
    kubectl get services -n earnings-call
  4. 端口转发访问服务(如需要):
    kubectl port-forward svc/frontend 3000:80 -n earnings-call
    kubectl port-forward svc/grafana 3001:3000 -n earnings-call
  5. 停止服务:
    kubectl delete -f k8s/

如何找到公司的投资者关系网站和财报音频链接

  1. Google API 搜索:使用 Google Custom Search API 搜索公司的投资者关系页面
  2. 爬虫抓取
    • 访问公司 IR 页面
    • 解析 HTML 结构,寻找包含 "earnings call"、"webcast"、"conference call" 等关键词的链接
    • 提取音频链接(通常是 MP3 或流媒体链接)
  3. 链接验证:确保抓取的链接是有效的音频文件

收藏夹管理功能

  • 添加收藏:搜索公司后,选择季度财报添加到收藏夹
  • 删除收藏:从收藏夹中移除已听或不需要的财报
  • 查看收藏:浏览所有收藏的财报,按公司或季度排序
  • 更新收藏:当有新季度财报时,自动提示更新

项目结构

Worlds-Earning-Call/
├── frontend/               # React + TypeScript 前端
│   ├── src/
│   ├── Dockerfile
│   └── ...
├── backend/                # Node.js + Express 后端 API
│   ├── src/
│   ├── Dockerfile
│   └── ...
├── crawler/                # Node.js 爬虫服务
│   ├── src/
│   ├── Dockerfile
│   └── ...
├── database/               # 数据库配置和迁移
├── grafana/                # Grafana 配置和仪表盘
├── k8s/                    # Kubernetes 配置文件
│   ├── namespace.yaml
│   ├── frontend-deployment.yaml
│   ├── backend-deployment.yaml
│   ├── crawler-deployment.yaml
│   ├── database-deployment.yaml
│   ├── grafana-deployment.yaml
│   ├── configmap.yaml
│   └── secrets.yaml
├── .github/
│   └── workflows/          # GitHub Actions 工作流
│       ├── frontend.yml
│       ├── backend.yml
│       ├── crawler.yml
│       └── deploy.yml
├── docker-compose.yml      # Docker Compose 配置(本地开发)
├── Dockerfile              # 通用 Dockerfile(可选)
└── README.md               # 项目说明文档

初始设置步骤

环境准备

  1. 安装必要工具

    • WSL2
    • Docker Desktop (支持 WSL2 集成)
    • Node.js (可选,用于本地开发)
    • kubectl (Kubernetes 命令行工具)
    • minikube 或 k3s (本地 Kubernetes 集群)
  2. 克隆项目

    git clone <项目仓库地址>
    cd Worlds-Earning-Call
  3. 配置环境变量

    • 创建 .env 文件,配置数据库连接、API 密钥等
    • 在 Kubernetes 中创建对应的 ConfigMap 和 Secret

本地开发环境(Docker Compose)

  1. 构建和启动服务

    docker-compose up -d --build
  2. 访问服务

Kubernetes 部署

  1. 启动本地 Kubernetes 集群

    # 使用 minikube
    minikube start
    
    # 或使用 k3s
    curl -sfL https://get.k3s.io | sh -
  2. 配置 kubectl 上下文

    kubectl config use-context minikube
  3. 创建命名空间和配置

    kubectl apply -f k8s/namespace.yaml
    kubectl apply -f k8s/configmap.yaml
    kubectl apply -f k8s/secrets.yaml
  4. 部署服务

    kubectl apply -f k8s/
  5. 验证部署

    kubectl get all -n earnings-call

GitHub Actions CI/CD 配置

  1. 配置 GitHub Secrets

    • DOCKER_USERNAME: Docker Hub 用户名
    • DOCKER_PASSWORD: Docker Hub 密码
    • KUBE_CONFIG: Kubernetes 配置文件(base64 编码)
  2. 手动触发部署

    • 在 GitHub 仓库的 Actions 页面
    • 选择 "Deploy to Kubernetes" workflow
    • 点击 "Run workflow"

注意事项

  • 本项目仅用于个人本地使用,不建议公开部署
  • 爬虫功能可能会受到网站反爬机制的限制,请合理使用
  • 部分公司的 IR 页面结构可能会变化,需要定期更新爬虫规则
  • 音频文件较大,请注意本地存储空间
  • Kubernetes 部署需要一定的资源,建议至少 4GB 内存
  • GitHub Actions 需要配置正确的 Secrets 才能正常工作

未来扩展

  • 支持更多音频格式和播放控制
  • 添加财报文本摘要功能
  • 集成机器学习模型,自动提取财报关键信息
  • 支持多用户系统(如果需要分享给团队使用)
  • 添加通知系统,当关注的公司发布新财报时提醒
  • 实现 Helm Chart,简化 Kubernetes 部署
  • 添加 Prometheus 监控,与 Grafana 集成
  • 支持多集群部署(如云上 Kubernetes)

联系方式

如有问题或建议,请联系:

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors