{"_id":"@aribradshaw/billboard-top-100","_rev":"4-7340cd54df5e57e52eb6893de9e8d9c1","name":"@aribradshaw/billboard-top-100","dist-tags":{"latest":"3.0.4"},"versions":{"3.0.0":{"name":"@aribradshaw/billboard-top-100","version":"3.0.0","keywords":["billboard","charts","songs","music","api","scraper","hot-100","music-charts","billboard-charts"],"author":{"url":"https://github.com/darthbatman","name":"Rishi Masand","email":"masandrishi@gmail.com"},"license":"MIT","_id":"@aribradshaw/billboard-top-100@3.0.0","maintainers":[{"name":"aribradshaw","email":"AriBradshawAZ@Gmail.com"}],"homepage":"https://github.com/aribradshaw/billboard-top-100#readme","bugs":{"url":"https://github.com/aribradshaw/billboard-top-100/issues"},"dist":{"shasum":"8df9c8fb5bde5ca8d31b1ab0fab0ffbea93490a0","tarball":"https://registry.npmjs.org/@aribradshaw/billboard-top-100/-/billboard-top-100-3.0.0.tgz","fileCount":5,"integrity":"sha512-H5oIphfaqfQfcDUVdWQDBQMSWhi5qoBn3Bcsh/pjtW9nlcLzYHnY0CWOMis3VmhyqbPq8a6n1ey2yBeepUaN+A==","signatures":[{"sig":"MEYCIQDyJ2Jtd7ojc1i/4yirM3UwOBwHSbMFcFgAiVHy0jVCQwIhAOW/TCpY1JgrfSWEckTxUZkBimAajdxxi0blHMqI4u3y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15284},"main":"billboard-top-100.js","type":"module","engines":{"node":">=18.0.0"},"exports":{".":{"import":"./billboard-top-100.js","require":"./billboard-top-100.js"}},"gitHead":"09647e8d55a1c745456ca67a5f987a4c87c0c00b","scripts":{"lint":"eslint billboard-top-100.js test/test.js","test":"mocha","example":"node example.js"},"_npmUser":{"name":"aribradshaw","email":"AriBradshawAZ@Gmail.com"},"repository":{"url":"git+https://github.com/aribradshaw/billboard-top-100.git","type":"git"},"_npmVersion":"10.9.2","description":"Gets the top songs, albums, and artists from Billboard's charts","directories":{"test":"test"},"_nodeVersion":"22.15.0","dependencies":{"moment":"^2.29.4","cheerio":"^1.0.0-rc.12","node-fetch":"^2.7.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0","eslint":"^8.55.0","eslint-config-airbnb":"^19.0.4"},"_npmOperationalInternal":{"tmp":"tmp/billboard-top-100_3.0.0_1753022667547_0.06307323931307796","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"@aribradshaw/billboard-top-100","version":"3.0.2","keywords":["billboard","charts","songs","music","api","scraper","hot-100","music-charts","billboard-charts"],"author":{"url":"https://github.com/darthbatman","name":"Rishi Masand","email":"masandrishi@gmail.com"},"license":"MIT","_id":"@aribradshaw/billboard-top-100@3.0.2","maintainers":[{"name":"aribradshaw","email":"AriBradshawAZ@Gmail.com"}],"homepage":"https://github.com/aribradshaw/billboard-top-100#readme","bugs":{"url":"https://github.com/aribradshaw/billboard-top-100/issues"},"dist":{"shasum":"290e90a9840b5e1f6c6d89b72006319a8fde0988","tarball":"https://registry.npmjs.org/@aribradshaw/billboard-top-100/-/billboard-top-100-3.0.2.tgz","fileCount":5,"integrity":"sha512-o1WfKNSzj9YwDPIWqYYX8MKL8jtuVuOu4yZ7tjRY2LJUy/rQXHeRj9BEeuHbNziqEjlOywyYpcsRtUYeRXbxjw==","signatures":[{"sig":"MEUCIA6qV8tIq0Bzw3SFaw9qzFUW1F3f64OmyRc1mWbX/QBpAiEA6/kQlYWCFcfNhCYAhs8Zyg4S6ttQo9fpVKKaMvQOIZc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15615},"main":"billboard-top-100.js","type":"module","engines":{"node":">=18.0.0"},"exports":{".":{"import":"./billboard-top-100.js","require":"./billboard-top-100.js"}},"gitHead":"c9db4be88732fa2603c564cde1c0f53be763fc32","scripts":{"lint":"eslint billboard-top-100.js test/test.js","test":"mocha","example":"node example.js"},"_npmUser":{"name":"aribradshaw","email":"AriBradshawAZ@Gmail.com"},"repository":{"url":"git+https://github.com/aribradshaw/billboard-top-100.git","type":"git"},"_npmVersion":"10.9.2","description":"Gets the top songs, albums, and artists from Billboard's charts","directories":{"test":"test"},"_nodeVersion":"22.15.0","dependencies":{"moment":"^2.29.4","cheerio":"^1.0.0-rc.12","node-fetch":"^2.7.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0","eslint":"^8.55.0","eslint-config-airbnb":"^19.0.4"},"_npmOperationalInternal":{"tmp":"tmp/billboard-top-100_3.0.2_1753023346124_0.08505381233264764","host":"s3://npm-registry-packages-npm-production"}},"3.0.3":{"name":"@aribradshaw/billboard-top-100","version":"3.0.3","keywords":["billboard","charts","songs","music","api","scraper","hot-100","music-charts","billboard-charts"],"author":{"url":"https://github.com/darthbatman","name":"Rishi Masand","email":"masandrishi@gmail.com"},"license":"MIT","_id":"@aribradshaw/billboard-top-100@3.0.3","maintainers":[{"name":"aribradshaw","email":"AriBradshawAZ@Gmail.com"}],"homepage":"https://github.com/aribradshaw/billboard-top-100#readme","bugs":{"url":"https://github.com/aribradshaw/billboard-top-100/issues"},"dist":{"shasum":"2ec4bae9bf093325a1ea1aaa6ffa1daeb2a680fd","tarball":"https://registry.npmjs.org/@aribradshaw/billboard-top-100/-/billboard-top-100-3.0.3.tgz","fileCount":5,"integrity":"sha512-Ybximv+UhxnBir5h15DPHKwmcrCbH0SJbPFiLrymd3jgbYkv2yziO6ywO6NTuXQmjYFr5TGyoP6Kj/ITDPOKdA==","signatures":[{"sig":"MEQCIHGiPz9j2ZkaNHHmGr9iL3qi/3zaziO52BJ+O7yXeti1AiBj8IEHIAbzNsKoWNpyOhDgXyo6Hw49jQXU5WT0c5De/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15318},"main":"billboard-top-100.js","type":"module","engines":{"node":">=18.0.0"},"exports":{".":{"import":"./billboard-top-100.js","require":"./billboard-top-100.js"}},"gitHead":"b1122eecdef53bdb87c44b17a282ed6f58608a8b","scripts":{"lint":"eslint billboard-top-100.js test/test.js","test":"mocha","example":"node example.js"},"_npmUser":{"name":"aribradshaw","email":"AriBradshawAZ@Gmail.com"},"repository":{"url":"git+https://github.com/aribradshaw/billboard-top-100.git","type":"git"},"_npmVersion":"10.8.2","description":"Gets the top songs, albums, and artists from Billboard's charts","directories":{"test":"test"},"_nodeVersion":"18.20.8","dependencies":{"moment":"^2.29.4","cheerio":"^1.0.0-rc.12","node-fetch":"^2.7.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","mocha":"^10.2.0","eslint":"^8.55.0","eslint-config-airbnb":"^19.0.4"},"_npmOperationalInternal":{"tmp":"tmp/billboard-top-100_3.0.3_1753023818042_0.7700568416204914","host":"s3://npm-registry-packages-npm-production"}},"3.0.4":{"name":"@aribradshaw/billboard-top-100","version":"3.0.4","description":"Gets the top songs, albums, and artists from Billboard's charts","main":"billboard-top-100.js","directories":{"test":"test"},"dependencies":{"cheerio":"^1.0.0-rc.12","moment":"^2.29.4"},"devDependencies":{"chai":"^5.2.1","eslint":"^8.57.1","eslint-config-airbnb":"^19.0.4","mocha":"^11.7.1"},"scripts":{"lint":"eslint billboard-top-100.js test/test.js","test":"mocha","example":"node example.js"},"repository":{"type":"git","url":"git+https://github.com/aribradshaw/billboard-top-100.git"},"keywords":["billboard","charts","songs","music","api","scraper","hot-100","music-charts","billboard-charts"],"author":{"name":"Rishi Masand","email":"masandrishi@gmail.com","url":"https://github.com/darthbatman"},"license":"MIT","bugs":{"url":"https://github.com/aribradshaw/billboard-top-100/issues"},"homepage":"https://github.com/aribradshaw/billboard-top-100#readme","engines":{"node":">=18.0.0"},"type":"module","exports":{".":{"import":"./billboard-top-100.js","require":"./billboard-top-100.js"}},"_id":"@aribradshaw/billboard-top-100@3.0.4","gitHead":"c1638e332a176caba81d331c2c227ac0f03a8155","_nodeVersion":"22.15.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-Go4X0pi7rNBGm28p6jYQlc1QaDcGqZlRvse5ASOzCFQiGPSYzGp9qBV0wXdscrLq5fBumtmmLkYU4vWtirmPiQ==","shasum":"c7c40cb0bbd85bdc6ec288fb49fd6b58faefc356","tarball":"https://registry.npmjs.org/@aribradshaw/billboard-top-100/-/billboard-top-100-3.0.4.tgz","fileCount":5,"unpackedSize":16637,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCwmYUbs8hE+rpUYlViozNJMltjSlGQX1IHiVFWblVajQIhAPcXGfCr8IDXFaoHam0JC9VY4kQuKltDGiprcHT5Qtdp"}]},"_npmUser":{"name":"aribradshaw","email":"AriBradshawAZ@Gmail.com"},"maintainers":[{"name":"aribradshaw","email":"AriBradshawAZ@Gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/billboard-top-100_3.0.4_1753024578471_0.8387960261490672"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-20T14:44:27.463Z","modified":"2025-07-20T15:16:18.822Z","3.0.0":"2025-07-20T14:44:27.746Z","3.0.2":"2025-07-20T14:55:46.301Z","3.0.3":"2025-07-20T15:03:38.261Z","3.0.4":"2025-07-20T15:16:18.657Z"},"bugs":{"url":"https://github.com/aribradshaw/billboard-top-100/issues"},"author":{"name":"Rishi Masand","email":"masandrishi@gmail.com","url":"https://github.com/darthbatman"},"license":"MIT","homepage":"https://github.com/aribradshaw/billboard-top-100#readme","keywords":["billboard","charts","songs","music","api","scraper","hot-100","music-charts","billboard-charts"],"repository":{"type":"git","url":"git+https://github.com/aribradshaw/billboard-top-100.git"},"description":"Gets the top songs, albums, and artists from Billboard's charts","maintainers":[{"name":"aribradshaw","email":"AriBradshawAZ@Gmail.com"}],"readme":"﻿# Billboard Top 100\r\n\r\nA modern Node.js library for fetching Billboard chart data. This is a fork of the original [billboard-top-100](https://github.com/darthbatman/billboard-top-100) library, updated to use modern dependencies and ES modules.\r\n\r\n## Version 3.0.4 - Latest Release\r\n\r\nThis version includes significant improvements:\r\n\r\n- ✅ **Node.js 18+ Support**: Updated to require Node.js 18+ for better performance and modern features\r\n- ✅ **Fixed ReadableStream Issue**: Resolved the `ReadableStream is not defined` error that was breaking CI/CD\r\n- ✅ **Updated Dependencies**: All dependencies updated to latest stable versions\r\n- ✅ **Improved Test Reliability**: Fixed timeout issues and improved test stability\r\n- ✅ **Better CI/CD**: Updated GitHub Actions to test against Node.js 18 and 20\r\n- ✅ **Stable CI/CD Pipeline**: All workflows now properly configured for Node.js 18+\r\n- ✅ **npm Token Configured**: Repository secrets updated for automatic publishing\r\n- ✅ **No Deprecated Dependencies**: Removed all deprecated packages (node-fetch, har-validator, etc.)\r\n- ✅ **Native Fetch**: Uses Node.js 18+ native fetch for better performance\r\n\r\n## Features\r\n\r\n- ✅ **Modern Dependencies**: Uses `node-fetch` instead of deprecated `request` package\r\n- ✅ **ES Modules**: Full ES module support with `import`/`export`\r\n- ✅ **Security Updates**: Updated all dependencies to latest secure versions\r\n- ✅ **No Deprecation Warnings**: All deprecated packages have been replaced\r\n- ✅ **TypeScript Ready**: Can be easily used in TypeScript projects\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @aribradshaw/billboard-top-100\r\n```\r\n\r\n## Usage\r\n\r\n### ES Modules (Recommended)\r\n\r\n```javascript\r\nimport { getChart, listCharts } from '@aribradshaw/billboard-top-100';\r\n\r\n// Get current Hot 100 chart\r\ngetChart('hot-100', (err, chart) => {\r\n  if (err) {\r\n    console.error('Error:', err);\r\n    return;\r\n  }\r\n  \r\n  console.log('Week of:', chart.week);\r\n  console.log('Number 1 song:', chart.songs[0]);\r\n});\r\n\r\n// Get a specific week's chart\r\ngetChart('hot-100', '2023-12-30', (err, chart) => {\r\n  if (err) {\r\n    console.error('Error:', err);\r\n    return;\r\n  }\r\n  \r\n  console.log('Chart for week of:', chart.week);\r\n  console.log('Previous week:', chart.previousWeek);\r\n  console.log('Next week:', chart.nextWeek);\r\n});\r\n\r\n// List all available charts\r\nlistCharts((err, charts) => {\r\n  if (err) {\r\n    console.error('Error:', err);\r\n    return;\r\n  }\r\n  \r\n  console.log('Available charts:', charts);\r\n});\r\n```\r\n\r\n### CommonJS (Legacy)\r\n\r\n```javascript\r\nconst { getChart, listCharts } = require('@aribradshaw/billboard-top-100');\r\n\r\n// Same usage as above\r\n```\r\n\r\n## API Reference\r\n\r\n### `getChart(chartName, date, callback)`\r\n\r\nFetches a specific Billboard chart.\r\n\r\n**Parameters:**\r\n- `chartName` (string): The name of the chart (e.g., 'hot-100', 'latin-songs', 'artist-100')\r\n- `date` (string, optional): The date in YYYY-MM-DD format. If omitted, gets the current week's chart\r\n- `callback` (function): Callback function with signature `(error, chart)`\r\n\r\n**Returns:**\r\n- `chart` object with the following structure:\r\n  ```javascript\r\n  {\r\n    week: '2023-12-30',\r\n    previousWeek: {\r\n      date: '2023-12-23',\r\n      url: 'http://www.billboard.com/charts/hot-100/2023-12-23'\r\n    },\r\n    nextWeek: {\r\n      date: '2024-01-06',\r\n      url: 'http://www.billboard.com/charts/hot-100/2024-01-06'\r\n    },\r\n    songs: [\r\n      {\r\n        rank: 1,\r\n        title: 'Song Title',\r\n        artist: 'Artist Name',\r\n        cover: 'https://charts-static.billboard.com/img/...',\r\n        position: {\r\n          positionLastWeek: 1,\r\n          peakPosition: 1,\r\n          weeksOnChart: 14\r\n        }\r\n      }\r\n      // ... more songs\r\n    ]\r\n  }\r\n  ```\r\n\r\n### `listCharts(callback)`\r\n\r\nLists all available Billboard charts.\r\n\r\n**Parameters:**\r\n- `callback` (function): Callback function with signature `(error, charts)`\r\n\r\n**Returns:**\r\n- `charts` array with objects containing:\r\n  ```javascript\r\n  [\r\n    {\r\n      name: 'Hot 100',\r\n      url: 'http://www.billboard.com/charts/hot-100'\r\n    }\r\n    // ... more charts\r\n  ]\r\n  ```\r\n\r\n## Available Charts\r\n\r\n- `hot-100` - Billboard Hot 100\r\n- `latin-songs` - Hot Latin Songs\r\n- `artist-100` - Artist 100\r\n- And many more! Use `listCharts()` to see all available charts.\r\n\r\n## Error Handling\r\n\r\nThe library uses callback-style error handling:\r\n\r\n```javascript\r\ngetChart('hot-100', (err, chart) => {\r\n  if (err) {\r\n    console.error('Error fetching chart:', err);\r\n    return;\r\n  }\r\n  \r\n  // Use chart data\r\n  console.log(chart);\r\n});\r\n```\r\n\r\n## Development\r\n\r\n### Prerequisites\r\n\r\n- Node.js 18.0.0 or higher\r\n- npm\r\n\r\n### Setup\r\n\r\n```bash\r\ngit clone https://github.com/aribradshaw/billboard-top-100.git\r\ncd billboard-top-100\r\nnpm install\r\n```\r\n\r\n### Running Tests\r\n\r\n```bash\r\nnpm test\r\n```\r\n\r\n### Linting\r\n\r\n```bash\r\nnpm run lint\r\n```\r\n\r\n## Changes from Original\r\n\r\nThis fork includes the following improvements over the original library:\r\n\r\n1. **Modern Dependencies**:\r\n   - Replaced deprecated `request` package with `node-fetch`\r\n   - Updated all dependencies to latest versions\r\n   - Removed security vulnerabilities\r\n\r\n2. **ES Module Support**:\r\n   - Full ES module support with `import`/`export`\r\n   - Compatible with modern Node.js applications\r\n   - TypeScript-friendly\r\n\r\n3. **Better Error Handling**:\r\n   - Improved error messages\r\n   - More robust HTTP request handling\r\n\r\n4. **Code Quality**:\r\n   - Updated ESLint configuration\r\n   - Better code formatting\r\n   - Removed deprecated code patterns\r\n\r\n## License\r\n\r\nMIT License - see the [LICENSE](LICENSE) file for details.\r\n\r\n## Contributing\r\n\r\nContributions are welcome! Please feel free to submit a Pull Request.\r\n\r\n## Disclaimer\r\n\r\nThis library scrapes Billboard's website. Please be respectful of their servers and use this library responsibly. Billboard's terms of service should be reviewed before using this library in production applications.\r\n","readmeFilename":"README.md"}