404与youtube-mp3.org api

时间:2013-10-14 14:23:50

标签: java android youtube http-status-code-404 httprequest

我正在尝试创建一个可以通过youtube网址下载mp3文件的应用。

我对youtube-mp3.org api进行了一些研究,这是我认为应该这样做的方式:

  1. 获取http://www.youtube-mp3.org/api/pushItem/?item=http://www.youtube.com/watch?v=xo9EV3A4oaA&xy=yx
  2. 步骤1返回一个ID,您必须在以下请求中使用该ID:"http://www.youtube-mp3.org/api/itemInfo/?video_id=" + ID
  3. 第2步返回另一个代码,您必须在此请求中使用该代码:"http://www.youtube-mp3.org/get?video_id=xo9EV3A4oaA&h=" + <code from step 2>
  4. 第3步重演mp3。
  5. 不幸的是,我的代码在第1步已失败:我收到404,找不到页面。

    这是我的代码(仅适用于第1步):

    private DefaultHttpClient createHttpClient() {
        HttpParams my_httpParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(my_httpParams, 3000);
        HttpConnectionParams.setSoTimeout(my_httpParams, 15000);
        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        ThreadSafeClientConnManager multiThreadedConnectionManager = new ThreadSafeClientConnManager(my_httpParams, registry);
        DefaultHttpClient httpclient = new DefaultHttpClient(multiThreadedConnectionManager, my_httpParams);
        return httpclient;
    }
    
    private class DownloadVid extends AsyncTask<Void, Void, Void> {
    
        int mStatusCode = 0;
        String content = "";
    
        @Override
        protected Void doInBackground(Void... args) {
    
            String url = "http://www.youtube-mp3.org/api/pushItem/?item=http://www.youtube.com/watch?v=xo9EV3A4oaA&xy=yx";
    
            DefaultHttpClient httpclient = createHttpClient();
            HttpGet httpget = new HttpGet(url);
            httpget.addHeader("Accept-Location", "*");
    
            try {
                HttpResponse response = httpclient.execute(httpget);
                StatusLine statusLine = response.getStatusLine();
                mStatusCode = statusLine.getStatusCode();
    
                if (mStatusCode == 200){
                    content = EntityUtils.toString(response.getEntity());
                }
    
            } catch (ClientProtocolException e) {
                e.printStackTrace();
                mStatusCode = 0;
            } catch (IOException e) {
                e.printStackTrace();
                mStatusCode = 0;
            } catch (IllegalStateException e){
                e.printStackTrace();
                mStatusCode = 0;
            }
    
            return null;
        }
    
        @Override
        protected void onPostExecute(Void arg) {
    
            mProgressDialog.dismiss();
    
            Toast.makeText(MainActivity.this, "Result=" + content + " StatusCode=" + mStatusCode, Toast.LENGTH_LONG).show();
        }
    }
    

    我不确定为什么它不起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

对项目参数进行编码,如下所示:

String item = URLEncoder.encode("http://www.youtube.com/watch?v=xo9EV3A4oaA", "utf-8");
String url = "http://www.youtube-mp3.org/a/pushItem/?item="+item+"&xy=yx";

或者像这样:

Uri uri = new Uri.Builder()
    .scheme("http")
    .authority("www.youtube-mp3.org")
    .path("/a/pushItem/")
    .appendQueryParameter("item", "http://www.youtube.com/watch?v=xo9EV3A4oaA")
    .appendQueryParameter("xy", "yx")
    .build();
相关问题