#!/usr/bin/env python import os import os.path import glob import sys import re import pprint import StringIO BODY_COLOR = "#B1B18B" SIDEBAR_COLOR = "#998066" MAINAREA_COLOR = "#CCCC99" HTACCESS=''' RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?ncertbooks.prashanthellina.com/.*$ [NC] RewriteRule \.(PDF|pdf)$ http://ncertbooks.prashanthellina.com/ [R,L] ''' GOOGLE_ANALYTICS_CODE = ''' ''' STATCOUNTER_CODE = ''' ''' GOOGLE_ADS_IMAGES_BOX_CODE = '''
''' GOOGLE_HEADER_AD_CODE = ''' ''' WORDZA_AD_CODE = '''

Preparing for GRE, SAT or CAT?
Use Wordza to quickly boost your vocabulary.
wordza
''' def sort_by_first_number(items): BIG_NUMBER = 1000 numbered_items = [] for item in items: number = re.findall('^.*?([0-9]+)', item) if not number: numbered_items.append((BIG_NUMBER, item)) else: numbered_items.append((int(number[0]), item)) numbered_items.sort() items = [item for number, item in numbered_items] return items def sort_book_parts(parts): parts = parts[:] contents_part = [(i, p) for i, p in enumerate(parts) if p.lower().startswith('co')] if len(contents_part) == 1: index, contents_part = contents_part[0] del parts[index] else: contents_part = None ch_parts = [(i, p) for i, p in enumerate(parts) if p.lower().startswith('ch')] sorted_ch_parts = sort_by_first_number([p for i,p in ch_parts]) for index, part in ch_parts: parts[index] = None parts = [p for p in parts if p is not None] parts.sort() sorted_book_parts = [] if contents_part: sorted_book_parts.append(contents_part) sorted_book_parts.extend(sorted_ch_parts) sorted_book_parts.extend(parts) return sorted_book_parts def load_structure(books_dir): book_dirs = glob.glob(os.path.join(books_dir, '*')) books_dirs = [b for b in book_dirs if not b.endswith('.html')] classes = {} for book_dir in book_dirs: book_base_name = os.path.basename(book_dir) book_info = re.findall('^class_([0-9]+)\.(.*)\.(.*?)$', book_base_name) if not book_info: continue class_no, subject, book_name = book_info[0] class_no = int(class_no) class_data = classes.get(class_no, {}) subject_data = class_data.get(subject, {}) book_data = subject_data.get(book_name, {}) pdfs = glob.glob(os.path.join(book_dir, '*.[pP][dD][fF]')) pdfs = [os.path.basename(p) for p in pdfs] pdfs = sort_book_parts(pdfs) book_data['pdfs'] = pdfs subject_data[book_name] = book_data class_data[subject] = subject_data classes[class_no] = class_data return classes def write_tracking_scripts(): return '%s\n%s' % (GOOGLE_ANALYTICS_CODE, STATCOUNTER_CODE) def write_sidebar(): return '\ \ \ \ \ \
%s










%s










%s
' % (SIDEBAR_COLOR, GOOGLE_ADS_IMAGES_BOX_CODE, WORDZA_AD_CODE, GOOGLE_ADS_IMAGES_BOX_CODE) def generate_main_page(data, books_dir): o = StringIO.StringIO() o.write('Download NCERT Text Books %s \n' % write_tracking_scripts()) o.write('\n' % BODY_COLOR) o.write('

NCERT BOOKS

\n') o.write('' % MAINAREA_COLOR) o.write('' % (write_sidebar())) o.write('') o.write('
%s') o.write('%s' % (GOOGLE_HEADER_AD_CODE)) for i in range(12, 0, -1): o.write('
\n') o.write('%s
\n' % (i)) subjects = data[i].keys() subjects.sort() subject_links = [] for s in subjects: subject_links.append('%s\n' % (i, s, s)) o.write(' | '.join(subject_links)) o.write('

\n') o.write('
') o.write('%s\n' % (WORDZA_AD_CODE)) html = o.getvalue() fname = os.path.join(books_dir, 'index.html') open(fname, 'wb').write(html) def generate_subject_pages(data, books_dir): for i in range(1, 13): subjects = data[i] for s in subjects: o = StringIO.StringIO() books = subjects[s].keys() o.write('Download NCERT Book: Class %s: %s %s \n' % (i, s, write_tracking_scripts())) o.write('\n' % BODY_COLOR) o.write('

Class %s: %s

\n' % (i, s)) o.write('' % MAINAREA_COLOR) o.write('' % (write_sidebar())) o.write('') o.write('
%s') o.write('%s' % (GOOGLE_HEADER_AD_CODE)) books.sort() for b in books: book_dir = 'class_%s.%s.%s' % (i, s, b) o.write('
\n') o.write('\n' % (book_dir)) o.write('

%s

NCERT class %s %s book %s\n' % (b, book_dir, i, s, b)) o.write('
\n') o.write('
\n') o.write('
') o.write('%s\n' % (WORDZA_AD_CODE)) html = o.getvalue() fname = os.path.join(books_dir, '%s_%s.html' % (i, s)) open(fname, 'wb').write(html) def generate_book_pages(data, books_dir): for i in range(1, 13): subjects = data[i] for s in subjects: books = subjects[s] for b in books: o = StringIO.StringIO() book_dir = 'class_%s.%s.%s' % (i, s, b) o.write('Download NCERT Book: Class %s: %s: %s %s \n' % (i, s, b, write_tracking_scripts())) o.write('\n' % BODY_COLOR) o.write('

Class %s: %s: %s

\n' % (i, s, b)) o.write('

%s

NCERT class %s %s book %s' % (b, i, s, b)) o.write('


') o.write('' % MAINAREA_COLOR) o.write('' % (write_sidebar())) o.write('') o.write('
%s') o.write('%s' % (GOOGLE_HEADER_AD_CODE)) pdfs = books[b]['pdfs'] for p in pdfs: p_name = '.'.join(p.split('.')[:-1]) o.write('
\n') o.write('\n' % (p)) o.write('

%s

NCERT class %s %s book %s\n' % (p_name, p, i, s, b)) o.write('
\n') o.write('
\n') o.write('
') o.write('%s\n' % (WORDZA_AD_CODE)) html = o.getvalue() fname = os.path.join(books_dir, book_dir, 'index.html') open(fname, 'wb').write(html) def generate_htaccess(books_dir): open(os.path.join(books_dir, '.htaccess'), 'w').write(HTACCESS) def generate_navigation_pages(books_dir): data = load_structure(books_dir) generate_main_page(data, books_dir) generate_subject_pages(data, books_dir) generate_book_pages(data, books_dir) generate_htaccess(books_dir) if __name__ == '__main__': if len(sys.argv) < 2: print 'usage: %s ' % (sys.argv[0]) sys.exit(2) books_dir = sys.argv[1] generate_navigation_pages(books_dir)