Technical writing ahead:
You'll notice that the track listings for each mix are now linked to The Hype Machine. This allows you to search an artist's catalog in-depth, and also to find songs on mixes that have been taken down.
Typing each link out by hand would have taken too long, so I turned to Grep, a pattern-matching utility for searching text.
Problem: Copying and pasting track listings from iTunes results in
Goal: Automate a reformatting of the listings, so that they read
I'd never used Grep before, so it took some finangling, but I eventually worked out a find and replace algorithm I can apply to the track listing that converts each song and artist text to search links at hypem (I used the text-editor BBEdit, which has a Grep function). The algorithm looks like this:
FIND:
(.+)\t(.+)$REPLACE WITH:
<a href=http://hypem.com/search/\1/>\1</a> — <a href=http://hypem.com/artist/\2/>\2</a>Let's break it down:
First, the parentheses separate the search into subpatterns. This is useful because I can refer to them again when I replace the text. The pattern in the first parentheses can be called using
\1; the pattern in the second with \2, and so forth.The
\t in between the two pairs of parentheses represents a tab. Luckily, iTunes inserts a tab character between the track and artist, but it's not enough of a visual separation.. will match any character. Appending + will search for any number of characters. The string after the first pattern, \t, tells the search when to stop. Thus, a search for .+\t will match any number of characters until it reaches a tab.For example, applied to the line
.+\t will match Searching for
.+\t.+$ will match $ is a line return.)So, in English, the search pattern
(.+)\t(.+)$ finds any number of characters (\1), separated by a tab, then any number of characters (\2), until a line return.Using the above example,
\1 equals \2 is http://hypem.com/search/\1/ expands into http://hypem.com/search/Time%20of%20the%20Season/1/, and http://hypem.com/artist/\2/ becomes http://hypem.com/artist/The%20Zombies/.(The Hype Machine uses slightly different URLs between general search and specific artist browsing.)
To sum up, when applied to the line
FIND:
(.+)\t(.+)$ andREPLACE WITH:
<a href=http://hypem.com/search/\1/>\1</a> — <a href=http://hypem.com/artist/\2/>\2</a> results in the usable HTML code<a href=http://hypem.com/search/Time%20of%20the%20Season/>Time of the Season</a> — <a href=http://hypem.com/artist/The%20Zombies/>The Zombies</a>, i.e.,Time of the Season — The Zombies
Now, the boring old track text has been replaced by a much more helpful link to the ever-useful Hype Machine, and I avoided several hours of coding the html by hand (hours instead spent learning some basic Grep and typing this post).
Problems with special characters:
Because I use
< and > to denote cover songs, and brackets to indicate editing, I will eventually need to write in a clause that ignores these special characters and the words within them — otherwise, there is a risk that hypem will get confused. Also, Comcast's recent DNS hijacking was affecting my ability to search with straight spaces; I may need to replace the spaces with hard-coded
%20s.