#!/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" GOOGLEPLUS_FOOTER = ''' ''' GOOGLEPLUS_BUTTON = ''' ''' FACEBOOK_LIKE = '''
''' FACEBOOK_FACEPILE = '''
''' FACEBOOK_COMMENTS = '''
''' 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
''' NOTEMONK_AD_CODE = '''

Notemonk is an exciting new way to learn your textbooks
notemonk
notemonk

Try it today.
''' NOTEMONK_FULL_DOWNLOAD = '''
To download the entire book in one nice package goto http://www.notemonk.com
''' ADBULL_AD_CODE = ''' ''' ADBULL_AD_CODE = '' CHITIKA_AD_CODE = '''
''' EXITJUNCTION_AD_CODE = ''' ''' EXITJUNCTION_AD_CODE = '' DYNAMICOXYGEN_AD_CODE = ''' ''' DYNAMICOXYGEN_AD_CODE = '' GOOGLE_SEARCH_BOX = '''
''' FOOTER = ''' %s %s %s %s %s %s %s %s ''' % (FACEBOOK_COMMENTS, GOOGLE_SEARCH_BOX, ADBULL_AD_CODE, CHITIKA_AD_CODE, EXITJUNCTION_AD_CODE, DYNAMICOXYGEN_AD_CODE, NOTEMONK_AD_CODE, GOOGLEPLUS_FOOTER) 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, NOTEMONK_AD_CODE, GOOGLE_ADS_IMAGES_BOX_CODE) def generate_main_page(data, books_dir): o = StringIO.StringIO() o.write('Download NCERT Text Books and CBSE Books %s \n' % write_tracking_scripts()) o.write('\n' % BODY_COLOR) o.write('

NCERT BOOKS and CBSE BOOKS

%s%s%s%s
\n' % (GOOGLE_SEARCH_BOX, GOOGLEPLUS_BUTTON, FACEBOOK_LIKE, FACEBOOK_FACEPILE)) 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' % FOOTER) 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 / CBSE Book: Class %s: %s %s \n' % (i, s, write_tracking_scripts())) o.write('\n' % BODY_COLOR) o.write('

Class %s: %s

%s%s
\n' % (i, s, GOOGLEPLUS_BUTTON, GOOGLE_SEARCH_BOX)) 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('
') o.write('%s\n' % FOOTER) 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/CBSE Book: Class %s: %s: %s %s \n' % (i, s, b, write_tracking_scripts())) o.write('\n' % BODY_COLOR) o.write('

Class %s: %s: %s

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

%s

NCERT/CBSE class %s %s book %s
') o.write(NOTEMONK_FULL_DOWNLOAD) 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('
') o.write('%s\n' % FOOTER) 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)