YOUTUBE

cs_calypso78 Messages postés 35 Date d'inscription mercredi 15 octobre 2008 Statut Membre Dernière intervention 27 octobre 2012 - 22 juin 2011 à 22:24
 Utilisateur anonyme - 24 juin 2011 à 00:34
Bonsoir,

Je suis débutant en java, et j'aimerais avoir quelques infos sur youtube, il me faudrait juste quelques pistes pour savoir quelles librairies utiliser, et peut-être même quelles fonctions, mon but étant de faire un soft très très léger, qui permettra seulement de télécharger une vidéo ou d'en extraire le son.

Mfaudrait juste cette première idée de quoi utiliser, et je ferais mes recherches moi-même plus tard.

Merci et bonne soirée,
Calypso

4 réponses

Utilisateur anonyme
23 juin 2011 à 21:26
Bonsoir

Tu trouveras tout ce qu'il te faut ici, y compris pour configurer la Google Data API sous Eclipse et faire ton projet :
http://code.google.com/intl/fr/apis/gdata/articles/eclipse.html



T.U.E.R yeah! vive java
0
cs_calypso78 Messages postés 35 Date d'inscription mercredi 15 octobre 2008 Statut Membre Dernière intervention 27 octobre 2012
23 juin 2011 à 23:19
Merci pour le conseil, j'ai trouvé hier un bout de code qui permet de télécharger une vidéo youtube (soit-disant).

Je me suis donc mis en tête de le comprendre afin de le modifier par la suite :

public static void main(String[] args) throws Exception {
        download("http://www.youtube.com/watch?v=SOcfxvHDWok&feature=feedrec_grec_index", "test.flv");
    }

    /*
     * 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/get_video?video_id=" + id + "&t=" + nid;
        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/get_video_info?&video_id=" + 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();
        System.out.println(fileName);
        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();
    }


Voilà, juste... quelqu'un peut-il m'expliquer les deux dernières fonctions?
Merci et bonne soirée,
Calypso
0
Utilisateur anonyme
24 juin 2011 à 00:22
Re

Il existe déjà des logiciels qui font ça sur Internet, je pense par exemple à TinyOgg.

Je te conseille de regarder dans la documentation de Java pour bien comprendre ce que ce code fait.

La première méthode crée une connection HTTP à partir de l'URL de la page d'information de la vidéo. Quand la connection est établie, cette méthode parse le contenu afin d'y extraire un identifiant dans une chaîne de caractère de la forme "token=mon_identifiant_de_telechargement".

La deuxième méthode prend en paramètre l'URL de la vidéo et le nom du fichier dans lequel elle va la copier. Elle crée alors une connection HTTP à partir de l'URL, elle lit les informations par paquets et les copie en même temps dans le fichier. Elle ferme le flux de sortie à la fin.

J'ai déjà essayé de faire un programme comme ça. La difficulté réside dans le décodage des fichiers au format FLV pour en extraire le son. Après, pour les jouer facilement, je te conseille Paul Lamb's Sound System, c'est très facile à utiliser, ça contourne les bogues et limitations connues de JavaSound sans t'obliger à utiliser des modules natifs, tu peux t'en servir pour jouer un son en streaming ou résidant entièrement en mémoire. Bon courage.















T.U.E.R yeah! vive java
0
Utilisateur anonyme
24 juin 2011 à 00:34
Tu peux passer par FFMEG/Mencoder voire peut-être JMencoder pour faire la conversion du fichier FLV dans un format que tu pourrais lire facilement en Java. Regarde aussi dans FFMPEG-Java et Xuggler.


T.U.E.R yeah! vive java
0
Rejoignez-nous