Search code examples
javamediafire

Download a file from MediaFire with Java


As we all know, or might know, MediaFire does not allow direct download links, but you actually have to click the Download button to generate a random link that refers to the file. Is there a way to fetch that link and download it?


Solution

  • In despair of writing an auto-updating application, I have written a short Java application which allows the download of files from MediaFire. Here is the full code:

    import java.io.BufferedInputStream;
    import java.io.BufferedReader;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.URL;
    import java.net.URLConnection;
    
    
    public class mainwindow {
    
        /**
         * Launch the application.
         */
        static mainwindow thisInstance;
        public static void main(String[] args) {
            new mainwindow();
    
        }
        public mainwindow() 
    {
            otherthread();
        }
        public void otherthread()
        {
            navigate("http://www.mediafire.com/download/aqtmhwvb8yvqclu/SmartSharePC.jar","downloadedFromMediafire");
    //      navigate("http://www.mediafire.com/download/j7e4wh6hbdhdj84/Minecraft+1.5.2-+C.H.T.zip","mediafire");
        }
        private void navigate(String url,String sufix)
        {
            try 
            {
                String downloadLink = fetchDownloadLink(getUrlSource(url));
                saveUrl(downloadLink,sufix);
            } catch (Exception e) 
            {
                e.printStackTrace();
            }
    
        }
        public void saveUrl(final String urlString,String sufix) throws Exception 
        {
            System.out.println("Downloading...");
            String filename = urlString.substring(urlString.lastIndexOf("/")+1, urlString.lastIndexOf("."))+"_"+sufix+urlString.substring(urlString.lastIndexOf("."), urlString.length());
            BufferedInputStream in = null;
            FileOutputStream fout = null;
            try {
                in = new BufferedInputStream(new URL(urlString).openStream());
                fout = new FileOutputStream(filename);
    
                final byte data[] = new byte[1024];
                int count;
                while ((count = in.read(data, 0, 1024)) != -1) 
                {
                    fout.write(data, 0, count);
                }
            } finally {
                if (in != null) {
                    in.close();
                }
                if (fout != null) {
                    fout.close();
                }
            }
            System.out.println("Success!");
        }
        private static String getUrlSource(String url) throws IOException 
        {
            System.out.println("Connecting...");
            URL yahoo = new URL(url);
            URLConnection yc = yahoo.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    yc.getInputStream(), "UTF-8"));
            String inputLine;
            String total="";
            while ((inputLine = in.readLine()) != null)
               total+=inputLine;
            in.close();
    
            return total;
        }
        private static String fetchDownloadLink(String str)
        {
            System.out.println("Fetching download link");
            try {
                String regex = "(?=\\<)|(?<=\\>)";
                String data[] = str.split(regex);
                String found = "NOTFOUND";
                for (String dat : data) {
                    if (dat.contains("DLP_mOnDownload(this)")) {
                        found = dat;
                        break;
                    }
                }
                String wentthru = found.substring(found.indexOf("href=\"") + 6);
                wentthru = wentthru.substring(0, wentthru.indexOf("\""));
                return wentthru;
            } catch (Exception e) 
            {
                e.printStackTrace();
                return "ERROR";
            }
        }
    }