Welcome to my South Nanyang Charging - Gulou or South Nanyang Charging - Xianlin.
Everything started one evening in September when I couldn't find a charging station...
In fact, there was already a South Nanyang Charging webpage before that: https://charge.zhuxh.net/

However, personally, I felt it still lacked something. It only showed at a glance which spots were free, but due to the insufficient number of charging stations, when I wanted to charge, I’d often see all red lights—or the few green ones were far away.
So I decided to build my own solution that could display estimated remaining time, making it easier for me to arrive early and secure a spot and outperform you
Backend Data Crawling
Crawling is quite simple for me—after all, I've built several crawler projects before. Let's fire up Reqable!
Get Charging Station IDs
First, filter through the requests to identify those belonging to Nanjing University Xianlin Campus and extract the station_id. This step required manual copying. The specific IDs are as follows:
Get Outlet IDs for Each Charging Station
The previous step gave us 33 charging stations—manual entry was manageable. But manually copying 302 outlet IDs? Please, spare me.
As of June 16, 2025: Why do so many newly added chargers have just two outlets per station? I spent ages copying station_ids today. Currently, Xianlin Campus has 112 charging stations and 724 outlets.
We can retrieve each station’s information—including outlet IDs—from f'https://wemp.issks.com/charge/v1/outlet/station/outlets/{station_id}'.
Finally, Retrieve Status for Each Outlet
Now that we have each station’s outletNo, we can query the status of every outlet using f'https://wemp.issks.com/charge/v1/charging/outlet/{outletNo}'!
Example response:
Actually, most of this data is unnecessary. I extracted only the outlet name, estimated remaining time, used time, status code (idle, faulty, minute-based billing, fixed amount mode), and error messages. I also calculated an estimated available time for easy frontend display (since my frontend skills are terrible). Here’s the code:
Fortunately, retrieving status doesn’t require a token, and each station’s outlets remain fixed. To update data later, simply re-run this step using existing outletNo values.
Data Post-Processing
When deploying locally, I used multithreading (processing 302 entries takes about 2 seconds—no rate limiting triggered). I updated data on the backend server every minute.
To make it easier for the frontend to consume, I sorted the data by remaining time and reorganized charging stations from Unit xx to Building xx:
First Version Frontend
Being a frontend novice, my first version used Python-generated HTML. >︿<
Here’s the laughable result—please enjoy.
And the interface was incredibly basic. Still, I managed to get GPT to generate some JavaScript for filtering sites.

Second Version Frontend
The so-called second version was just a few lines of CSS to rescue this UI.

Third Version Frontend
I began working on my new personal homepage. Since Mix Space supports Markdown with JavaScript, I hosted /charge.html under my personal site and improved the filtering function—updating URL parameters during filtering so that refreshing retains the user’s last selection.

Fourth Version Frontend
Since the first version used tables, as seen in the image above, the mobile experience was truly awful. So I decided to completely rebuild the UI and added a summary table at the beginning for better planning of charging destinations.

All backend and frontend code is available in the GitHub repository below. Feel free to use it, but please follow the MIT license and retain my copyright notice.
Minor Updates
- 2024-12-01: Added Gulou Campus.
- 2025-01-07: Suddenly discovered charging now requires top-up and charges by the minute. Unacceptable. Updated sorting to reverse order by used time. Based on Shankan Charging’s documentation, the maximum time is 480 minutes—still useful for estimating which chargers are nearing end.
- 2025-02-22: Minute-based billing users can now select pre-charged amounts, allowing estimation of expected availability. However, since some users choose higher amounts to fully charge, and due to precision limitations in returned values, results are approximate. Fixed-amount mode could theoretically be estimated, but without direct access to power data in the API, it’s not implemented yet.
- 2025-06-16: Added multiple new charging points at both Gulou and Xianlin campuses. (Outlet count change: Gulou 148 → 308, Xianlin 302 → 724)
- 2025-06-22: System appears to cap charging at 480 minutes—adjusted remaining time estimates accordingly.
- 2025-09-09: Removed historical charging record feature.
- 2025-10-11: Updated charging stations.