221269ad59b4edd4a8dc4618799f8cc592c40b55
[radio.git] / mp3tohtml.py
1 #!/usr/bin/python
2
3 # Generate an HTML page containing information about MP3s in a
4 # directory.
5 #
6 # Usage: mp3tohtml.py <mp3_dir>
7 #
8 # Last version of this tool can be get from the GIT repository:
9 # http://git.wpitchoune.net/radio.git
10 #
11 # (c) 2016 Jean-Philippe Orsini  <jeanfi@gmail.com>
12
13 import eyeD3
14 import glob
15 import os.path
16 import re
17 import sys
18
19 def fma_copyright_to_html(path, copyright):
20     if copyright == "":
21         sys.stderr.write(path + ": no FMA copyright.\n")
22         return ""
23
24     p = re.compile("(.*): (.*)")
25     m = p.match(copyright)
26     if m is not None:
27         name = m.group(1)
28         name = name.replace("Creative Commons", "CC")
29         name = name.replace("Attribution", "BY")
30         name = name.replace("NonCommercial", "NC")
31         name = name.replace("Noncommercial", "NC")
32         name = name.replace("NoDerivatives", "ND")
33         name = name.replace("ShareAlike", "SA")
34         name = name.replace("Share Alike", "SA")
35         name = name.replace("United States", "US")
36         return "<a href=\"" + m.group(2) + "\">" + name + "</a>"
37     else:
38         sys.stderr.write(path + ": invalid FMA copyright: "
39                          + copyright + ".\n");
40         return copyright
41
42 if len(sys.argv) != 2:
43     sys.stderr.write("Usage: mp3tohtml.py <mp3_dir>\n")
44     exit(1)
45
46 header_path = os.path.dirname(sys.argv[0]) + "/header.tpl"
47 header = open(header_path, "r")
48 for line in header:
49     sys.stdout.write(line)
50
51 files = glob.glob(sys.argv[1] + "/**/*mp3")
52
53 for f in files:
54     tag = eyeD3.Tag()
55
56     tag.link(f)
57
58     print "\t<tr>"
59
60     print "\t\t<td>" + tag.getArtist().encode("UTF8") + "</td>\n"
61     print "\t\t<td>" + tag.getAlbum().encode("UTF-8") + "</td>"
62     print "\t\t<td>" + tag.getTitle().encode("UTF-8") + "</td>"
63
64     comments = tag.getComments()
65     strComments = ""
66     for c in comments:
67         strComments += c.comment
68
69     p = re.compile("URL: (.*)\r\nComments: (.*)\r\nCurators?: (.*)\r\nCopyright: (.*)")
70     m = p.match(strComments)
71
72     if m is None:
73         url = ""
74         curator = ""
75         copyright = ""
76     else:
77         if m.group(2) == "http://freemusicarchive.org/":
78             strComments = ""
79             url = "<a href=\"" + m.group(1) + "\">FMA</a>"
80         else:
81             strComments =  m.group(2)
82             url = "<a href=\"" + m.group(1) + "\">source</a>"
83
84         curator = m.group(3)
85
86         copyright = fma_copyright_to_html(f, m.group(4))
87
88     print "\t\t<td>" + url + "</td>"
89     print "\t\t<td>" + curator + "</td>"
90     print "\t\t<td>" + copyright + "</td>"
91     print "\t\t<td>" + strComments + "</td>"
92
93     print "\t</tr>"
94
95 print "</table>"
96 print "<footer>"
97 print "            <ul>"
98 print "                    <li><a href=\"mailto:proxyradio@wpitchoune.net\">Contact</a></li>"
99 print "            </ul>"
100 print "</footer>"
101 print "</body></html>"