facundoolano / app-store-scraper Goto Github PK
View Code? Open in Web Editor NEWscrape data from the itunes app store
License: MIT License
scrape data from the itunes app store
License: MIT License
Hi.
Is it possible to get the number of times an app was downloaded / installed?
I'm only concered about getting this for my app, but I need an API for that, not viewing in the app portal.
I've tried a few different appIds but all result in same
like the ones in google-play-scraper
store.device.IOS
does not exist.
If results.feed.entry exists but is not a valid type array (i.e. dictionary) in our case, this error occurs. The resulting json file returns a dictionary for this entry when there are no reviews in that page.
TypeError: reviews.slice is not a function
at cleanList (.../node_modules/app-store-scraper/lib/reviews.js:10:18)
at process._tickDomainCallback (internal/process/next_tick.js:129:7)
A simple check to see if it's a valid array would be sufficient for a fix in this case.
If there is only one review then the server returns a single object, not an array and the parser crashes with:
TypeError: reviews.map is not a function
at cleanList (.../node_modules/app-store-scraper/lib/reviews.js:15:18)
at process.internalTickCallback (internal/process/next_tick.js:77:7)
Try this call to duplicate:
store.reviews({id:` 1092841332, country: 'IL'}).then(console.log).catch(console.log);
Error is here:
function cleanList (results) {
let reviews = results.feed.entry || [];
return reviews.map((review) => ({
// ...
I managed to fix the problem with something like the code below but perhaps there could be a better way.
function cleanList (results) {
let reviews = results.feed.entry || [];
// Check if it's a single object and if so wrap it into array
if (results.feed.entry && !Array.isArray(results.feed.entry)) {
reviews = [results.feed.entry];
}
return reviews.map((review) => ({
// ...
Hi, Thanks for developing this scraper. I use 'app' to retrieve the full detail of an application with id: 1135011025 and find the appId. But after I providing both 'id' and 'appId' as options in 'reviews', there's nothing retrieved. The codes are as following:
var store = require('app-store-scraper');
store.reviews({
id: 1135011025,
appId: 'com.upside-travel.Winterfell',
sort: store.sort.HELPFUL,
page: 2
})
.then(console.log)
.catch(console.log);
Thanks for your help.
Do you plan to add a review functionality?
The country option (originally added by @piercus ) that's passed to itunes in the storefront header, started to be ignored recently, breaking the related test.
The following invocation of app
assumes that appId exists.
https://github.com/facundoolano/app-store-scraper/blob/master/lib/similar.js#L20
Getting UnhandledPromiseReject
warning for this.
After deploying a new version of the IOS app, app-store-scraper returns the previous version with its details.
Is there a reason that the updated details will take some time to propagate?
Test case: Opening the app store URL shows the update is live with new version, and the update is available to devices, although app-store-scraper returns the previous version with its details.
I need to check the version immediately when update is live.
Retrieving app by "id" instead of "appId" seems to make a difference, why would this be the case?
Is there any way to retrieve reviews by version or is there any planned support for this?
We took your Google Play API and ported it to work for the app-store scraper.
If you're interested it's available here: https://github.com/lucky42890/App_Store_API-App-Info-
Hi @facundoolano, Thanks for sharing app-store-scraper! I'm wondering if it is possible to use it with languages other than English. I'm interested in obtaining search suggestions in Chinese/Japanese.
The response body is output as shown below.
<HTML>
<HEAD>
<TITLE>Web Server Error</TITLE>
</HEAD>
<BODY BGCOLOR="white" FGCOLOR="black">
<H1>Web Server Error</H1>
<HR>
<FONT FACE="Helvetica,Arial"><B>
Description: The host did not return the document correctly.
</B></FONT>
<HR>
</BODY>
I'm trying to export reviews by looping through 2 arrays of data (10 games and 38 countries) and iTunes reviews pages. Something like this (I'm not good at coding):
for( var i = 0; i < g.length; i++) {
for( var j = 0; j < c.length; j++) {
for( var p = 0; p < 10; p++) {
// Parse reviews
})
.then(console.log)
.catch(console.log);
};
};
}
I'm getting this in the output file:
{ Error: connect ENOBUFS x.xx.xxx.xxx:xxx - Local (undefined:undefined)
at Object._errnoException (util.js:992:11)
at _exceptionWithHostPort (util.js:1014:20)
at internalConnect (net.js:960:16)
at defaultTriggerAsyncIdScope (internal/async_hooks.js:284:19)
at GetAddrInfoReqWrap.emitLookup [as callback] (net.js:1106:9)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:97:10)
code: 'ENOBUFS',
errno: 'ENOBUFS',
syscall: 'connect',
address: 'x.xx.xxx.xxx',
port: xxx }
I've searched for workaround and tried to delay each request with setTimeout
(in many various ways) with no success.
I would like to know if it's possible to add throttle
option like in google-play-scraper to avoid this error?
causing the build to fail: https://travis-ci.org/facundoolano/app-store-scraper/builds/335353628
the itunes rss feed api has changed, causing the method to break. url structure changed and seems like the category field has been removed as well.
Node v4.2.2
[email protected]
It appears that this library prevents a script from terminating. Here’s a super simple script that when I run from the command-line as node test.js
it just hangs until I forcefully close it.
var store = require('app-store-scraper');
store.search({
term: 'panda',
num: 2,
device: store.device.IOS,
country : 'us'
})
.then(console.log)
.catch(console.log);
As a sanity check, the following does terminate on its own.
var store = require('app-store-scraper');
function foo() {
return new Promise((resolve, reject) => {
resolve('OK!');
});
}
foo()
.then(console.log)
.catch(console.log);
Hello there,
I'm using the module to search for some apps, but the result returned is not the same that I get on the iTunes app (Yes, I had set the country correctly) which works perfectly in the google-play-scraper
module. As I'm using it for ASO purposes, it's critical to know the real apps positions in the iTunes. (For example, I want to know if the app which i'm optimizing in ranking better, if it's in the first position for a given word...)
Talking to a friend of mine who works with ASO daily, he told me that the iTunes API is not reliable when it comes to the apps positioning (maybe for a delay to update, idk, but it isn't the same list) and another solution would be necessary.
Had you guys have the same problems or notice something like this? Or am I the only one?
Actually, if it's really a problem, I'm considering a solution: I've found out using a Sniffer (like Wireshark), to monitor the network when I'm using the iTunes app, and the app do requests to another url, setting different headers to fetch the content to be presented on it...
Please, let me know what you guys think about it.
Hey,
Thanks a lot for your work here - we've been using app-store-scraper
for some time with our Ionic app.
We have this issue with our app, the underlying cause being app-store-scraper
. Until now it only affected development builds and we've just lived with it.
However, on Ionic's latest iteration, it's completely broken, so now our production builds will not run on iOS 9 at all and we need to get our release out ASAP.
After spending some time trying to monkey patch this morning, I've realised that the lesser of several evils was just to release a clone that's compiled to ES5: https://www.npmjs.com/package/app-store-scraper-compat.
I am just raising here for your information. I figured you might not be interested in supporting ES5 anyway.
If you end up releasing a backwards compatible version in the future I'll just kill off app-store-scraper-compat
.
Thanks
Stephen
Hi there,
Thank you so much for putting this package together, saves me a ton of time. It's really great but there is a small issue where with some appIds, unless the country_code is provided in the lookup url, it will return nothing back in the json response even though the app is live in the store.
I am thinking of making a pull request to add in a feature so you can add the country code similar to how you can add throttle to the play-store-scrapper. My goal is that if the country code is provided it tacks it on to the url, if not, everything runs normally as it already does. Let me know if this is okay and I'll push up the PR.
Again, thanks for all your work on this package :)
Cheers!
at office we have an http proxy :
looks like the http_proxy & https_proxy environnement variables are not checked by the module which try direct http access.
Is there some special reason for the default value of the page
param on reviews
method to be 1
instead of 0
?
My concerning is about the compatibility with the google-play-scraper
module.
I think that if we could make it compatible and work the same way, it'd be great for both APIs.
Hi,
Thanks for the scraper it works like a charm but the search function returns only 100 results and if there are some others it says "... 150 more items" and interrupt. Is there any method to see full search result?
I have used the method Similar example, but it returned a null array. I have tested with other id but it was returned the same result. Can anyone help me?
I used the search method and it worked so i think i have installed it successfull.
Would love to have a list of release notes. Or even just the count would be amazing!
Thanks
The new itunes rss feeds returns much less information than before, so a fullDetail
option should be implemented as it is in google-play-scraper.
make sure memoization properly works for the full detail calls (dont make a request if the app has been called via the app method)
unskip (and fix as necessary) the full detail list test.
I've been working with this scraper to collect app reviews, but my use case requires review dates. I noticed the XML version of the reviews feed provides date info, and was going to work on adding that functionality to this scraper, but then I saw there was already an accepted PR for that feature in March 2017. Is there any reason the scraper is back to using the JSON feed for reviews?
Here's the PR in question:
#19
it's possible to get the IPA without login?
I am trying to sort reviews as RECENT but it is giving me an error.
TypeError: reviews.slice is not a function
var store = require('app-store-scraper');
store.reviews({ id: 'XXXXXXXXX',sort: store.sort.RECENT,page: 2}).then(console.log).catch(console.log);
In extractSuggestions
function in app-store-scraper/lib/suggest.js assumes there is always suggestions. I think it should check before applying list.map.
TypeError: Cannot read property 'map' of undefined
at extractSuggestions (/Users/rahul/appscraper/node_modules/app-store-scraper/lib/suggest.js:27:14)
at process._tickCallback (internal/process/next_tick.js:109:7)
(I am very new to nodejs
, and pardon me if it shouold be how it is.)
You've the functionality to retrieve all apps by a given developer name in your Google Play Scraper script. Can you bring this feature to the app store scraper as well? Please, I'd be so damn happy.
Hey @facundoolano ,
Thanks a lot for providing this API. Is it possible to extract the complete review history for an app instead of just 10 pages.
Is there any way of knowing how many pages are able to be requested? is there a way of requesting all reviews?
common.lookup
helper is used by multiple methods, they should share the memoized results when possible. Pass it by parameter like it's done in google-play-scrapersearch
method makes a first request that is common to all pages; this result should be reused when fetching subsequent pages.App store Scrapper works pretty but on some app it shows error
that app is not found
for example
com.bestonlinepartners.udemy.udemy
When fetching all reviews from the app store the returned json does not tell me how many pages there are in total. While the xml returned by apple does include the last page.
For example: https://itunes.apple.com/gb/rss/customerreviews/page=1/id=585027354/sortby=mostrecent/xml
Has as 10th line the last page available for this app.
I just noticed that reviews no longer contain the "currentVersionScore" value. Is this something Apple deprecated or could I be missing something. Thanks!
Is there any way to add date data in the Reviews output?
I see that the google-play-scraper has this but not that app-store-scraper.
Thanks!
I have seen that you can pass a language to the lookup API to retrieve the data for that language.
Something like this: https://itunes.apple.com/lookup?bundleId=com.you.app&country=ca&lang=fr
The app method doesn't seem to support it.
Summary field data available
https://itunes.apple.com/us/rss/topfreeipadapplications/limit=2/genre=7001/json
Summary field data not available
https://itunes.apple.com/us/rss/newfreeapplications/limit=2/genre=7001/json
Is it possible to get a date field for app reviews?
Can the ratings also be added to this library, like the android version?
They are a bit more complex to fetch, but very useful.
You can fetch them with the call below:
By using: GET http://ax.phobos.apple.com.edgesuite.net/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=&pageNumber=0&sortOrdering=2&type=Purple+Software
With headers:
User-Agent: iTunes/9.1.1
X-Apple-Store-Front: 143441-1
X-Apple-Store-Front tells it which apple store to talk to 143441-1 is usa.
This page includes all reviews and all ratings, so it includes way more data then the rss feed and is literally the call that itunes makes.
README.md - reviews - default page is 0 -- but in the code it defaults to 1
all other methods works well except the method ".list" does not work for me since yesterday knowing that it was functional...i can't get the app list from app store
Hi,
Is it possbile to get the App Store Featuring Art images?
Read more about App Store Promotional Artwork here:
https://help.apple.com/itc/appspromoart/en.lproj/static.html
Instead of using the feeds endpoint, we could use whatever endpoint itunes uses internally. The feed is slow (see #55), has limited results and currently doesn't allow filtering by category.
close to 5 seconds in travis, timing out locally. Make sure this is an external issue we can't control.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.