Aşagıdaki kodu çalıştırdığımda consolda şöyle bir hata alıyorum:

http://www.youtube.com/watch?v=jUEOWVjnIR8 jUEOWVjnIR8
Exception in thread "main" java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters      
in escape (%) pattern - For input string: "">"
at java.net.URLDecoder.decode(Unknown Source) at youtube.file.YouTube.getDownloadId(YouTube.java:52)        
at youtube.file.YouTube.download(YouTube.java:30) at youtube.file.YouTube.main(YouTube.java:21)

YouTube.java public class YouTube {

public static void main(String[] args) throws Exception {
    YouTube.download("http://www.youtube.com/watch?v=jUEOWVjnIR8", "C:/Users/TOSHIBA/");
}

/*
 * this function downloads a video based on its url
 */
public static void download(String url, String fileName) throws Exception {
    String id = url.split("v=")[1].split("&")[0];
    System.out.println(url + " " + id);
    String nid = getDownloadId(id);
    if (nid == null) {
        throw new Exception("Invalud url");
    }
    url = "http://www.youtube.com/watch?v=" + id;
    downloadStreamData(url, fileName);
}

/*
 * returns the id of the video data
 */
private static String getDownloadId(String videoId) throws MalformedURLException, IOException {
    String url = "http://www.youtube.com/watch?v=" + videoId;
    URL tU = new URL(url);
    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);
    }
    String sContent = URLDecoder.decode(content.toString(), "UTF-8");
    String[] tokens = sContent.split("&");
    for (int i = 0; i < tokens.length - 1; i++) {
        if (tokens[i] == null) {
            continue;
        }
        String param1 = tokens[i].substring(0, tokens[i].indexOf("="));
        String param2 = tokens[i].substring(param1.length() + 1);
        if (param1.equals("token")) {
            return param2;
        }
    }
    return "";
}

/*
 * this function will download the file after the stream is found
 */
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();
}

}

soruldu: 20 Nis '13, 08:42

ipek's gravatar image

ipek
226172025
cevap kabul oranı: 100%

değiştirildi: 22 Nis '13, 01:52

creseos's gravatar image

creseos
2.0k468187

hatayı hangi satırda veriyor?

(22 Nis '13, 01:01) creseos creseos's gravatar image

URLDecoder: Illegal hex characters
in escape (%) pattern - For input string: "">"

String değere atıp, url olarak Connection'a atmaya çalıştığında muhtemel alıyordur. escape karakter'den dolayıdır. \" ile hatanın üstesinden gelinebilir. Tabi benimnkisi uzaktan bir bakışta anlaşılan bir öngörüdür :)

(22 Nis '13, 01:05) Turgay Can Turgay%20Can's gravatar image
Bu soruya ilk cevap veren sen ol!
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,077

Soruldu: 20 Nis '13, 08:42

Görüntüleme: 914 kez

Son güncelleme: 22 Nis '13, 01:52

powered by BitNami OSQA