Скачать файл из MediaFire с Java

Как мы все знаем или, возможно, знаем, MediaFire не разрешает прямые ссылки для скачивания, но на самом деле вам нужно нажать кнопку «Загрузить», чтобы сгенерировать случайную ссылку, указывающую на файл. Есть ли способ получить эту ссылку и скачать ее?


person KiralyCraft    schedule 28.03.2015    source источник


Ответы (1)


Отчаявшись написать приложение для автоматического обновления, я написал короткое Java-приложение, позволяющее загружать файлы из MediaFire. Вот полный код:

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";
        }
    }
}
person KiralyCraft    schedule 28.03.2015
comment
Так это ответ на твой вопрос? - person Baby; 28.03.2015
comment
я думаю да, попробуй - person KiralyCraft; 23.04.2016