2013-10-14 1 views
-1

YouTube URL로 mp3 파일을 다운로드 할 수있는 앱을 만들려고합니다.404 with youtube-mp3.org api

나는 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 단계 retruns mp3를 다음 요청한다.

아쉽게도 내 코드는 이미 1 단계에서 실패합니다. 404 페이지가 표시됩니다. 나는 그것이 작동하지 않는 이유를 모르겠어요

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

당신이 curl' 또는'wget' 또는 유사한'로, 수동으로 다음 단계를 시도? –

+0

@ MarkkuK. 나는 그것이 무엇인지 모른다. 설명해 주시겠습니까? – Xander

+0

항목 = 인수를 url-encode해야합니다. –

답변

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("https://stackoverflow.com/a/pushItem/") 
    .appendQueryParameter("item", "http://www.youtube.com/watch?v=xo9EV3A4oaA") 
    .appendQueryParameter("xy", "yx") 
    .build(); 
+0

첫 번째 해결책을 시도했지만 동일한 문제가있었습니다. – Xander

+0

이제 두 번째 해결책을 시도하고 있습니다 만,'새로운 HttpGet (uri)'는'HttpGet (Uri)이 정의되지 않았습니다 .' – Xander

+0

나는이 URL을 모두 시도했습니다 :'http://www.youtube-mp3.org/api/pushItem /? item = http % 3A % 2F % 2Fwww.youtube.com % 2Fwatch % 3Fv % 3Dxo9EV3A4oaA & xy = yx' 그리고이 url은 : 'http://www.youtube-mp3.org/api/pushItem/?item= http : //www.youtube.com/watch? v = xo9EV3A4oaA & xy = yx'. 둘 다 안드로이드 나 데스크톱 브라우저에서 작동하지 않습니다. – Xander