Download a file from MediaFire with Java

KiralyCraft picture KiralyCraft · Mar 28, 2015 · Viewed 9.4k times · Source

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?

Answer

KiralyCraft picture KiralyCraft · Mar 28, 2015

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