How spiritlhls/speedtest.cn-cn-id works
1. Repository role
- This repo is primarily a data distribution and automation repository, not a traditional application. Its main artifacts are CSV files containing updated speedtest node IDs for speedtest.cn.
2. Primary outputs
- The top-level CSVs are the core deliverables:
- CN.csv, HK.csv, JP.csv, SG.csv, TW.csv
- mobile.csv, telecom.csv, unicom.csv
- These likely represent regional and ISP-oriented node lists used by the accompanying测速 script.
3. Data domain
- The README makes clear the dataset is about speedtest server IDs and endpoints from speedtest.cn.
- It emphasizes coverage of:
- mainland China regions/operators
- Hong Kong, Taiwan, Japan, Singapore
- The repo is curated to support automated selection of low-latency nodes for testing.
4. Update model
- The data is refreshed daily.
- The README says the node collection is produced by a closed-source crawler and then automatically pushed here.
- So the public repository is the publishing layer; the crawler itself is outside this tree.
5. Automation boundary
- The .github/workflows/ directory is the main operational subsystem in this repo.
- Workflows present:
- main.yml
- daily-update-private.yml
- sync-to-public.yml
- These likely orchestrate scrape/update/sync activities, with at least one private source repository in the loop.
6. Private-to-public sync flow
- The naming strongly suggests a two-stage pipeline:
- a private repo/workflow updates the CSV data
- a sync workflow mirrors selected results into this public repo
- This is the main trust boundary: raw collection and possibly more complete internal data stay private, while a subset is published here.
7. Consumer-facing flow
- End users do not interact with an API or service in this repo.
- They consume the CSVs directly or via the referenced shell script URLs in the README, which use the published data as input for automated server selection.
8. Operational dependency
- GitHub Actions is the only visible runtime/infrastructure component in the repo.
- There is no application server, database, or containerized service defined here.
- The architecture is therefore a scheduled CI/CD-style data pipeline rather than a deployable app.
9. Region/ISP partitioning
- The CSV naming implies the dataset is partitioned by two axes:
- geography: CN/HK/JP/SG/TW
- carrier type: mobile/telecom/unicom
- That partitioning matters architecturally because downstream scripts can choose between broad regional lists or operator-specific lists.
10. Public data product
- The repo’s published state is effectively a versioned snapshot of speedtest node metadata.
- The README’s “data update time” and server count indicate the CSVs are meant to be the authoritative, human-visible output of the pipeline.
11. What is not in this repo
- There is no visible crawler code, parser logic, scheduler logic beyond workflow definitions, or business application layer.
- For an architecture diagram, the important omission is that the data acquisition engine is external/private, while this repo is the distribution endpoint.
12. Best diagram framing
- A clear diagram would show:
- speedtest.cn as the upstream data source
- a private crawler/collector as the ingestion layer
- GitHub Actions as the automation/sync layer
- this repo’s CSV files as the public dataset layer
- shell-based consumer scripts as downstream consumers
Main entry points: daily-update-private.yml Daily update · sync-to-public.yml Sync public · main.yml Main flow · README.md README
Components 19
Upstream source
External speedtest.cn server metadata collected outside this public repo.
- speedtest.cn · Upstream source of server IDs and endpoints.
- Private crawler · Private collection layer that scrapes and prepares node data before publishing.
Automation
GitHub Actions workflows that refresh and publish the dataset.
- GitHub Actions · Repository automation runtime used to update and sync data.
- Main flow · Primary workflow entrypoint for repository automation.
.github/workflows/main.yml - Daily update · Scheduled private-source refresh workflow.
.github/workflows/daily-update-private.yml - Sync public · Mirrors selected results into this public repository.
.github/workflows/sync-to-public.yml
Public dataset
Versioned CSV outputs committed to this repository.
- CSV snapshot · Versioned public snapshot of speedtest node metadata.
- Regional CSVs · Country/region partitions: CN, HK, JP, SG, and TW.
- ISP CSVs · Carrier partitions: mobile, telecom, and unicom.
- CN.csv · Mainland China node list.
CN.csv - HK.csv · Hong Kong node list.
HK.csv - JP.csv · Japan node list.
JP.csv - SG.csv · Singapore node list.
SG.csv - TW.csv · Taiwan node list.
TW.csv - mobile.csv · Mobile operator node list.
mobile.csv - telecom.csv · Telecom operator node list.
telecom.csv - unicom.csv · Unicom operator node list.
unicom.csv
Consumers
Human and shell-script users that read the published CSVs.
- README · Explains the dataset, refresh cadence, and usage.
README.md - Shell users · Scripts and users that consume the CSVs for node selection.
Connections 20
- speedtest.cn → Private crawler: serve metadata · Upstream server listings are collected by the private crawler.
- Private crawler → Daily update: prepare update · Collected data is fed into the scheduled refresh workflow.
- Daily update → GitHub Actions: run on CI · Workflow executes in GitHub Actions.
- GitHub Actions → Sync public: trigger sync · Automation publishes selected results to the public repo.
- Sync public → CSV snapshot: publish · Sync workflow updates the public CSV snapshot.
- CSV snapshot → Regional CSVs: split by region · Public snapshot is partitioned into regional lists.
- CSV snapshot → ISP CSVs: split by carrier · Public snapshot is partitioned into carrier-specific lists.
- Regional CSVs → CN.csv: contains · Regional dataset includes mainland China nodes.
- Regional CSVs → HK.csv: contains · Regional dataset includes Hong Kong nodes.
- Regional CSVs → JP.csv: contains · Regional dataset includes Japan nodes.
- Regional CSVs → SG.csv: contains · Regional dataset includes Singapore nodes.
- Regional CSVs → TW.csv: contains · Regional dataset includes Taiwan nodes.
- ISP CSVs → mobile.csv: contains · Carrier dataset includes mobile nodes.
- ISP CSVs → telecom.csv: contains · Carrier dataset includes telecom nodes.
- ISP CSVs → unicom.csv: contains · Carrier dataset includes unicom nodes.
- README → Shell users: documented for · README explains how consumers use the published CSVs.
- Shell users → Regional CSVs: read · Consumers choose regional lists for testing.
- Shell users → ISP CSVs: read · Consumers choose carrier lists for testing.
- Main flow → Daily update: orchestrates · Main workflow coordinates the update path.
- Main flow → Sync public: orchestrates · Main workflow coordinates public synchronization.