Java 使用web站点将youtube转换为mp3
我正在尝试制作一个可以将youtube视频下载为mp3文件的程序。我使用这个网站就是为了达到这个目的。所以,我下载了其中stbd2eytk是视频id的内容,现在我必须获得mp3文件的链接(在本例中),但下载的内容中没有链接。我注意到chrome开发者工具(ctrl+shift+j,tab元素)显示,chrome中的链接和查看源代码(ctrl+u)选项给了我与使用java下载页面相同的结果。我怎样才能得到那个链接? 我尝试使用JSoap获取数据,但我需要的数据并没有立即加载到页面上,所以我无法获取它们 下一个代码用于下载网页内容Java 使用web站点将youtube转换为mp3,java,youtube,Java,Youtube,我正在尝试制作一个可以将youtube视频下载为mp3文件的程序。我使用这个网站就是为了达到这个目的。所以,我下载了其中stbd2eytk是视频id的内容,现在我必须获得mp3文件的链接(在本例中),但下载的内容中没有链接。我注意到chrome开发者工具(ctrl+shift+j,tab元素)显示,chrome中的链接和查看源代码(ctrl+u)选项给了我与使用java下载页面相同的结果。我怎样才能得到那个链接? 我尝试使用JSoap获取数据,但我需要的数据并没有立即加载到页面上,所以我无法获取
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());
我使用此方法获取文件,但我需要链接
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 + "\n");
}
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;
}
}
package main.java.com.thezujev.theyoutubepld.logic;
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.util.HashMap;
导入java.util.Map;
导入org.apache.http.HttpEntity;
导入org.apache.http.HttpResponse;
导入org.apache.http.HttpVersion;
导入org.apache.http.client.ClientProtocolException;
导入org.apache.http.client.methods.HttpGet;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.params.HttpParams;
导入org.apache.http.params.HttpProtocolParams;
导入org.apache.http.params.SyncBasicHttpParams;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
/**
*@作者阿祖耶夫
*
*/
公共类YouTubeMP3{
公共静态字符串[]getLink(字符串url)引发ClientProtocolException,IOException{
布尔密码=假;
字符串h=“”;
字符串标题=”;
字符串结果=”;
字符串[]returnVal={“”“”};
地图目录;
DefaultHttpClient httpClient=新的DefaultHttpClient();
HttpGet httpInitialGet=新的HttpGet(“http://www.youtube-mp3.org/api/pushItem/?item=http%3A//www.youtube.com/watch%3Fv%3D“+url+”&xy=”;
httpInitialGet.addHeader(“接受位置”,“*”);
httpInitialGet.addHeader(“referer”http://www.youtube-mp3.org");
HttpParams params=新的SyncBasicHttpParams();
HttpProtocolParams.setVersion(params,HttpVersion.HTTP_1_1);
HttpProtocolParams.setUserAgent(params,“Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.1(KHTML,如Gecko)Chrome/22.0.1207.1 Safari/537.1”);
httpInitialGet.setParams(params);
HttpResponse firstResponse=httpClient.execute(httpInitialGet);
试一试{
if(firstResponse.getStatusLine().toString()包含(“200”)){
密码=真;
}
}最后{
httpInitialGet.releaseConnection();
}
if(密码){
while(true){
HttpGet httpStatusGet=新的HttpGet(“http://www.youtube-mp3.org/api/itemInfo/?video_id=“+url+”&adloc=“”);
httpStatusGet.addHeader(“接受位置”,“*”);
httpStatusGet.addHeader(“参考者”http://www.youtube-mp3.org");
httpStatusGet.setParams(params);
HttpResponse secondResponse=httpClient.execute(httpStatusGet);
HttpEntity secondEntity=secondResponse.getEntity();
InputStream=secondEntity.getContent();
试一试{
BufferedReader reader=新的BufferedReader(新的InputStreamReader(is,“iso-8859-1”),8;
StringBuilder sb=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
is.close();
结果=sb.toString();
}捕获(例外e){
e、 printStackTrace();
}
httpStatusGet.releaseConnection();
result=result.replaceAll(“\\}.*”,“}”);
result=result.replaceAll(“.*?\\{”,“{”);
试一试{
JSONObject jsonData=新的JSONObject(结果);
JSONArray JSONArray=jsonData.names();
JSONArray valArray=jsonData.toJSONArray(JSONArray);
jsonTable=newhashmap(jsonArray.length());
for(int i=0;i
关于类似问题的回答:
关于YouTube API的服务条款 你不能: 分离、隔离或修改任何系统的音频或视频组件 通过YouTube API提供的YouTube视听内容 单独推广任何YouTube的音频或视频组件 通过YouTube API提供的视听内容 (来源:)
我的答覆是:
可以使用不同的服务。例如,您可以安装并使用接口来安装程序。如果有帮助的话,我的c语言中有这个