Download a file from MediaFire with Java

10k Views Asked by At

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?

1

There are 1 best solutions below

3
On BEST ANSWER

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";
        }
    }
}