{# app_url:Jinja 宏,不依赖 Python 往 context 注入;前缀来自中间件 request.state.web_url_prefix(WEB_URL_PREFIX)或 ASGI root_path #} {% macro app_url(path) -%} {%- set _p = path if path.startswith('/') else '/' ~ path -%} {%- set pre = (request.state.web_url_prefix | default('', true)) | trim -%} {%- if not pre -%} {%- set pre = request.scope.get('root_path', '') | trim -%} {%- endif -%} {{- pre ~ _p if pre else _p -}} {%- endmacro %} Telegram Scraper 控制台 {% if need_auth_banner %}
{% endif %} {% if error %}
{% endif %}

Telegram Scraper 控制台

数据概览 · 本地 SQLite 聚合(与是否在线无关)

{% if connected %} 已连接 {% else %} 未连接 {% endif %} {% if job_running %} 任务运行中 {% else %} 任务空闲 {% endif %} {% if continuous_running %} 持续抓取中 {% else %} 持续抓取关 {% endif %}

单次任务:{% if job_running %}{{ job_name }}{% else %}无{% endif %} · 已运行 {% if job_running %}{{ job_uptime }}{% else %}-{% endif %} · 持续心跳 {{ continuous_uptime if continuous_running else '-' }}

{% if console_authed %}
{% endif %}
区间内消息
按消息日期
招聘类估算
关键词 OR 匹配
累计消息(全库)
所有频道 .db
监控 / 数据频道
state 监控数 · 有库文件夹数

每日新增消息

区间内按天汇总(所有已抓取入库的频道)

每日「招聘类」消息(估算)

正文包含任一关键词即计入(非 NLP 分类)

各频道区间内消息量

横轴为消息条数,纵轴为频道显示名(来自 state 中的标题 / @用户名)