{"_id":"@alexjorgef/bandcamp-scraper","_rev":"4-a4047035d8290a43368a32552bc7b4ba","name":"@alexjorgef/bandcamp-scraper","dist-tags":{"latest":"1.4.5"},"versions":{"1.4.2-1":{"name":"@alexjorgef/bandcamp-scraper","version":"1.4.2-1","keywords":["scraper","api","bandcamp","music","resources","album","song","product","fan"],"author":{"url":"http://simonthiboutot.com","name":"Simon Thiboutôt","email":"salut@simonthiboutot.com"},"license":"MIT","_id":"@alexjorgef/bandcamp-scraper@1.4.2-1","homepage":"https://github.com/masterT/bandcamp-scraper","bugs":{"url":"https://github.com/masterT/bandcamp-scraper/issues"},"dist":{"shasum":"a3c0d713e17c5de92fceb8857236f6961e01035e","tarball":"https://registry.npmjs.org/@alexjorgef/bandcamp-scraper/-/bandcamp-scraper-1.4.2-1.tgz","fileCount":24,"integrity":"sha512-OllfpMaigT8Ex9h3Jpvx6IJaouDxyVbCLPukEXlSiN0cbd6r41CsUgKsy0MG618jDALiNDmwBHr3CFlwp/OC1g==","signatures":[{"sig":"MEQCIAHhJM9frq4ux4wxLvKsdvzuo1VWJrpYr+H0/CJZJpX2AiB1jVI/4oivlGaRsLEbFZ1WNRIyFdsu88Gq6Rc68+asyw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":98801},"main":"lib/index.js","gitHead":"e1bc0a76b8fa5a08818d15b559ff1f83279d8cb4","scripts":{"lint":"standard","test":"standard && jasmine","lint-fix":"standard --fix"},"_npmUser":{"name":"alexjorgef","email":"alex.jorge.m@gmail.com"},"repository":{"url":"git+https://github.com/masterT/bandcamp-scraper.git","type":"git"},"_npmVersion":"8.1.0","description":"A scraper for https://bandcamp.com","directories":{"lib":"lib","example":"examples"},"_nodeVersion":"16.13.0","dependencies":{"ajv":"^4.11.8","json5":"^0.5.1","linez":"^4.1.4","cheerio":"^0.22.0","tinyreq":"^3.2.5","scrape-it":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"jasmine":"^2.8.0","standard":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bandcamp-scraper_1.4.2-1_1719262813571_0.9837809144510214","host":"s3://npm-registry-packages"}},"1.4.3":{"name":"@alexjorgef/bandcamp-scraper","version":"1.4.3","keywords":["scraper","api","bandcamp","music","resources","album","song","product","fan"],"author":{"url":"http://simonthiboutot.com","name":"Simon Thiboutôt","email":"salut@simonthiboutot.com"},"license":"MIT","_id":"@alexjorgef/bandcamp-scraper@1.4.3","maintainers":[{"name":"alexjorgef","email":"alex.jorge.m@gmail.com"}],"homepage":"https://github.com/alexjorgef/bandcamp-scraper","bugs":{"url":"https://github.com/alexjorgef/bandcamp-scraper/issues"},"dist":{"shasum":"507f8c8c5225a446fd52ea58bc1b2059d0312c3c","tarball":"https://registry.npmjs.org/@alexjorgef/bandcamp-scraper/-/bandcamp-scraper-1.4.3.tgz","fileCount":26,"integrity":"sha512-MtyAQqF8URGTh+fenUWhpfNTJDKBzH4TSGWfbX6CswDejkAfyZb9EZH2k06kWwx6G/NOFFj5l4LMidKnfMt0rQ==","signatures":[{"sig":"MEYCIQC0wdBpzy69qVDpNGYi5NZjV36RTTQI60DQ9VQNvWR7rQIhAIiAb3YD/C+pZtmCbhX4OT+qOtyTVv7Lf+mbEYcxftZN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99523},"main":"lib/index.js","gitHead":"0353dbb97dc97f8bf02a9db9000ba86334e51b99","scripts":{"lint":"standard","test":"standard && jasmine","lint-fix":"standard --fix"},"_npmUser":{"name":"alexjorgef","email":"alex.jorge.m@gmail.com"},"repository":{"url":"git+https://github.com/alexjorgef/bandcamp-scraper.git","type":"git"},"_npmVersion":"6.14.18","description":"A scraper for https://bandcamp.com","directories":{"example":"examples"},"_nodeVersion":"14.21.3","dependencies":{"ajv":"^4.11.8","json5":"^0.5.1","linez":"^4.1.4","cheerio":"^0.22.0","tinyreq":"^3.2.5","scrape-it":"^3.3.2"},"_hasShrinkwrap":false,"devDependencies":{"jasmine":"^2.8.0","standard":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bandcamp-scraper_1.4.3_1766032287064_0.4919704590244589","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"@alexjorgef/bandcamp-scraper","version":"1.4.4","keywords":["scraper","api","bandcamp","music","resources","album","song","product","fan"],"author":{"url":"https://simonthiboutot.com/","name":"Simon Thiboutôt","email":"salut@simonthiboutot.com"},"license":"MIT","_id":"@alexjorgef/bandcamp-scraper@1.4.4","maintainers":[{"name":"alexjorgef","email":"alex.jorge.m@gmail.com"}],"homepage":"https://github.com/alexjorgef/bandcamp-scraper","bugs":{"url":"https://github.com/alexjorgef/bandcamp-scraper/issues"},"dist":{"shasum":"e7b4eb8f72481c1402c978f875018b0e5260e109","tarball":"https://registry.npmjs.org/@alexjorgef/bandcamp-scraper/-/bandcamp-scraper-1.4.4.tgz","fileCount":26,"integrity":"sha512-5Q7H3hzWVyQjW65Tp76FiN/W+vwt2d7xI77tA1PCraxFO/Ob10TkkE8EljNHNhALj1fMTtMXXp92WA490AUZ+g==","signatures":[{"sig":"MEUCIQCuE6CtxTwBPj4XRlqXncDjoe6KzBLG/T4E5gubV74qfwIgcWCy6jMgCDo4MA5vPnbGj3rslxxgchXjgmRdiwjqHpU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99665},"main":"lib/index.js","gitHead":"b2604a64b6a19ffe31c246faea9ec644b3849f5b","scripts":{"lint":"standard","test":"standard && jasmine","lint-fix":"standard --fix"},"_npmUser":{"name":"alexjorgef","email":"alex.jorge.m@gmail.com"},"repository":{"url":"git+https://github.com/alexjorgef/bandcamp-scraper.git","type":"git"},"_npmVersion":"10.8.2","description":"A scraper for https://bandcamp.com","directories":{"example":"examples"},"_nodeVersion":"20.19.6","dependencies":{"ajv":"^8.17.1","json5":"^2.2.3","linez":"^4.1.4","cheerio":"^1.1.2","tinyreq":"^3.2.5","scrape-it":"^3.3.2","ajv-formats":"^3.0.1","ajv-draft-04":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jasmine":"^2.8.0","standard":"^16.0.3"},"_npmOperationalInternal":{"tmp":"tmp/bandcamp-scraper_1.4.4_1766069967456_0.5308558161718437","host":"s3://npm-registry-packages-npm-production"}},"1.4.5":{"name":"@alexjorgef/bandcamp-scraper","version":"1.4.5","description":"A scraper for https://bandcamp.com","main":"lib/index.js","scripts":{"test":"standard && jasmine","lint":"standard","lint-fix":"standard --fix"},"repository":{"type":"git","url":"git+https://github.com/alexjorgef/bandcamp-scraper.git"},"author":{"name":"Simon Thiboutôt","email":"salut@simonthiboutot.com","url":"https://simonthiboutot.com/"},"license":"MIT","bugs":{"url":"https://github.com/alexjorgef/bandcamp-scraper/issues"},"homepage":"https://github.com/alexjorgef/bandcamp-scraper","devDependencies":{"jasmine":"^2.8.0","standard":"^16.0.3"},"dependencies":{"ajv":"^8.17.1","ajv-draft-04":"^1.0.0","ajv-formats":"^3.0.1","cheerio":"^1.1.2","json5":"^2.2.3","linez":"^4.1.4","scrape-it":"^6.1.12","tinyreq":"^3.2.5"},"directories":{"example":"examples"},"keywords":["scraper","api","bandcamp","music","resources","album","song","product","fan"],"_id":"@alexjorgef/bandcamp-scraper@1.4.5","gitHead":"f8f22998aa36b4fe5350ffd98d2cf1330070c18b","_nodeVersion":"20.19.6","_npmVersion":"10.8.2","dist":{"integrity":"sha512-xa40r3ti+fe5DCEds4qMvmzLim4dsPie2gtU6/G6MwVS1Xz0ykjY6jeZ/sK46KxDS+py856sWeCKv8bXafVjpw==","shasum":"9b386fbb21adec3043fb703fa9246ec2efc22f3f","tarball":"https://registry.npmjs.org/@alexjorgef/bandcamp-scraper/-/bandcamp-scraper-1.4.5.tgz","fileCount":26,"unpackedSize":99654,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICGOoRZG/BM5NbNwjOVdC+YQrLUsXfc2Uy/1LlaQ8djrAiAmPcHXnqvd+0Qmapi+seN80wAzPf3Ms8RkKiYDfDjFrQ=="}]},"_npmUser":{"name":"alexjorgef","email":"alex.jorge.m@gmail.com"},"maintainers":[{"name":"alexjorgef","email":"alex.jorge.m@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bandcamp-scraper_1.4.5_1766074599783_0.17583297682384558"},"_hasShrinkwrap":false}},"time":{"created":"2024-06-24T21:00:13.416Z","modified":"2025-12-18T16:16:40.126Z","1.4.2-1":"2024-06-24T21:00:13.784Z","1.4.3":"2025-12-18T04:31:27.203Z","1.4.4":"2025-12-18T14:59:27.623Z","1.4.5":"2025-12-18T16:16:39.944Z"},"bugs":{"url":"https://github.com/alexjorgef/bandcamp-scraper/issues"},"author":{"name":"Simon Thiboutôt","email":"salut@simonthiboutot.com","url":"https://simonthiboutot.com/"},"license":"MIT","homepage":"https://github.com/alexjorgef/bandcamp-scraper","keywords":["scraper","api","bandcamp","music","resources","album","song","product","fan"],"repository":{"type":"git","url":"git+https://github.com/alexjorgef/bandcamp-scraper.git"},"description":"A scraper for https://bandcamp.com","maintainers":[{"name":"alexjorgef","email":"alex.jorge.m@gmail.com"}],"readme":"# bandcamp-scraper\n\n[![npm version](https://badge.fury.io/js/@alexjorgef%2Fbandcamp-scraper.svg)](https://badge.fury.io/js/@alexjorgef%2Fbandcamp-scraper)\n[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)\n\n[![Bandcamp Logo](assets/bandcamp.png)](https://bandcamp.com)\n\n> A scraper for [Bandcamp](https://bandcamp.com), based on [masterT/bandcamp-scraper@9910ebe](https://github.com/masterT/bandcamp-scraper/tree/9910ebe1a153472c0c523f72fb64cacdb3ed143f)\n\nThe scraper allows you to:\n\n- search `artist`, `album`, `track`, `fan`, `label`\n- get album urls from an artist url\n- get album info from an album url\n- get album products from an album url\n- get artist info from an artist url\n\n## Why ?\n\nBecause Bandcamp has shut down their public API and don't plan to reopen it.\n\n[https://bandcamp.com/developer](https://bandcamp.com/developer)\n\n## Installation\n\n```bash\nnpm i --save bandcamp-scraper\n```\n\n## Usage\n\n### `search(params, callback)`\n\nSearch any resources that match the given `params.query` for the current `params.page`.\n\n- params _Object_ - query _String_ - page _Integer_ (default `1`)\n- callback _Function(error, searchResults)_\n\n#### Search Results\n\nAn array of resources that have different properties depending on their _type_ property: **artist**, **album**, **track**, **fan**, or **label**.\n\nEvery resource matches the [search-result JSON schema](/schemas/search-result.json).\n\nExample:\n\n```js\nconst bandcamp = require('bandcamp-scraper')\n\nconst params = {\n  query: 'Coeur de pirate',\n  page: 1\n}\n\nbandcamp.search(params, function (error, searchResults) {\n  if (error) {\n    console.log(error)\n  } else {\n    console.log(searchResults)\n  }\n})\n```\n\n[View example with output](examples/search.js).\n\n### `getAlbumsWithTag(params, callback)`\n\nSearch for albums with the tag `params.tag` for the current `params.page`.\n\n- params _Object_ - tag _String_ - page _Integer_ (default `1`)\n- callback _Function(error, tagResults)_\n\n#### Tag Results\n\nAn array of album information. Matches the [tag-result JSON schema](/schemas/tag-result.json).\n\nExample:\n\n```js\nconst bandcamp = require('bandcamp-scraper')\n\nconst params = {\n  tag: 'nuwrld',\n  page: 1\n}\n\nbandcamp.getAlbumsWithTag(params, function (error, tagResults) {\n  if (error) {\n    console.log(error)\n  } else {\n    console.log(tagResults)\n  }\n})\n```\n\n[View example with output](examples/tag.js).\n\n### `getAlbumUrls(artistUrl, callback)`\n\nRetrieve the album URLs from an artist URL.\nPlease note: for Bandcamp labels you may want to use the `getArtistsUrls` function to retrieve the list of signed artists first.\n\n- artistUrl _String_\n- callback _Function(error, albumUrls)_\n\nExample:\n\n```js\nconst bandcamp = require('bandcamp-scraper')\n\nconst artistUrl = 'http://musique.coeurdepirate.com/'\nbandcamp.getAlbumUrls(artistUrl, function (error, albumUrls) {\n  if (error) {\n    console.log(error)\n  } else {\n    console.log(albumUrls)\n  }\n})\n```\n\n[View example with output](examples/getAlbumUrls.js).\n\n### `getAlbumProducts(albumUrl, callback)`\n\nRetrieves all the album's products from its URL.\n\n- albumUrl _String_\n- callback _Function(error, albumProducts)_\n\n#### Album Products\n\nAn array of album products that matches the [album-product JSON schema](/schemas/album-product.json).\n\nExample:\n\n```js\nconst bandcamp = require('bandcamp-scraper')\n\nconst albumUrl = 'http://musique.coeurdepirate.com/album/blonde'\nbandcamp.getAlbumProducts(albumUrl, function (error, albumProducts) {\n  if (error) {\n    console.log(error)\n  } else {\n    console.log(albumProducts)\n  }\n})\n```\n\n[View example with output](examples/getAlbumProducts.js).\n\n### `getAlbumInfo(albumUrl, callback)`\n\nRetrieves the album's info from its URL.\n\n- albumUrl _String_\n- callback _Function(error, albumInfo)_\n\n#### Album Info\n\nAn _Object_ that represents the album's info. It matches the [album-info JSON schema](/schemas/album-info.json).\n\nExample:\n\n```js\nconst bandcamp = require('bandcamp-scraper')\n\nconst albumUrl = 'http://musique.coeurdepirate.com/album/blonde'\nbandcamp.getAlbumInfo(albumUrl, function (error, albumInfo) {\n  if (error) {\n    console.log(error)\n  } else {\n    console.log(albumInfo)\n  }\n})\n```\n\n[View example with output](examples/getAlbumInfo.js).\n\n### `getArtistUrls(labelUrl, callback)`\n\nRetrieves an array of artist URLs from a label's URL for further scraping.\n\n- labelUrl _String_\n- callback _Function(error, albumInfo)_\n\nExample:\n\n```js\nconst bandcamp = require('bandcamp-scraper')\n\nconst labelUrl = 'https://randsrecords.bandcamp.com'\nbandcamp.getArtistUrls(labelUrl, function (error, artistsUrls) {\n  if (error) {\n    console.log(error)\n  } else {\n    console.log(artistsUrls)\n  }\n})\n```\n\n[View example with output](examples/getArtistUrls.js).\n\n### `getArtistInfo(artistUrl, callback)`\n\nRetrieves the artist's info from its URL.\n\n- artistUrl _String_\n- callback _Function(error, artistInfo)_\n\n#### Artist Info\n\nAn _Object_ that represents the artist's info. It matches the [artist-info JSON schema](/schemas/artist-info.json).\n\nExample:\n\n```js\nconst bandcamp = require('bandcamp-scraper')\n\nconst artistUrl = 'http://musique.coeurdepirate.com'\nbandcamp.getArtistInfo(artistUrl, function (error, artistInfo) {\n  if (error) {\n    console.log(error)\n  } else {\n    console.log(artistInfo)\n  }\n})\n```\n\n[View example with output](examples/getArtistInfo.js).\n\n## Test\n\nFeature tests are run _daily_, thanks to [GitHub Action](https://docs.github.com/en/free-pro-team@latest/actions) schedule actions. This way we know if the scraper is ever broken.\n\nRun the test:\n\n```bash\nnpm test\n```\n\n## Contributing\n\nContribution is welcome! Open an issue first.\n\n## License\n\nMIT.\n","readmeFilename":"README.md"}