npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@meting/core

v1.6.0

Published

A powerful music API framework to accelerate development - Node.js port. Support Netease, Tencent, Kugou, Baidu, Kuwo music platforms.

Downloads

271

Readme

:cake: A powerful music API framework for Node.js

Introduction

Meting is a powerful music API framework designed to accelerate music-related development. This is the Node.js version of the original PHP Meting project, providing unified APIs for multiple music platforms.

Features

  • 🎵 Multi-Platform Support - Supports NetEase Cloud Music, Tencent Music, KuGou, Baidu Music, and Kuwo
  • 🚀 Lightweight & Fast - Zero external dependencies, built with Node.js native modules only
  • 📱 Modern Async/Await - Promise-based APIs with full async/await support
  • 🔄 Unified Interface - Standardized data format across all music platforms
  • 🔐 Built-in Encryption - Platform-specific encryption and signing built-in
  • ⚡ Chain-able API - Fluent interface design for elegant code

Requirements

  • Node.js >= 12.0.0
  • No external dependencies required

Installation

Install via npm:

npm install @meting/core

Or via yarn:

yarn add @meting/core

Quick Start

Basic Usage

import Meting from '@meting/core';

// Initialize with a music platform
const meting = new Meting('netease'); // 'netease', 'tencent', 'kugou', 'baidu', 'kuwo'

// Enable data formatting for consistent output
meting.format(true);

// Search for songs
try {
  const searchResult = await meting.search('Hello Adele', { page: 1, limit: 10 });
  const songs = JSON.parse(searchResult);
  console.log(songs);
} catch (error) {
  console.error('Search failed:', error);
}

Comprehensive Example

import Meting from '@meting/core';

async function musicExample() {
  const meting = new Meting('netease');
  meting.format(true);
  
  try {
    // 1. Search for songs
    const searchResult = await meting.search('Hello Adele');
    const songs = JSON.parse(searchResult);
    
    if (songs.length > 0) {
      const song = songs[0];
      console.log(`Found: ${song.name} by ${song.artist.join(', ')}`);
      
      // 2. Get song details
      const details = await meting.song(song.id);
      console.log('Song details:', JSON.parse(details));
      
      // 3. Get streaming URL
      const urlInfo = await meting.url(song.url_id, 320); // 320kbps
      console.log('Streaming URL:', JSON.parse(urlInfo));
      
      // 4. Get lyrics
      const lyrics = await meting.lyric(song.lyric_id);
      console.log('Lyrics:', JSON.parse(lyrics));
      
      // 5. Get album cover
      const cover = await meting.pic(song.pic_id, 300); // 300x300
      console.log('Album cover:', JSON.parse(cover));
    }
    
    // Switch platform and search again
    meting.site('tencent');
    const tencentResult = await meting.search('周杰伦');
    console.log('Tencent results:', JSON.parse(tencentResult));
    
  } catch (error) {
    console.error('Error:', error);
  }
}

musicExample();

API Documentation

Constructor

const meting = new Meting(server);
  • server (string): Music platform ('netease', 'tencent', 'kugou', 'baidu', 'kuwo')

Core Methods

Platform Management

meting.site(server)    // Switch music platform
meting.cookie(cookie)  // Set platform-specific cookies
meting.format(enable)  // Enable/disable data formatting

Search & Discovery

// Search for songs, albums, or artists
await meting.search(keyword, {
  type: 1,
  page: 1,
  limit: 30,
});

Search Options

  • type (number, optional) - Search category for providers that support it. NetEase uses 1 for songs (default), 10 for albums, 100 for artists, etc.
  • page (number, optional) - Page number starting from 1. Defaults to 1.
  • limit (number, optional) - Number of results per page. Defaults to 30.

Music Information

await meting.song(id)           // Get song details
await meting.album(id)          // Get album information
await meting.artist(id, limit)  // Get artist's songs
await meting.playlist(id)       // Get playlist content

Media Resources

await meting.url(id, bitrate)   // Get streaming URL
await meting.lyric(id)          // Get song lyrics
await meting.pic(id, size)      // Get album artwork

Supported Platforms

| Platform | Code | Search | Song | Album | Artist | Playlist | URL | Lyric | Picture | |----------|------|--------|------|-------|--------|----------|-----|-------|---------| | NetEase Cloud Music | netease | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | Tencent Music | tencent | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | KuGou Music | kugou | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | Baidu Music | baidu | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | Kuwo Music | kuwo | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |

Data Format

When format(true) is enabled, all platforms return standardized JSON:

{
  "id": "35847388",
  "name": "Hello",
  "artist": ["Adele"],
  "album": "Hello",
  "pic_id": "1407374890649284",
  "url_id": "35847388", 
  "lyric_id": "35847388",
  "source": "netease"
}

Development

Running Examples

# Install dependencies
npm install

# Run the example
npm start
# or
npm run example

Running Tests

# Run tests for all platforms
npm test

Build from Source

# Build the library
npm run build

# Development mode with file watching
npm run dev

Error Handling

The library uses Promise-based error handling. Always wrap API calls in try-catch blocks:

try {
  const result = await meting.search('keyword');
  // Handle success
} catch (error) {
  console.error('API Error:', error);
  
  // Try fallback platform
  meting.site('tencent');
  const fallback = await meting.search('keyword');
}

Rate Limiting

To avoid being rate-limited by music platforms:

  • Add delays between consecutive requests
  • Don't make too many requests in a short time
  • Consider implementing request queuing for heavy usage
// Example: Add delay between requests
await new Promise(resolve => setTimeout(resolve, 2000));

Important Notes

  • Copyright Compliance: Respect music platform terms of service and copyright laws
  • Platform Changes: Music platform APIs may change without notice
  • Availability: Some features may be restricted based on geographical location
  • Rate Limits: Each platform has different rate limiting policies

Related Projects

Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Author

Meting Node.js © metowolf, Released under the MIT License.

Blog @meto · GitHub @metowolf · Twitter @metowolf