Created
September 13, 2010 10:11
-
-
Save tbje/577088 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# http://blog.trondbjerkestrand.no/post/1114624297/automated-kindle-epub-delivery | |
# navigate to home directory | |
cd /home/[username]/aftenposten | |
url=[find this when signing up to beta test] | |
kindleEmail=[username]@Kindle.com # or [username]@free.kindle.com | |
# date as argument or todays date | |
if [ $# -eq 0 ]; then | |
date=`date '+%Y%m%d'` | |
else | |
date=$1 | |
fi | |
# only proceed if not already downloaded | |
if [ ! -f aftenposten_${date}.epub ]; then | |
# download file, proceed only if available | |
if `wget ${url}/aftenposten_${date}.epub`; then | |
unzip -d aftenposten_$date aftenposten_$date.epub | |
scala -cp bin FixAftenposten aftenposten_$date/metadata.opf aftenposten_$date/toc.ncx aftenposten_$date/content/contents.html | |
cd aftenposten_$date | |
zip -r ../aftenposten_${date}_kindle.epub * | |
cd .. | |
bin/kindlegen aftenposten_${date}_kindle.epub | |
mutt -a aftenposten_${date}_kindle.mobi -s Aftenposten ${kindleEmail} < "." | |
rm -rf aftenposten_$date aftenposten_${date}_kindle.epub aftenposten_${date}_kindle.mobi | |
fi | |
fi | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* http://blog.trondbjerkestrand.no/post/1114624297/automated-kindle-epub-delivery */ | |
import scala.xml._ | |
import scala.xml.transform._ | |
import scala.xml.factory.XMLLoader | |
import javax.xml.parsers.SAXParser | |
/* Avoid loading dtd for contents.xml */ | |
object MyXML extends XMLLoader[Elem] { | |
override def parser: SAXParser = { | |
val f = javax.xml.parsers.SAXParserFactory.newInstance() | |
f.setNamespaceAware(false) | |
f.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false) | |
f.newSAXParser() | |
} | |
} | |
/* Arguments: Location of metadata.opf, toc.ncx, contents.html */ | |
object FixAftenposten { | |
def main(args: Array[String]) { | |
val metadata = XML.load(args(0)) | |
val toc = XML.load(args(1)) | |
val items = (metadata \\ "item").map(x=>(x \ "@href" text, x \ "@id" text)).toMap | |
val spine = (toc \\ "content").map(_ \ "@src" text).map(items(_)).map(x=>(<itemref idref={x}/>)) | |
object ReplaceSpine extends RewriteRule { | |
override def transform(n: Node): Seq[Node] = n match { | |
case Elem(prefix, n @ "spine", attribs, scope, a @ _*) => | |
Elem(prefix, n, attribs, scope, a(1)++spine :_*) | |
case other => other | |
} | |
} | |
object AftenpostenTransformer extends RuleTransformer(ReplaceSpine) | |
XML.save(args(0), AftenpostenTransformer(metadata), "UTF-8", true, null) | |
val content = MyXML.load(args(2)) | |
object ReplaceIndex extends RewriteRule { | |
override def transform(n: Node): Seq[Node] = n match { | |
case Elem(prefix, n @ "table", attribs, scope, children @ _*) => | |
(<ul>{children \\ "li"}</ul>) | |
case other => other | |
} | |
} | |
object AftenpostenIndexTransformer extends RuleTransformer(ReplaceIndex) | |
XML.save(args(2), AftenpostenIndexTransformer(content), "UTF-8", true, null) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment