Package de.umass.lastfm

Source Code of de.umass.lastfm.Radio$RadioStation

/*
* Copyright (c) 2010, the Last.fm Java Project and Committers
* All rights reserved.
*
* Redistribution and use of this software in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above
*   copyright notice, this list of conditions and the
*   following disclaimer.
*
* - Redistributions in binary form must reproduce the above
*   copyright notice, this list of conditions and the
*   following disclaimer in the documentation and/or other
*   materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

package de.umass.lastfm;

import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

import de.umass.xml.DomElement;

/**
* Provides access to the Last.fm radio streaming service.<br/>
* Note that you have to be a subscriber (or have a special API key) to use this API.
* Official documentation can be found here <a href="http://www.last.fm/api/radio">http://www.last.fm/api/radio</a>
*
* @author Janni Kovacs
*/
public class Radio {

  private String type;
  private String stationName;
  private String stationUrl;
  private boolean supportsDiscovery;

  private Session session;
  private int expiry = -1;

  private Radio(Session session) {
    this.session = session;
  }

  public String getType() {
    return type;
  }

  public String getStationName() {
    return stationName;
  }

  public String getStationUrl() {
    return stationUrl;
  }

  public boolean supportsDiscovery() {
    return supportsDiscovery;
  }

  /**
   * Returns the playlist expiration value for the last playlist fetchet, or -1 if no playlist has been fetched yet.
   *
   * @return playlist expiration in seconds
   */
  public int playlistExpiresIn() {
    return expiry;
  }

  /**
   * Tune in to a Last.fm radio station.
   *
   * @param station An instance of {@link RadioStation}
   * @param session A Session instance
   * @return a Radio instance
   */
  public static Radio tune(RadioStation station, Session session) {
    return tune(station, Locale.getDefault(), session);
  }

  /**
   * Tune in to a Last.fm radio station.
   *
   * @param station An instance of {@link RadioStation}
   * @param locale The language you want the radio's name in
   * @param session A Session instance
   * @return a Radio instance
   */
  public static Radio tune(RadioStation station, Locale locale, Session session) {
    return tune(station.getUrl(), locale, session);
  }

  /**
   * Tune in to a Last.fm radio station.
   *
   * @param station A lastfm radio URL
   * @param locale The language you want the radio's name in
   * @param session A Session instance
   * @return a Radio instance
   */
  public static Radio tune(String station, Locale locale, Session session) {
    Map<String, String> params = new HashMap<String, String>();
    params.put("station", station);
    if (locale != null && locale.getLanguage().length() != 0) {
      params.put("lang", locale.getLanguage());
    }
    Result result = Caller.getInstance().call("radio.tune", session, params);
    if (!result.isSuccessful())
      return null;
    DomElement root = result.getContentElement();
    Radio radio = new Radio(session);
    radio.type = root.getChildText("type");
    radio.stationName = root.getChildText("name");
    radio.stationUrl = root.getChildText("url");
    radio.supportsDiscovery = "1".equals(root.getChildText("type"));
    return radio;
  }

  /**
   * Fetches a new radio playlist.
   *
   * @return a new Playlist
   */
  public Playlist getPlaylist() {
    return getPlaylist(false, true);
  }

  /**
   * Fetches a new radio playlist.
   *
   * @param discovery Whether to request last.fm content with discovery mode switched on
   * @param rtp Whether the user is scrobbling or not during this radio session (helps content generation)
   * @return a new Playlist
   */
  public Playlist getPlaylist(boolean discovery, boolean rtp) {
    Result result = Caller.getInstance()
        .call("radio.getPlaylist", session, "discovery", String.valueOf(discovery), "rtp", String.valueOf(rtp));
//    Result result = Caller.getInstance().call("radio.getPlaylist", session);
    if (!result.isSuccessful())
      return null;
    DomElement root = result.getContentElement();
    for (DomElement e : root.getChildren("link")) {
      if ("http://www.last.fm/expiry".equals(e.getAttribute("rel"))) {
        this.expiry = Integer.parseInt(e.getText());
        break;
      }
    }
    return Playlist.playlistFromElement(root);
  }

  public static class RadioStation {
    private String url;

    private RadioStation(String s) {
      this.url = s;
    }

    public String getUrl() {
      return url;
    }

    public static RadioStation similarArtists(String artist) {
      return new RadioStation("lastfm://artist/" + artist + "/similarartists");
    }

    public static RadioStation artistFans(String artist) {
      return new RadioStation("lastfm://artist/" + artist + "/fans");
    }

    public static RadioStation library(String user) {
      return new RadioStation("lastfm://user/" + user + "/library");
    }

    public static RadioStation neighbours(String user) {
      return new RadioStation("lastfm://user/" + user + "/neighbours");
    }

    public static RadioStation lovedTracks(String user) {
      return new RadioStation("lastfm://user/" + user + "/loved");
    }

    public static RadioStation recommended(String user) {
      return new RadioStation("lastfm://user/" + user + "/recommended");
    }

    public static RadioStation tagged(String tag) {
      return new RadioStation("lastfm://globaltags/" + tag);
    }

    public static RadioStation playlist(String playlistId) {
      return new RadioStation("lastfm://playlist/" + playlistId);
    }

    public static RadioStation personalTag(String user, String tag) {
      return new RadioStation("lastfm://usertags/" + user + "/" + tag);
    }
  }
}
TOP

Related Classes of de.umass.lastfm.Radio$RadioStation

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.