<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Game g = new Game(); &#187; groovy drums music programming</title>
	<atom:link href="http://thomasschweitzer.com/tag/groovy-drums-music-programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://thomasschweitzer.com</link>
	<description>Nerdy thoughts</description>
	<lastBuildDate>Tue, 12 Apr 2011 13:33:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Groovy drumming</title>
		<link>http://thomasschweitzer.com/2008/06/23/groovy-drumming/</link>
		<comments>http://thomasschweitzer.com/2008/06/23/groovy-drumming/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 15:54:35 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[music]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[groovy drums music programming]]></category>

		<guid isPermaLink="false">http://www.cyblex.at/blog/?p=83</guid>
		<description><![CDATA[Recently I bought myself a cool Roland V-Drum set. Now I stumbled across freedrumlessons.com, a site with dozens of (you guessed it) free drum lessons on video. In order to avoid downloading all video files manually, I wrote a little Groovy script. It greps the overview page for all links to sub-pages, and then scrapes [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I bought myself a cool <a href="http://www.roland.com/V-Drums/products/index.html">Roland V-Drum</a> set.</p>
<p>Now I stumbled across <a href="http://www.freedrumlessons.com/">freedrumlessons.com</a>, a site with dozens of (you guessed it) free drum lessons on video.</p>
<p>In order to avoid downloading all video files manually, I wrote a little <a href="http://www.groovy.org/">Groovy</a> script. It greps the overview page for all links to sub-pages, and then scrapes all the sub-pages for MP4-files (so I can put them on my iPod later).</p>
<p>I can&#8217;t imagine what it would have been like using plain Java&#8230;</p>
<p><span id="more-125"></span></p>
<p>Here&#8217;s the code:</p>
<p>[sourcecode language='java']<br />
println (&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8217;)<br />
def filesToDownload = []<br />
def url = &#8216;http://www.freedrumlessons.com/drum-lessons&#8217;</p>
<p>def slurper = new XmlSlurper(new org.ccil.cowan.tagsoup.Parser())</p>
<p>def html = slurper.parse(url)<br />
def lists = html.&#8217;**&#8217;.findAll { it.name() == &#8216;li&#8217;}</p>
<p>def links = lists.a*.&#8217;@href&#8217;<br />
links.removeAll([''])</p>
<p>def i = 0</p>
<p>links.each {<br />
	def scrapeurl = &#8220;http://www.freedrumlessons.com${it}&#8221;<br />
	println &#8220;Scraping ${scrapeurl}&#8230;&#8221;<br />
	def innerSlurper = new XmlSlurper(new org.ccil.cowan.tagsoup.Parser())<br />
	def innerHtml = innerSlurper.parse(scrapeurl)</p>
<p>	def files = innerHtml.depthFirst().grep{ it.name() == &#8216;a&#8217; &#038;&#038; it.@href.toString().endsWith(&#8216;.mp4&#8242;) }.&#8217;@href&#8217;</p>
<p>	files.each {<br />
		filesToDownload += it.toString()<br />
		println (&#8220;Added ${it}&#8221;)<br />
	}<br />
}</p>
<p>println (&#8216; ** &#8216;)</p>
<p>filesToDownload.each {<br />
	println (&#8220;Downloading ${it}&#8221;)<br />
	def filename = it.tokenize(&#8216;/&#8217;)[-1]<br />
	def infile = new FileOutputStream(filename)<br />
	def outfile = new BufferedOutputStream(infile)<br />
	outfile << new URL(it).openStream()<br />
	outfile.close()<br />
}</p>
<p>println &#8220;Finished&#8221;<br />
[/sourcecode]</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasschweitzer.com/2008/06/23/groovy-drumming/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

