For a while I used a batch one-liner to generate the image links on the 88x31 button page. If you have a directory full of images you want to show via HTML this is a quick and easy way to do it from the command line.
for %i in (*.*) do echo ^<a href="//%~ni.neocities.org/"^>^<img src="/images/buttons/neocitizens/%i" alt="%~ni"/^>^</a^>>> all.html
Last month I decided I wanted to start preserving multiple buttons for each citizen, so I started naming extra buttons citizen_2.gif, citizen_3.gif, and so on. I couldn't find a sexy batch one-liner for url correction, so I corrected the urls after the fact with some regex find/replace:
Find :-[0-9]+.neocities.org Replace: .neocities.org
Getting the citizen population was a bit fiddly. I had a second operation where I isolate the usernames then remove the duplicate lines:
for %i in (*.*) do echo (%~ni) >> usernames.html
Find/replace: (.*?)$\s+?^(?=.*^\1$)
After I learned to use Jinja2 templates and realized how easy that was, I decided to create a template for the button page. Big improvement.
<h2>NeoCitizens, population: {{population}}</h2>
{% for citizen, button_list in buttons.items() %}
{% for button in button_list %}
<a href="//{{citizen}}.neocities.org"> <img src="/images/buttons/neocitizens/{{button}}" alt="{{citizen}}"/> </a>
{% endfor %}
{% endfor %}
For the data, I use the neocitizen name as a key and the value is a list of buttons. This lets me have a citizen population count by simply counting the keys.
# 88x31-builder.py
import os
from jinja2 import Environment, FileSystemLoader
import datetime
def inject_today_date():
return datetime.date.today()
def print_html_doc():
j2_env = Environment(loader=FileSystemLoader('cyber'),trim_blocks=True)
template = j2_env.get_template('88x31_template.j2')
rendered_template = template.render(buttons=buttons,population=population,today_date=today_date)
with open('cyber/88x31.html', 'w') as f:
f.write(rendered_template)
buttons = {}
button_path = "images/buttons/neocitizens/"
for file in os.listdir(button_path):
if os.path.isfile(os.path.join(button_path, file)):
if "_" in file:
s = file.split("_")
else:
s = file.split(".")
subdomain = s[0]
if subdomain in buttons.keys():
buttons[subdomain].append(file)
else:
buttons[subdomain] = [file]
population = len(buttons.keys())
today_date = inject_today_date()
print_html_doc()
It probably saves me 5 to 10 minutes each time I update the archive.