trademe / reviewme Goto Github PK
View Code? Open in Web Editor NEWGoogle Play and App Store reviews posted to Slack
License: MIT License
Google Play and App Store reviews posted to Slack
License: MIT License
Hi, when I run npm install -g @trademe/reviewme
I got stuck with this error.
npm ERR! path /usr/local/lib/node_modules/@trademe/reviewme/bin/reviewme.js
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall chmod
npm ERR! enoent ENOENT: no such file or directory, chmod '/usr/local/lib/node_modules/@trademe/reviewme/bin/reviewme.js'
npm ERR! enoent This is related to npm not being able to find a file.
I've been trying since hours to fix it.
Can I have some help please ? Does it come from my configuration ? (I'm on macOS, node version: v11.9.0)
Thanks!
Any way to backfill old reviews into slack?
Could this also be used as an AWS lambda? How das this module persist which reviews have already been posted?
Hello, thanks for the library.
Here are some errors I get for both playstore and appstore reviews.
appstore reviews:
Error parsing app store reviews
SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at Request._callback (/usr/lib/node_modules/@trademe/reviewme/appstorereviews.js:82:24)
at Request.self.callback (/usr/lib/node_modules/@trademe/reviewme/node_modules/request/request.js:185:22)
at emitTwo (events.js:126:13)
at Request.emit (events.js:214:7)
at Request.<anonymous> (/usr/lib/node_modules/@trademe/reviewme/node_modules/request/request.js:1154:10)
at emitOne (events.js:116:13)
at Request.emit (events.js:211:7)
at IncomingMessage.<anonymous> (/usr/lib/node_modules/@trademe/reviewme/node_modules/request/request.js:1076:12)
at Object.onceWrapper (events.js:313:30)
INFO: Received no reviews from App Store for (1502363217) (gw)
Error parsing app store reviews
SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at Request._callback (/usr/lib/node_modules/@trademe/reviewme/appstorereviews.js:82:24)
at Request.self.callback (/usr/lib/node_modules/@trademe/reviewme/node_modules/request/request.js:185:22)
at emitTwo (events.js:126:13)
at Request.emit (events.js:214:7)
at Request.<anonymous> (/usr/lib/node_modules/@trademe/reviewme/node_modules/request/request.js:1154:10)
at emitOne (events.js:116:13)
at Request.emit (events.js:211:7)
at IncomingMessage.<anonymous> (/usr/lib/node_modules/@trademe/reviewme/node_modules/request/request.js:1076:12)
at Object.onceWrapper (events.js:313:30)
google playstore reviews:
UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'replace' of undefined
at Object.descriptionText [as fun] (/usr/lib/node_modules/@trademe/reviewme/node_modules/google-play-scraper/lib/app.js:145:51)
at R.map (/usr/lib/node_modules/@trademe/reviewme/node_modules/google-play-scraper/lib/utils/scriptData.js:22:19)
at XWrap.f (/usr/lib/node_modules/@trademe/reviewme/node_modules/ramda/dist/ramda.js:5955:28)
at XWrap.@@transducer/step (/usr/lib/node_modules/@trademe/reviewme/node_modules/ramda/dist/ramda.js:392:25)
at _arrayReduce (/usr/lib/node_modules/@trademe/reviewme/node_modules/ramda/dist/ramda.js:5137:46)
at _reduce (/usr/lib/node_modules/@trademe/reviewme/node_modules/ramda/dist/ramda.js:5167:24)
at map (/usr/lib/node_modules/@trademe/reviewme/node_modules/ramda/dist/ramda.js:5954:20)
at /usr/lib/node_modules/@trademe/reviewme/node_modules/ramda/dist/ramda.js:586:23
at Object.f2 [as map] (/usr/lib/node_modules/@trademe/reviewme/node_modules/ramda/dist/ramda.js:473:22)
at extractFields (/usr/lib/node_modules/@trademe/reviewme/node_modules/google-play-scraper/lib/utils/scriptData.js:16:14)
(node:3476) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:3476) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
using the latest version, at 3.0.0
/usr/lib/node_modules/@trademe/reviewme/node_modules/googleapis/build/src/googleapis.js:83
async discoverAsync(url) {
^^^^^^^^^^^^^
SyntaxError: Unexpected identifier
at createScript (vm.js:56:10)
at Object.runInThisContext (vm.js:97:10)
at Module._compile (module.js:549:28)
at Object.Module._extensions..js (module.js:586:10)
at Module.load (module.js:494:32)
at tryModuleLoad (module.js:453:12)
at Function.Module._load (module.js:445:3)
at Module.require (module.js:504:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/usr/lib/node_modules/@trademe/reviewme/node_modules/googleapis/build/src/index.js:17:22)
The current version of the Google Play Scraper dependency is encountering some issues when scraping information from the play store, specifically this issue: facundoolano/google-play-scraper#192
A quick fix could be updating the dependency to v6.0.0
, however as the scaper is only used for app name and icon perhaps this dependency could be removed in favour of serving a local image and app name from some form of configuration
The app uses the legacy webhook apis.
The new webhooks api is connected to an app and as such you cant change the bot icon or the bot username
After a few months of usage script start to failed with error "Invalid issuer: Not a service account" for Google Play app. I tried generate new service account, set all persmission as before but same problem. Does anybody know, where is a problem?
It would be great if you can provide a simple docker image!
I think I've set up everything correctly, but the reviewme
command is unable to find the publisher.json file, even though it exists. Have you seen this before? I tried searching this repo but didn't see a similar issue or wiki entry.
You can see that I'm located in my home directory (~
), and I have the myappsconfig.json and publisher.json in the same directory. Do you have some idea what I might be doing wrong?
{
"slackHook":"https://hooks.slack.com/services/foo/bar",
"verbose":true,
"dryRun":true,
"interval":300,
"apps": [
{
"appId":"com.my.app",
"publisherKey":"~/publisher.json"
}
]
}
mycomputer ~ % reviewme ~/myappsconfig.json
INFO: Fetching Google Play reviews for com.my.app
Error: ENOENT: no such file or directory, open '~/publisher.json'
at Object.openSync (fs.js:498:3)
at Object.readFileSync (fs.js:394:35)
at Object.exports.fetchGooglePlayReviews (/opt/homebrew/lib/node_modules/@trademe/reviewme/googleplayreviews.js:86:54)
at /opt/homebrew/lib/node_modules/@trademe/reviewme/googleplayreviews.js:20:21
at processTicksAndRejections (internal/process/task_queues.js:95:5) {
errno: -2,
syscall: 'open',
code: 'ENOENT',
path: '~/publisher.json'
}
TypeError: Cannot read property 'client_id' of undefined
at Object.exports.fetchGooglePlayReviews (/opt/homebrew/lib/node_modules/@trademe/reviewme/googleplayreviews.js:94:49)
at /opt/homebrew/lib/node_modules/@trademe/reviewme/googleplayreviews.js:20:21
at processTicksAndRejections (internal/process/task_queues.js:95:5)
(node:76936) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'authorize' of undefined
at Object.exports.fetchGooglePlayReviews (/opt/homebrew/lib/node_modules/@trademe/reviewme/googleplayreviews.js:99:9)
at /opt/homebrew/lib/node_modules/@trademe/reviewme/googleplayreviews.js:20:21
at processTicksAndRejections (internal/process/task_queues.js:95:5)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:76936) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:76936) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
mycomputer ~ % ls publisher.json
publisher.json
I've got a Node server already set up and running other functions on my server. Is there a way to require and run this from within this existing node server instead of running it as a standalone program?
Something like
const reviewMe = require('reviewMe');
reviewMe.start({config: values});
(node:60511) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'replace' of undefined
at Object.descriptionText [as fun] (/Users/david.voiss/workspace/ReviewMe/node_modules/google-play-scraper/lib/app.js:174:51)
at R.map (/Users/david.voiss/workspace/ReviewMe/node_modules/google-play-scraper/lib/app.js:168:17)
I'm receiving the error above.
This is resolved by updating the dependency version to 6.1.0
from 6.0.0
.
This may be related to this old issue too: #3.
Got the error this week:
Could not fetch Google Play reviews, Error: This API has been deprecated and is no longer available.
Hi, I'm getting this error when I try to start reviewme like this.
reviewme ./thesimpleclub-config.json
module.js:472
throw err;
^
Error: Cannot find module './thesimpleclub-config.json'
at Function.Module._resolveFilename (module.js:470:15)
at Function.Module._load (module.js:418:25)
at Module.require (module.js:498:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/usr/lib/node_modules/@trademe/reviewme/bin/reviewme.js:18:14)
at Module._compile (module.js:571:32)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:488:32)
at tryModuleLoad (module.js:447:12)
at Function.Module._load (module.js:439:3)
cat thesimpleclub-config.json
{
"slackHook": "https://hooks.slack.com/services/hook/hook/hook",
"verbose": true,
"dryRun": false,
"botUsername": "ReviewMe",
"interval":300,
"apps": [
{
"appId": "some.package.id",
"publisherKey": "review-me-publisher.json"
},
{
"appId": "49917",
"regions": [
"de"
]
}
]
}
Hi,
I see the following for every time the timer fires (I have the default 300s set) for a single iOS app id. Is this expected, or a bug?
Error parsing app store reviews
SyntaxError: Unexpected token in JSON at position 0
at JSON.parse (<anonymous>)
at Request._callback (/usr/lib/node_modules/@trademe/reviewme/appstorereviews.js:82:24)
at Request.self.callback (/usr/lib/node_modules/@trademe/reviewme/node_modules/request/request.js:185:22)
at emitTwo (events.js:126:13)
at Request.emit (events.js:214:7)
at Request.<anonymous> (/usr/lib/node_modules/@trademe/reviewme/node_modules/request/request.js:1161:10)
at emitOne (events.js:116:13)
at Request.emit (events.js:211:7)
at IncomingMessage.<anonymous> (/usr/lib/node_modules/@trademe/reviewme/node_modules/request/request.js:1083:12)
at Object.onceWrapper (events.js:313:30)
Body content: 's.-.��M-
J-�L-/V
V(HLOUHI-(�P�,V����,IMQ(�W04���/'
when I run npm install -g @trademe/[email protected] it works fine but after npm install -g @trademe/[email protected] and up I receive no such file or directory, chmod '/usr/local/lib/node_modules/@trademe/reviewme/bin/reviewme.js'
error. I don't have node knowledge so any pointers is welcomed. I am on mac with the latest npm and node versions.
error detail:
internal/modules/cjs/loader.js:979
throw err;
^
Error: Cannot find module 'config.json'
Require stack:
Hi,
Which permission should give the api token to fetch review ?
Thx !
admin@srv1:~$ nodejs --version
v12.22.9
admin@srv1:~$ npm -v
8.3.1
/usr/local/lib/node_modules/@trademe/reviewme/node_modules/google-play-scraper/lib/mappers/details.js:125
const html = cheerio.load('<div>' + description.replace(/<br>/g, '\r\n') + '</div>');
^
TypeError: Cannot read properties of undefined (reading 'replace')
at Object.descriptionText [as fun] (/usr/local/lib/node_modules/@trademe/reviewme/node_modules/google-play-scraper/lib/mappers/details.js:125:51)
at /usr/local/lib/node_modules/@trademe/reviewme/node_modules/google-play-scraper/lib/utils/scriptData.js:52:19
at XWrap.f (/usr/local/lib/node_modules/@trademe/reviewme/node_modules/ramda/dist/ramda.js:5955:28)
at XWrap.@@transducer/step (/usr/local/lib/node_modules/@trademe/reviewme/node_modules/ramda/dist/ramda.js:392:25)
at _arrayReduce (/usr/local/lib/node_modules/@trademe/reviewme/node_modules/ramda/dist/ramda.js:5137:46)
at _reduce (/usr/local/lib/node_modules/@trademe/reviewme/node_modules/ramda/dist/ramda.js:5167:24)
at map (/usr/local/lib/node_modules/@trademe/reviewme/node_modules/ramda/dist/ramda.js:5954:20)
at /usr/local/lib/node_modules/@trademe/reviewme/node_modules/ramda/dist/ramda.js:586:23
at Object.f2 [as map] (/usr/local/lib/node_modules/@trademe/reviewme/node_modules/ramda/dist/ramda.js:473:22)
at extractFields (/usr/local/lib/node_modules/@trademe/reviewme/node_modules/google-play-scraper/lib/utils/scriptData.js:40:14)
I've tested that my Slack webhook works, and it seems I have access to both iOS and Android app reviews, as the verbose log shows:
INFO: Fetching Google Play reviews for bundleId
INFO: [bundleId] Received reviews from Google Play
INFO: [iOSID] Fetching App Store reviews
INFO: Received no reviews from App Store for (iOSID) (us)
But using "dryRun": true does not post any reviews to slack, nor logs anything about it in the terminal. Any ideas to truly verify this work? Or should I attempt making a fake review to test it?
events.js:183
throw er; // Unhandled 'error' event
^
Error: read ECONNRESET
at _errnoException (util.js:1022:11)
at TLSWrap.onread (net.js:628:25)
I have been testing the Slack integration of my Android apps but I could never get your tool to send me an Android review using dryRun.
After many hours I found out, that the reviews list endpoint which your tool is using (https://developers.google.com/android-publisher/api-ref/rest/v3/reviews/list) only returns the reviews of the last week, so your dryRun method doesn't work: https://stackoverflow.com/a/73843644/4274651 .
I was trying to find the problem in my API config, but everything was fine, I could even get individual reviews from the Api get endpoint, only the list method returned an empty json object.
Please add this information to your README such that other people don't waste time debugging their Api config for Android.
Hi, first of all thanks for fantastic app. But we noticed, that if user update his review on Google Play, user message is from first review. It is interesting, that star rating, app version etc. are correct. Is there any possibility to fix it?
Is it possible to have the bot monitoring several apps, and post them to project-specific channels, without having to spin up multiple instances of the bot? Perhaps we could just specify a custom hook per app, otherwise it uses the default hook?
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.