使用网站将 youtube 转换为 mp3 [英] youtube to mp3 conversion using web site

查看:24
本文介绍了使用网站将 youtube 转换为 mp3的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试制作可以将 youtube 视频下载为 mp3 文件的程序.我使用了这个网站 youtube-mp3.org 来实现这一目标.所以,我下载了 www.youtube-mp3.org/?c#v=sTbd2e2EyTk 的内容 其中 sTbd2e2EyTk 是视频 ID,现在我必须获得指向 mp3 文件的链接(在这种情况下 http://www.youtube-mp3.org/get?video_id.....) 但下载的内容中没有链接.我注意到chrome开发人员工具(ctrl+shift+j,tab Elements)显示chrome中的链接和查看源(ctrl+u)选项给了我与使用java下载页面相同的结果.我怎样才能得到那个链接?我尝试使用 JSoap 获取数据,但是我需要的那些数据没有立即加载到页面上,所以我无法获取它们.

I'm trying to make program that can download youtube videos as mp3 files. I used this site youtube-mp3.org in order to achive that. So, i downloaded content of www.youtube-mp3.org/?c#v=sTbd2e2EyTk where sTbd2e2EyTk is video id, now i have to get link to mp3 file(in this case http://www.youtube-mp3.org/get?video_id.....) but there is no link in downloaded content. I noticed that chrome developers tools(ctrl+shift+j, tab Elements) show that link and view source(ctrl+u) option in chrome gives me the same result which i get by downloading page using java. How can i get that link? I tried to fetch data using JSoap but those data that i need are not loaded on page immediately so i cannot get them.

接下来的代码是下载网页内容...

Next code is for downloading content of web page...

 URL tU = new URL("http://www.youtube-mp3.org/?c#v=sTbd2e2EyTk");
 HttpURLConnection conn = (HttpURLConnection) tU.openConnection();
 InputStream ins = conn.getInputStream();
 BufferedReader rd = new BufferedReader(new InputStreamReader(ins));
 String line;
 StringBuffer content = new StringBuffer();
 while ((line = rd.readLine()) != null) {
     content.append(line);
 }
 System.out.println(content.toString());

我用这个方法来获取文件,但我需要链接..

I used this method for getting file but i need link..

   private static void downloadStreamData(String url, String fileName) throws Exception {
    URL tU = new URL(url);
    HttpURLConnection conn = (HttpURLConnection) tU.openConnection();

    String type = conn.getContentType();
    InputStream ins = conn.getInputStream();
    FileOutputStream fout = new FileOutputStream(new File(fileName));
    byte[] outputByte = new byte[4096];
    int bytesRead;
    int length = conn.getContentLength();
    int read = 0;
    while ((bytesRead = ins.read(outputByte, 0, 4096)) != -1) {
        read += bytesRead;
        System.out.println(read + " out of " + length);
        fout.write(outputByte, 0, bytesRead);
    }
    fout.flush();
    fout.close();
}

推荐答案

找到这个

package main.java.com.thezujev.theyoutubepld.logic;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.params.SyncBasicHttpParams;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
* @author azujev
*
*/
public class YouTubeMP3 {
    public static String[] getLink(String url) throws ClientProtocolException, IOException {
        boolean passCode = false;
        String h = "";
        String title = "";
        String result = "";
        String[] returnVal = {"",""};
        Map<String, String> jsonTable;
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet httpInitialGet = new HttpGet("http://www.youtube-mp3.org/api/pushItem/?item=http%3A//www.youtube.com/watch%3Fv%3D" + url + "&xy=_");
        httpInitialGet.addHeader("Accept-Location", "*");
        httpInitialGet.addHeader("Referrer", "http://www.youtube-mp3.org");
        HttpParams params = new SyncBasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setUserAgent(params, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1");
        httpInitialGet.setParams(params);
        HttpResponse firstResponse = httpClient.execute(httpInitialGet);

        try {
            if (firstResponse.getStatusLine().toString().contains("200")) {
                passCode = true;
            }
        } finally {
            httpInitialGet.releaseConnection();
        }

        if (passCode) {
            while (true) {
                HttpGet httpStatusGet = new HttpGet("http://www.youtube-mp3.org/api/itemInfo/?video_id=" + url + "&adloc=");
                httpStatusGet.addHeader("Accept-Location", "*");
                httpStatusGet.addHeader("Referrer", "http://www.youtube-mp3.org");
                httpStatusGet.setParams(params);
                HttpResponse secondResponse = httpClient.execute(httpStatusGet);
                HttpEntity secondEntity = secondResponse.getEntity();
                InputStream is = secondEntity.getContent();
                try {
                    BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
                    StringBuilder sb = new StringBuilder();
                    String line = null;
                    while ((line = reader.readLine()) != null) {
                        sb.append(line + "
");
                        }
                        is.close();
                        result = sb.toString();
                } catch (Exception e) {
                    e.printStackTrace();
                }

                httpStatusGet.releaseConnection();
                result = result.replaceAll("\}.*", "}");
                result = result.replaceAll(".*?\{", "{");
                try {
                    JSONObject jsonData = new JSONObject(result);
                    JSONArray jsonArray = jsonData.names();
                    JSONArray valArray = jsonData.toJSONArray(jsonArray);
                    jsonTable = new HashMap<String, String>(jsonArray.length());
                    for (int i = 0; i < jsonArray.length(); i++) {
                        jsonTable.put(jsonArray.get(i).toString(), valArray.get(i).toString());
                    }
                    if (jsonTable.get("status").equals("serving")) {
                        h = jsonTable.get("h");
                        title = jsonTable.get("title");
                        break;
                    }
                } catch (JSONException e) {
                // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
            returnVal[0] = "http://www.youtube-mp3.org/get?video_id=" + url + "&h=" + h;
            returnVal[1] = title;
            return returnVal;
        } else {
            //TODO: Error, vid not downloadable
        }
        return null;
    }
}

这篇关于使用网站将 youtube 转换为 mp3的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆