User:Birgit Bachler/ass02

From XPUB & Lens-Based wiki

Epub Assignment 2: 4chan picture-book + embedded fonts: here

It combines a feed from Popsugar with a 4chan image channel and uses the Teenage Girl.ttf:

User Birgit Bachler ass02 Screenshot epub.png


Code:

#!/usr/bin/python
import time, os, re
import urllib, urllib2

# What do we want to get
threadurl = "http://boards.4chan.org/jp"
# Who are we?
header = {"User-agent": "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.7) Gecko/20100106 Ubuntu/9.10 (karmic) Firefox/3.5.7"}

# Make the request and store the result
request = urllib2.Request(url=threadurl, headers=header)
response = urllib2.urlopen(request)

imgthread = response.read()

# find all the image URLs
imgurl = re.compile("http://\w+\.4chan\.org/\w+/src/\d+\.(?:jpg|jpeg|png|gif|svg)")
imgurls = imgurl.findall(imgthread)

# We need a folder to store the images
targetfolder = "images"
if not os.path.isdir(targetfolder):
    os.mkdir(targetfolder)

# We read through the list of Image URLs and download them in the directory
for url in list(set(imgurls)):
    filename = url.split('/')[-1]
    print "downloading " + filename
    urllib.urlretrieve(str(url), targetfolder + "/" + filename)
    time.sleep(0.3)





import feedparser

sugar = feedparser.parse("http://feeds.feedburner.com/popsugar")




import shutil

# Remove previous epub files
if os.path.isdir("/tmp/epub"):
    shutil.rmtree("/tmp/epub")

# Copy ePub skeleton
shutil.copytree("epub-raw-files", "/tmp/epub")

# Copy images
for image in os.listdir("images"):
    shutil.copyfile("images/" + image, "/tmp/epub/OEBPS/images/" + image)
#    print image

### Update the container's file listing
# Create item list
# Create item list
imageitems = ""
for image in os.listdir("/tmp/epub/OEBPS/images/"):
    if image != "cover.png":
        imageitems += '<item id="' + image + '" href="images/' + image  +'" media-type="image/' + image.split('.')[-1]  + '"/>'



contentitems = ""
for (i, image) in zip(sugar.entries, os.listdir("/tmp/epub/OEBPS/images/")):
    if image != "cover.png":
        contentitems += '<p><h2>' + i["title"].replace("&", "&amp;").encode("utf-8")+'</h2><img src ="images/' + image + '"/></p>'

# Add images to listing
opf = open("/tmp/epub/OEBPS/content.opf", "w")

content = """<?xml version='1.0' encoding='utf-8'?>
<package xmlns="http://www.idpf.org/2007/opf" 
            xmlns:dc="http://purl.org/dc/elements/1.1/" 
            unique-identifier="bookid" version="2.0">
  <metadata>
    <dc:title>Here we are</dc:title>
    <dc:creator>Birgit</dc:creator>
    <dc:identifier id="bookid">urn:uuid:12345</dc:identifier>
    <dc:language>en-US</dc:language>
    <meta name="cover" content="cover-image" /> 
  </metadata>
  <manifest>
    <item id="ncx" href="toc.ncx" media-type="text/xml"/>
    <item id="cover" href="title.html" media-type="application/xhtml+xml"/>
    <item id="content" href="content.html" media-type="application/xhtml+xml"/>
    <item id="cover-image" href="images/cover.png" media-type="image/png"/>
    <item id="css" href="stylesheet.css" media-type="text/css"/>
    <item id="myfont" href="teenage.ttf" media-type="application/x-font-truetype"/>
""" + imageitems + """
  </manifest>
  <spine toc="ncx">
    <itemref idref="cover" linear="no"/>
    <itemref idref="content"/>
  </spine>
  <guide>
    <reference href="title.html" type="cover" title="Cover"/>
  </guide>
</package>"""

opf.write(content)

### Place the images in the book
# Create item list


# Add images in main html file
html = open("/tmp/epub/OEBPS/content.html", "w")

content = """<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Here we go:</title>
    <link type="text/css" rel="stylesheet" media="all" href="stylesheet.css" />
  </head>
  <body>
    <h1>What's on today:</h1>
    <div style="text-align:center">""" + contentitems + """</div>
  </body>
</html>"""

html.write(content)

print "done - container ready"

system "cd /tmp/epub"


Epub Assignment 1: ecub-book out of essay here

Epub Hacking Session 1 outcome here

Attachments