-1

YouTubeのURLで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 を返します。これを次のリクエストで使用する必要があります。"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 を再実行します。

残念ながら、私のコードはステップ 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();
    }
}

なぜ機能しないのかわかりません。何か案は?

4

1 に答える 1