#!/usr/bin/python3 """ ==================================================================================== pixindex.py -- make+upload a simple images-viewer HTML page plus zipfile. Created: April 2015, by M. Lutz (learning-python.com), for Python 3.X. License: Provided freely, but with no warranties of any kind. Generate an HTML page to view a folder of images -- inline in the page, by links in the page, and by an automatically created and linked zipfile of the photos. Transfer the photos and generated zipfile and HTML page to a site folder by FTP. The HTML page file and zipfile are created in and uploaded from the photos dir. Configured by assignments at start of script's code below: run with no arguments. All-uppercase names here are used in HTML template (and fetched from vars() dict). Use "index.html" for HTML filename to avoid another level in the target URL. DONE: to do - automatically upload the output file and images (and zip) via FTP. DONE: to do - automatically generate zipfile of the photos, ref in HTML, upload. To do - use Pillow to create thumbnails or small versions auto for HTML inline use. UPDATES, 2022: - For a later approach, see also https://learning-python.com/thumbspage.html. - For a later zip tool, see also https://learning-python.com/ziptools.html. - Most hosts don't support unsecure FTP anymore; use scp or other FTP tools. ==================================================================================== """ import os, mimetypes, zipfile, shutil from PP4E_tools.ftptools import FtpTools # Configuration settings (change all ? and others as needed) photodir = 'pix' # where photos dir lives here on local machine sitedir = '?sdzoo2015' # where to store html, photos, zipfile on web server PAGETITLE = '?San Diego Zoos 2015' # HTML output page's title htmlname = 'index.html' # HTML page's name in photodir (or None=stdout) zipname = '?sdzoo2015.zip' # zipfile created in photodir (or None=don't make zip) ftpsite = '?_yoursite_.com' # site to copy photodir to (or None=don't ftp to site) ftpuser = input('FTP user id?') # site user id; password input via console prompt # HTML templates (change as desired) # the main page template pagetemplate = """ %(PAGETITLE)s %(HEADINSERT)s

%(PAGETITLE)s

View pictures below, %(ZIPFILEREF)s or open them individually using the following list:


%(INLINELIST)s

Generated by pixindex.py

""" # evil tracking analytics javascript code goes here... HEADINSERT = """ """ def isImageFile(filename): "detect images by file mimetype (not hardcoded set)" filetype = mimetypes.guess_type(filename)[0] # (type?, encoding?) return filetype != None and filetype.split('/')[0] == 'image' # e.g., 'image/jpeg' # Build html index/photo lists (all relative to dir) INDEXLIST = '' INLINELIST = '' for filename in os.listdir(photodir): if isImageFile(filename): INDEXLIST += '
  • %s\n' % (filename, filename) INLINELIST += '

    \n\n' % filename # Create optional zipfile of photos (in and relative to dir) if not zipname: ZIPFILEREF = '' else: zipobj = zipfile.ZipFile(os.path.join(photodir, zipname), 'w') for filename in os.listdir(photodir): if isImageFile(filename): zipobj.write(os.path.join(photodir, filename)) zipobj.close() ZIPFILEREF = ('fetch them all as a zipfile here, ' % zipname) # Create and print/save html page (in photo dir) if not htmlname: print(pagetemplate % vars()) else: output = open(os.path.join(photodir, htmlname), 'w') # default encoding print(pagetemplate % vars(), file=output) output.close() # Upload photos+zip+html folder by ftp (to web site folder) if ftpsite: # makes remote site's dir if doesn't already exist ftp = FtpTools() ftp.configTransfer(site=ftpsite, rdir=sitedir, user=ftpuser) ftp.localdir = photodir ftp.run(cleanTarget=ftp.cleanRemotes, transferAct=ftp.uploadDir, makedir=True)