Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/michaelnisi/fanboy
Caching iTunes Search Proxy
https://github.com/michaelnisi/fanboy
Last synced: 5 days ago
JSON representation
Caching iTunes Search Proxy
- Host: GitHub
- URL: https://github.com/michaelnisi/fanboy
- Owner: michaelnisi
- License: mit
- Created: 2014-03-10T17:25:33.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2022-12-08T09:42:10.000Z (about 2 years ago)
- Last Synced: 2024-05-02T05:35:37.078Z (8 months ago)
- Language: JavaScript
- Homepage:
- Size: 856 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Fanboy
[![Build Status](https://secure.travis-ci.org/michaelnisi/fanboy.svg)](http://travis-ci.org/michaelnisi/fanboy)
The Fanboy [Node.js](http://nodejs.org/) package provides a caching proxy for a subset of the [iTunes Search API](https://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html).
## Types
### void()
`null` or `undefined`.
### result(obj)
A map or filter callback applied with each JSON result `obj`.
- `obj` The original, JSON parsed, [iTunes search result](https://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html#understand) object.
Returns result or `void()`.
The default callback adds the **required** `guid` property to `obj` and returns it.
### database()
A [Level](https://github.com/Level/) database.
### opts()
The options for the Fanboy cache:
- `country = 'us'` The country code for the search API.
- `hostname = 'itunes.apple.com'` The host name of the store.
- `max` = 500 Number of in-memory non-result terms to save round-trips.
- `media = 'all'` The media type to search for.
- `port = 80` The port to access the store.
- `result` `result()`
- `ttl = 24 * 3600 * 1000` Time in milliseconds before cached items go stale.## Exports
The main module exports the `Fanboy` class, a stateful cache object with a persistent [Level](https://github.com/Level/) cache and minor in-memory black-listing. To access the `Fanboy` class `require('fanboy')`.
### Creating a new cache
`Fanboy(db, opts)`
- `db` `database()` The name of the file system directory for the database.
- `opts` `opts()` Optional parameters of the cache.```js
const { Fanboy, createLevelDB } = require('fanboy')function createCache () {
const location = '/tmp/fanboy'
const db = createLevelDB(location)return new Fanboy(db, opts())
}const fanboy = createCache()
```### Searching the cache
```js
fanboy.search(term, (error, items) => {
if (error) {
return console.error(error)
}for (let item of items) {
console.log(item))
}
})
```This will search remotely and cache the result. Until the `term` expires subsequent requests hit the cache.
### Looking up a guid
```js
fanboy.lookup(guid, (error, item) => {
if (error) {
return console.error(error)
}console.log(item))
})
```In iTunes you can lookup an item by its `guid`.
### Obtaining suggestions for search terms
```js
fanboy.suggest(term, limit, (error, terms) => {
if (error) {
return console.error(error)
}for (let term of terms) {
console.log(term))
}
})
```The suggestions index must be populated by prior searching to yield results. You can `limit` the number of suggested terms.
## REPL
![REPL](https://s3-eu-west-1.amazonaws.com/assets.codes.ink/fanboy/repl.png)
Try the REPL, its methods let you optionally select a property by name ('collectionName') for clearer output.
```
$ ./repl
fanboy> search('wnyc', 'collectionName')
```### Limits
By default the number of result items per term is limited to **50**.
## Installation
With [npm](https://npmjs.org/package/fanboy), do:
```
$ npm install fanboy
```## License
[MIT License](https://github.com/michaelnisi/fanboy/blob/master/LICENSE)