1 package org.rpi.radio.parsers;
2
3 import java.io.IOException;
4 import java.net.MalformedURLException;
5 import java.net.URL;
6 import java.net.URLConnection;
7 import java.util.LinkedList;
8
9 import org.apache.log4j.Logger;
10
11 public class FileParser {
12
13 private static Logger log = Logger.getLogger(FileParser.class);
14 public String getURL(String url)
15 {
16 String uURL = url.toUpperCase();
17 if(uURL.endsWith(".FLAC"))
18 {
19 log.debug("FLAC File: " + url);
20 return url;
21 }
22 else if(uURL.endsWith(".MP3"))
23 {
24 log.debug("MP3 File: " + url);
25 return url;
26 }
27 else if(uURL.endsWith(".WAV"))
28 {
29 log.debug("WAV File: " + url);
30 return url;
31 }
32 else if (uURL.endsWith(".M4A"))
33 {
34 log.debug("M4A File: " + url);
35 return url;
36 }
37 else if(uURL.endsWith(".PLS"))
38 {
39 log.debug("PLS File: " + url);
40 PLSParser pls = new PLSParser();
41 LinkedList<String> urls = pls.getStreamingUrl(url);
42 if(urls.size()>0)
43 {
44 return urls.get(0);
45 }
46 }
47 else if(uURL.endsWith(".M3U"))
48 {
49 log.debug("M3U File: " + url);
50 M3UParser m3u = new M3UParser();
51 LinkedList<String> urls = m3u.getStreamingUrl(url);
52 if((urls.size()>0))
53 {
54 return urls.get(0);
55 }
56 }
57 else if(uURL.endsWith(".ASX"))
58 {
59 ASXParser asx = new ASXParser();
60 log.debug("ASX File: " + url);
61 LinkedList<String> urls = asx.getStreamingUrl(url);
62 if((urls.size()>0))
63 {
64 return urls.get(0);
65 }
66 }
67 else
68 {
69 URLConnection conn = getConnection(url);
70 if(conn!=null)
71 {
72 log.debug("URL: " + url + " Headers: " + conn.getHeaderFields());
73 String content_disp = conn.getHeaderField("Content-Disposition");
74 log.debug("ContentDisposition:" + content_disp);
75 String content_type = conn.getContentType();
76 if(content_type !=null)
77 {
78 content_type = content_type.toUpperCase();
79 }
80 if(content_disp !=null && content_disp.toUpperCase().endsWith("M3U"))
81 {
82 log.debug("M3U File: " + url);
83 M3UParser m3u = new M3UParser();
84 LinkedList<String> urls = m3u.getStreamingUrl(conn);
85 if(urls.size()> 0)
86 {
87 return urls.getFirst();
88 }
89 }
90
91 else if(content_type != null && content_type.contains("AUDIO/X-SCPLS"))
92 {
93 log.debug("PLS File: " + url);
94 PLSParser pls = new PLSParser();
95 LinkedList<String> urls = pls.getStreamingUrl(conn);
96 if(urls.size()> 0)
97 {
98 return urls.getFirst();
99 }
100 }
101 else if(content_type != null && content_type.contains("VIDEO/X-MS-ASF"))
102 {
103 ASXParser asx = new ASXParser();
104 log.debug("ASX File: " + url);
105 LinkedList<String> urls = asx.getStreamingUrl(url);
106 if((urls.size()>0))
107 {
108 return urls.get(0);
109 }
110 log.debug("ContentType was VIDEO/X-MS-ASF but could not parse .asx file, attempt to parse as .PLS File ");
111 PLSParser pls = new PLSParser();
112 urls = pls.getStreamingUrl(url);
113 if((urls.size()>0))
114 {
115 return urls.get(0);
116 }
117 }
118 else if(content_type != null && content_type.contains("AUDIO/MPEG"))
119 {
120 log.debug("MPEG File: " + url);
121 return url;
122 }
123 else if (content_type != null && content_type.contains("AUDIO/X-MPEGURL"))
124 {
125 log.debug("M3U File: " + url);
126 M3UParser m3u = new M3UParser();
127 LinkedList<String> urls = m3u.getStreamingUrl(url);
128 if((urls.size()>0))
129 {
130 return urls.get(0);
131 }
132 }
133 else
134 {
135 log.warn("##################Could Not Find File Type##########################");
136 log.warn("URL: " + url + " Headers: " + conn.getHeaderFields());
137 log.warn("####################################################################");
138 }
139 }
140 }
141 return url;
142 }
143
144 private URLConnection getConnection(String url)
145 {
146 URLConnection mUrl;
147 try {
148 mUrl = new URL(url).openConnection();
149 return mUrl;
150 } catch (MalformedURLException e) {
151 log.error(e);
152 } catch (IOException e) {
153 log.error(e);
154 }
155 return null;
156 }
157
158 }