java实现网易云音乐搜索与播放

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import javazoom.jl.decoder.Bitstream;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
import java.io.*;
import java.net.*;
import java.util.Random;

public class App {
    
    public static void main(String[] args) throws IOException {

        int anInt;

        String idArray[] = geMusicIdArray("虫儿飞");

        if (idArray != null){
            do {
                Random random = new Random();

                anInt = random.nextInt(10);
                System.out.println(anInt);
            }while (!play(getUrl(idArray[anInt])));
        }

    }

    //获取音乐id数组
    public static String[] geMusicIdArray(String musicName){

        String jsonStr = null;
        String id[] = null;

        try {
            String str = URLEncoder.encode(musicName, "utf-8").replaceAll("\\+", "");
            // 转换成encode
            URL url = new URL("http://music.163.com/api/search/pc?s=" + str + "&type=1");
            //拼接url
            HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
            httpCon.setConnectTimeout(3000);
            httpCon.setDoInput(true);
            httpCon.setRequestMethod("GET");
            // 获取相应码
            int respCode = httpCon.getResponseCode();
            if (respCode == 200) {
                // ByteArrayOutputStream相当于内存输出流
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                byte[] buffer = new byte[1024];
                int len = 0;
                // 将输入流转移到内存输出流中
                while ((len = httpCon.getInputStream().read(buffer, 0, buffer.length)) != -1) {
                    out.write(buffer, 0, len);
                }
                // 将内存流转换为字符串
                jsonStr = new String(out.toByteArray());
                System.out.println(jsonStr);

                JSONArray jsonArray = JSONArray.parseArray(JSONObject.parseObject(JSONObject.parseObject(jsonStr).getString("result")).getString("songs"));
                //jsonArray 内就是歌曲信息了 之后可以用jsonArray.getJSONObject(0).getString(/*这里放你要获取的字段名如id*/)获取详细信息

                id = new String[10];
                for (int i = 0; i < jsonArray.size(); i++) {
                    System.out.println(jsonArray.getJSONObject(i).getString("id"));

                    id[i] = jsonArray.getJSONObject(i).getString("id");
                }
            } else {
                System.out.println("网易云错误,错误码为" + respCode);
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return id;
    }

    //播放url音乐
    public static boolean play(String url) throws MalformedURLException {

        URL url1 = new URL(url);

        BufferedInputStream buffer = null;

        try {
            URLConnection connection = url1.openConnection();

            buffer = new BufferedInputStream(connection.getInputStream());

            if (buffer.read() == -1){

                System.out.println("不可用的url:" + url);
                     return false;
            }

//            Bitstream bitstream = new Bitstream(buffer);

            Player player = new Player(buffer);

            player.play();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JavaLayerException e) {
            e.printStackTrace();
        } finally {
            if (buffer != null){
                try {
                    buffer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return true;
    }

    public static String getUrl(String id) {

        return "http://music.163.com/song/media/outer/url?id=" + id + ".mp3";
    }

}

依赖

<dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.66</version>
</dependency>

<dependency>
      <groupId>javazoom</groupId>
      <artifactId>jlayer</artifactId>
      <version>1.0.1</version>
    </dependency>
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要爬取网易音乐,需要先了解其接口。网易音乐的接口文档可以在其官方网站上找到,其中包括了歌曲、歌手、专辑、排行榜等数据的接口。 接下来,你可以使用Java的HttpURLConnection或者HttpClient等类库,发送HTTP请求,获取数据。例如,你可以使用以下代码获取网易音乐热门歌曲: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class NetEaseMusicCrawler { public static void main(String[] args) { try { // 设置请求URL URL url = new URL("https://music.163.com/api/playlist/detail?id=3779629"); // 打开连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 设置请求方式 connection.setRequestMethod("GET"); // 获取响应结果 BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); String line; StringBuilder result = new StringBuilder(); while ((line = reader.readLine()) != null) { result.append(line); } reader.close(); // 输出结果 System.out.println(result.toString()); } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码中,我们通过URL访问网易音乐的热门歌曲接口,并使用HttpURLConnection发送GET请求。最后,我们将响应结果输出到控制台。 注意,为了避免被封IP,爬取数据时需要设置合理的请求间隔时间,并且不要过于频繁地请求同一个接口。另外,需要注意网易音乐的接口可能会随时更新,需要及时更新代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值