New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More

app-store-scraper

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

app-store-scraper - npm Package Compare versions

Comparing version 0.8.0 to 0.9.0

@@ -8,4 +8,37 @@ 'use strict';

const parseString = require('xml2js').parseString;
function cleanList (results) {
const reviews = results.feed.entry || [];
return reviews.slice(1).map((review) => ({
id: review.id.label,
userName: review.author.name.label,
userUrl: review.author.uri.label,
version: review['im:version'].label,
score: parseInt(review['im:rating'].label),
title: review.title.label,
text: review.content.label,
url: review.link.attributes.href
}));
}
const reviews = (opts) => new Promise((resolve) => {
validate(opts);
if (opts.id) {
resolve(opts.id);
} else if (opts.appId) {
resolve(app(opts).then(app => app.id));
}
})
.then((id) => {
opts = opts || {};
opts.sort = opts.sort || c.sort.RECENT;
opts.page = opts.page || 1;
opts.country = opts.country || 'us';
const url = `https://itunes.apple.com/${opts.country}/rss/customerreviews/page=${opts.page}/id=${id}/sortby=${opts.sort}/json`;
return common.request(url);
})
.then(JSON.parse)
.then(cleanList);
function validate (opts) {

@@ -20,62 +53,11 @@ if (!opts.id && !opts.appId) {

if (opts.page && opts.page < 0) {
throw new Error('Page cannot be lower than 0');
if (opts.page && opts.page < 1) {
throw new Error('Page cannot be lower than 1');
}
if (opts.page && opts.page > 9) {
throw new Error('Page cannot be greater than 9');
if (opts.page && opts.page > 10) {
throw new Error('Page cannot be greater than 10');
}
}
function parseXML (string) {
return new Promise(function (resolve, reject) {
return parseString(string, (err, res) => {
if (err) {
reject(err);
return;
}
resolve(res);
});
});
}
function extractReviews (xml) {
const toJSON = (item) => {
return {
id: item.id[0],
date: (new Date(item.updated[0])),
userName: item.author[0].name[0],
userUrl: item.author[0].uri[0],
version: item['im:version'][0],
score: parseInt(item['im:rating'][0]),
title: item.title[0],
text: item.content[0]['_'],
url: item.link[0].$.href
};
};
const list = xml.feed.entry || [];
return list.slice(1).map(toJSON);
}
const reviews = (opts) => new Promise((resolve) => {
validate(opts);
if (opts.id) {
resolve(opts.id);
} else if (opts.appId) {
resolve(app(opts).then(app => app.id));
}
})
.then((id) => {
opts = opts || {};
opts.sort = opts.sort || c.sort.RECENT;
opts.page = (opts.page + 1) || 1;
opts.country = opts.country || 'us';
const url = `https://itunes.apple.com/${opts.country}/rss/customerreviews/id=${id}/sortby=${opts.sort}/page=${opts.page}/xml`;
return common.request(url);
})
.then(parseXML)
.then(extractReviews);
module.exports = reviews;
{
"name": "app-store-scraper",
"version": "0.8.0",
"version": "0.9.0",
"description": "scrape data from the itunes app store",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -258,3 +258,2 @@ # app-store-scraper [![Build Status](https://secure.travis-ci.org/facundoolano/app-store-scraper.png)](http://travis-ci.org/facundoolano/app-store-scraper)

[ { id: '1472864600',
date: '2017-03-08T08:08:00.000Z',
userName: 'Linda D. Lopez',

@@ -268,3 +267,2 @@ userUrl: 'https://itunes.apple.com/us/reviews/id324568166',

{ id: '1472864708',
date: '2017-02-08T08:08:00.000Z',
userName: 'Jennamaxkidd',

@@ -271,0 +269,0 @@ userUrl: 'https://itunes.apple.com/us/reviews/id223990784',

@@ -10,4 +10,2 @@ 'use strict';

assert(review.id);
assert(review.date);
assert.instanceOf(review.date, Date);
assert.isString(review.userName);

@@ -43,7 +41,7 @@ assert(review.userName);

id: '553834731',
page: 10
page: 11
})
.then(assert.fail)
.catch((e) => assert.equal(e.message, 'Page cannot be greater than 9'));
.catch((e) => assert.equal(e.message, 'Page cannot be greater than 10'));
});
});