Package it.unipd.netmus.server.utils

Source Code of it.unipd.netmus.server.utils.Utils

package it.unipd.netmus.server.utils;

import it.unipd.netmus.server.youtube.YouTubeManager;
import it.unipd.netmus.shared.SongDTO;

import java.util.Collection;
import java.util.Iterator;

import de.umass.lastfm.Album;
import de.umass.lastfm.ImageSize;
import de.umass.lastfm.Track;

/**
* Nome: Utils.java
* Autore: VT.G
* Licenza: GNU GPL v3
* Data Creazione: 17 Febbraio 2011
*/
public final class Utils {

    /**
     * Questo metodo attiva la cache di Last.fm per AppEngine ed esegue una
     * ricerca esterna, con keyword artista e album, per recuperare l’url della
     * copertina dell’album relativo ad un brano, in formato JPG.
     */
    public static String getCoverImage(String artist, String album) {

        try {

            Album search = Album.getInfo(artist, album,
                    "33d9ef520018d87db5dff9ef74cc4904");

            if (search != null) {
                String album_image = search.getImageURL(ImageSize.EXTRALARGE);
                if (album_image != null) {
                    return album_image;
                } else {
                    return "";
                }
            } else
                return "";
        } catch (Exception e) {
            return "";
        }
    }

    /**
     * Con questo metodo andremo a provare a recuperare informazioni ulteriori
     * di un brano che non ha info nel tag, usando come keyword il nome del file
     * stesso, più eventuali paroe chiave. Se verrà trovato qualcosa si proverà
     * a proporlo all’utente. In uscita restituirà un SongDTO.
     *
     * Per un corretto utilizzo, il nome del file deve sempre essere al primo
     * posto, seguito dalle altre chiavi di ricerca.
     */
    public static SongDTO getSongFromFileName(String filename) {

        // pulisco la stringa da percorsi e estensione, rimango solo con il nome
        // del file.
        filename = filename.replaceAll(
                "(^.*(\\\\|/))|\\.MP3|\\.mp3|\\.Mp3|\\.mP3", "");
        return getSongFromIncompleteInfo(filename);
    }

    /**
     * Richiama last.fm per vedere se si riesce a trovare una canzone con le
     * poche informazioni a disposizione.
     */
    public static SongDTO getSongFromIncompleteInfo(String info) {
        try {
            System.out.println("Ricerca info: " + info);
            Collection<Track> search = Track.search(info,
                    "33d9ef520018d87db5dff9ef74cc4904");

            Iterator<Track> it = search.iterator();
            Track t;
            if (it.hasNext())
                t = it.next();
            else
                t = null;

            if (t == null)
                return null;
            else {
                SongDTO song = new SongDTO();
                song.setTitle(t.getName());
                song.setArtist(t.getArtist());
                if (t.getAlbum() != null)
                    song.setAlbum(t.getAlbum());
                song.setAlbumCover(t.getImageURL(ImageSize.EXTRALARGE));
                return song;
            }
        } catch (Exception e) {
        }
        return null;
    }

    /**
     * Grazie a YouTubeManager restituisce la prima occorrenza di una ricerca su
     * YouTube per pertinenza alla keyword in ingresso (autore titolo). Se la
     * ricerca non produce risultati restituisce stringa vuota.
     */
    public static String getYouTubeCode(String keywords, String ip) {

        return getYouTubeCode(keywords, ip, 5);
    }

    /**
     * Grazie a YouTubeManager restituisce la prima occorrenza di una ricerca su
     * YouTube per pertinenza alla keyword in ingresso (autore titolo). Se la
     * ricerca non produce risultati restituisce stringa vuota. Viene fornito
     * l'indirizzo IP dell'utente per poter raffinare la ricerca, escludendo
     * video non riproducibili nella nazione dove risiede il client, o permessi
     * di visione bloccati.
     *
     * Il parametro retries, specifica quante volte ritentare la ricerca prima
     * di ritornare una stringa vuota, in caso la ricerca non abbia prodotto
     * risultati.
     *
     * @param keywords
     * @param ip
     * @param retries
     * @return Codice youtube relativo al video piu' rilevante trovato
     */
    private static String getYouTubeCode(String keywords, String ip, int retries) {

        if (retries > 0) {
            try {
                return YouTubeManager.getSearchResult(keywords, ip);
            } catch (Exception e) {
                return getYouTubeCode(keywords, ip, retries - 1);
            }

        } else {
            return "";
        }
    }

}
TOP

Related Classes of it.unipd.netmus.server.utils.Utils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.