【问题标题】:Finding some playlist information from a Website从网站中查找一些播放列表信息
【发布时间】:2019-03-10 18:43:31
【问题描述】:

我正在尝试为以下网站实施广播应用程序: http://www.c895.org/mp3/

网站使用 SGPlayer 显示艺术家和歌曲名称。我能够检索该信息,但我无法找到可以访问以前播放的曲目的位置。

我已经使用 Chrome 中的 Google 开发者工具尝试查找 API 链接或 JSON 数据,但我无法找到播放列表信息的保存位置。

我应该继续寻找数据,还是在我的 Android 应用程序中实现一种根据网站上显示的内容提供数据的方法?

我考虑过使用 AsyncTasks 通过后端有效地加载数据。

任何想法、想法和意见都有很大帮助!

【问题讨论】:

  • 是的,我知道这是播放列表所在的位置,但我不确定应该如何在我的应用程序中实现它。我应该尝试找到它在后端加载的位置,还是只从该页面加载数据
  • 我认为使用可以通过 Google Developer Tools 找到的私有 API 并不是一个好主意。你可以简单地解析这个页面——我认为这样就可以了。
  • 听起来不错,您有任何链接可以指导我这样做吗?如果没有,我会自己搜索:)谢谢

标签: android json api google-developer-tools


【解决方案1】:

您的播放列表在那里可用:https://www.c895.org/playlist/

我认为页面的解析比使用私有 API 更好。 为此,您可以使用JSOUP

此网站的示例:

String url = "https://www.c895.org/playlist/";
Document document = Jsoup.connect(url).get();

Element playlist = document.select("#playlist").first();

List<TrackInfo> tracks = new ArrayList<>();

for (Element track : playlist.children()) {
    long time = Long.parseLong(track.dataset().get("ts"));
    String title = track.select(".title").first().text();
    String artist = track.select(".artist").first().text();

    // `time * 1000` because `java.util.Date` requires milliseconds
    // but `time` (`data-ts`) is a count of seconds
    tracks.add(new TrackInfo(new Date(time * 1000), title, artist));
}

// example output:
// TrackInfo{date=Sun Mar 10 22:06:58 MSK 2019, title='Grapevine', artist='Tiësto'}
System.out.println(tracks.get(0));

TrackInfo 在哪里:

class TrackInfo {
    private Date date;
    private String title, artist;

    public TrackInfo(Date date, String title, String artist) {
        this.date = date;
        this.title = title;
        this.artist = artist;
    }

    @Override
    public String toString() {
        return "TrackInfo{" +
                "date=" + date +
                ", title='" + title + '\'' +
                ", artist='" + artist + '\'' +
                '}';
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getArtist() {
        return artist;
    }

    public void setArtist(String artist) {
        this.artist = artist;
    }
}

这样您就可以找到在任何时间间隔播放的歌曲。

【讨论】:

  • @Aaron 不记得在后台线程中执行此操作,或者使用 RxJava,或者使用 AsyncTask 等
  • 是的,我将使用 AsyncTask
  • 一个问题,这段代码好像只选择了第一个实例,如果我想显示播放列表json的最后10个实例怎么办?
  • @Aaron 如果你想获得另一天的播放列表,你可以模仿点击一个按钮(你可以简单地用 JSOUP 做到这一点),或者......所以你可以使用他们的 API :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 1970-01-01
相关资源
最近更新 更多