View Javadoc

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"))//|| url.toUpperCase().endsWith("WMA_UK_CONCRETE"))
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 }