metowolf / meting
A powerful music API framework to accelerate development.
Installs: 15 180
Dependents: 4
Suggesters: 0
Security: 0
Stars: 1 846
Watchers: 41
Forks: 488
Open Issues: 0
Language:JavaScript
pkg:composer/metowolf/meting
Requires
- php: >=5.4.0
- ext-curl: *
- ext-openssl: *
Suggests
- ext-bcmath: Required to use BC Math calculate RSA.
- ext-openssl: Required to use OpenSSL encrypt params.
This package is auto-updated.
Last update: 2025-10-19 21:42:48 UTC
README
π° 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, Xiami, 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', 'xiami', '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', 'xiami', '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 uses1for songs (default),10for albums,100for artists, etc.page(number, optional) - Page number starting from 1. Defaults to1.limit(number, optional) - Number of results per page. Defaults to30.
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 |
β | β | β | β | β | β | β | β |
| Xiami Music | xiami |
β | β | β | β | β | β | β | β |
| 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
- Original PHP Meting - The original PHP version
- MoePlayer/Hermit-X - WordPress music player
- mengkunsoft/MKOnlineMusicPlayer - Online music player
- injahow/meting-api - RESTful API wrapper
- yiyungent/Meting4Net - .NET version
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.
Made with β€οΈ for the music community
