QUOTE (reconseed @ Jun 13 2007, 19:11)

There is another thread that I am a part of on this forum but everytime that I try to install on of the zip files that it tels me to download, it says my iMac cant open the file and that i have to choose a path.
Oops, that must have been me.
I guess social networking sites might be a better way to skin this cat as you say.
Maybe some of these things are problematic, because iTunes itself changes. I followed up on my other suggestion to you, had a look through Doug's AppleScripts for iTunes and
found a script that's supposed to write an HTML table from a playlist. However, when I ran it, it failed.
I did get success with simply exporting the library listing and transforming it with XSLT. In iTunes go to
File > Export Library and it will export the file as XML.
I don't know if you're bothered to do this, but by googling I found an xsl stylesheet that can be associated with that to give a readable page.
http://www.movable-type.co.uk/scripts/itunes-albumlist.htmlTo display the library listing you put the exported file,
Library.xml, in the same folder as two others and double-click one of those--the "wrapper" file--to display it in your browser.
The two files you'd need are
albumList.xsl, which is the stylesheet and
albumList.xml, which is the wrapper which applies the stylesheet to the XML library listing. I had to change the name of what's referenced in the wrapper--that was all.
Here's albumList.xsl:
CODE
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- (c) Chris Veness 2005-2006 -->
<xsl:output method="html" encoding="UTF-8" indent="yes"/>
<!-- match the wrapper and apply templates to the <incl> xml file -->
<xsl:template match="/wrapper">
<xsl:apply-templates select="document(incl/@file)/plist/dict/dict"/>
</xsl:template>
<xsl:key name="songsByGenre" match="dict" use="string[preceding-sibling::key[1]='Genre']"/>
<xsl:key name="songsByAlbum" match="dict" use="string[preceding-sibling::key[1]='Album']"/>
<xsl:template match="dict">
<html>
<head>
<title>iTunes Album Listing</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<style type='text/css'> td { vertical-align: top; padding-right: 1em; } </style>
</head>
<body>
<table>
<xsl:for-each select="dict[generate-id(.)=generate-id(key('songsByGenre',string)[1])]">
<xsl:sort select="string[preceding-sibling::key[1]='Genre']"/>
<xsl:for-each select="key('songsByGenre',string)[1]">
<xsl:call-template name="albumsInGenre">
<xsl:with-param name="genre" select="string[preceding-sibling::key[1]='Genre']"/>
</xsl:call-template>
</xsl:for-each>
</xsl:for-each>
<!-- totals -->
<tr>
<td colspan='4' style='color: gray'><b>Total</b></td>
<td style='color: gray' align='right'><xsl:call-template name="iPodTimeTotal"/></td>
<td style='color: gray' align='right'><xsl:call-template name="iTunesTimeTotal"/></td>
</tr>
<tr>
<td colspan='4'> </td>
<td style='color: gray' align='right'><xsl:call-template name="iPodSizeTotal"/></td>
<td style='color: gray' align='right'><xsl:call-template name="iTunesSizeTotal"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
<xsl:template name="albumsInGenre">
<xsl:param name="genre"/>
<tr> <!-- genre header -->
<td colspan='4'><b><xsl:value-of select="$genre"/></b></td>
<td align='right' style='color: gray'><i>iPod</i></td>
<td align='right' style='color: gray'><i>iTunes</i></td>
</tr>
<xsl:variable name="song" select="/plist/dict/dict/dict"/>
<xsl:for-each select="$song[generate-id(.)=
generate-id(key('songsByAlbum',string[preceding-sibling::key[1]='Album'])[1])]">
<xsl:sort select="string[preceding-sibling::key[1]='Album']"/>
<xsl:for-each select="key('songsByAlbum',string[preceding-sibling::key[1]='Album'])
[string[preceding-sibling::key[1]='Genre']=$genre]
[1]">
<!-- for albums on iPod only, add
[not(true[preceding-sibling::key[1]='Disabled'])] -->
<tr>
<td> </td>
<td><xsl:call-template name="album"/></td>
<td><xsl:call-template name="artist"/></td>
<td align='right'><xsl:call-template name="iPodTimeAlbum"/></td>
<td align='right'><xsl:call-template name="iTunesTimeAlbum"/></td>
</tr>
</xsl:for-each>
</xsl:for-each>
<tr><td colspan='6'> </td></tr> <!-- space between genres -->
</xsl:template>
<xsl:template name="album">
<xsl:value-of select="string[preceding-sibling::key[1]='Album']"/>
</xsl:template>
<xsl:template name="artist">
<xsl:choose>
<xsl:when test="true[preceding-sibling::key[1]='Compilation']">
<i>Compilation</i>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="string[preceding-sibling::key[1]='Artist']"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="iPodTimeAlbum">
<xsl:variable name="tracksInAlbum"
select="key('songsByAlbum',string[preceding-sibling::key[1]='Album'])"/>
<xsl:variable name="t"
select="sum($tracksInAlbum/integer[preceding-sibling::key[1]='Total Time']
[not(../true[preceding-sibling::key[1]='Disabled'])])"/>
<xsl:call-template name="formatTime">
<xsl:with-param name="t" select="$t"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="iTunesTimeAlbum">
<xsl:variable name="tracksInAlbum"
select="key('songsByAlbum',string[preceding-sibling::key[1]='Album'])"/>
<xsl:variable name="t"
select="sum($tracksInAlbum/integer[preceding-sibling::key[1]='Total Time'])"/>
<xsl:call-template name="formatTime">
<xsl:with-param name="t" select="$t"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="iPodTimeTotal">
<xsl:variable name="t" select="sum(dict/integer[preceding-sibling::key[1]='Total Time']
[not(../true[preceding-sibling::key[1]='Disabled'])])"/>
<xsl:call-template name="formatTime">
<xsl:with-param name="t" select="$t"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="iTunesTimeTotal">
<xsl:variable name="t" select="sum(dict/integer[preceding-sibling::key[1]='Total Time'])"/>
<xsl:call-template name="formatTime">
<xsl:with-param name="t" select="$t"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="iPodSizeTotal">
<xsl:variable name="s" select="sum(dict/integer[preceding-sibling::key[1]='Size']
[not(../true[preceding-sibling::key[1]='Disabled'])])"/>
<xsl:value-of select="floor($s div (1000000)) div 1000"/>GB
</xsl:template>
<xsl:template name="iTunesSizeTotal">
<xsl:variable name="s" select="sum(dict/integer[preceding-sibling::key[1]='Size'])"/>
<xsl:value-of select="floor($s div (1000000)) div 1000"/>GB
</xsl:template>
<xsl:template name="formatTime">
<xsl:param name="t"/>
<xsl:if test="$t != 0">
<xsl:variable name="h" select="floor(($t div (1000*60*60)))"/>
<xsl:variable name="m" select="floor(($t div (1000*60)) mod 60)"/>
<xsl:variable name="s" select="floor(($t div 1000) mod 60)"/>
<xsl:if test="$h != 0"><xsl:value-of select="$h"/>:</xsl:if>
<xsl:value-of select="format-number($m,'00')"/>:<xsl:value-of select="format-number($s,'00')"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Here's the wrapper -- albumList.xml:
CODE
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="albumList.xsl" type="text/xsl"?>
<wrapper>
<incl file="Library.xml"/>
</wrapper>
Once this is displayed in Safari, you can save it out. On Safari's menu, choose
File > Save As and Safari will save it in its own
.webarchive format. But open that in a text editor, remove everything before the top <html> tag and everything after the bottom </html> tag, and re-save as a
.html file and you have what you're looking for--and all without installing anything.
However, maybe last.fm is more what you're looking for. I haven't used it, so I don't know about it. But I just thought I'd mention that you can do this with an XSL stylesheet if you want to. That Safari could handle it was a surprise to me, actually--it's come on by leaps and bounds as a browser, but I didn't know it had support for that.