无法保存从Google-Play-Scraper返回的应用信息?

时间:2019-06-26 17:01:59

标签: javascript node.js

我想根据Google Play中的应用ID(例如com.instagram.android)抓取应用信息。

我使用npm软件包作为搜寻器:https://www.npmjs.com/package/google-play-scraper

我以前没有任何JavaScript经验,也不知道如何针对我的目的对其进行修改。 目前,我无法将其用于抓取应用ID列表,并将返回的结果另存为* .txt以便进一步分析。

我尝试了他们的示例代码,并且运行良好。但是我只能看到.then(console.log, console.log)返回的结果。如何将结果保存到.txt文件?

var gplay = require('google-play-scraper');

gplay.app({appId: 'com.dxco.pandavszombies'})
  .then(console.log, console.log);

我被困在这里,有人可以在这个问题上帮助我吗?我尝试了多种方法来解决此问题,但是它们都没有起作用...我真的很困惑如何将返回的值保存到.txt文件中

我试图将所有可能的变量保存到.txt文件中,仅保存以下信息:

[object]
[object promise]

已保存。

我试图这样保存它:

var first = gplay.app({appId: 'com.instagram.android'});
app_result = first.then((result) => console.log(result));

fs.writeFile('App_Result.txt', app_result, (err) =>{
    if (err) throw err;
        console.log('App_Result saved!');
    });

我知道这可能是由于Promise策略引起的,我需要等待Promise解决之后才能返回结果。但是我不知道如何解决这个问题,因为我真的是javascript新手。

2 个答案:

答案 0 :(得分:2)

首先:默认情况下,JavaScript非常无助地打印对象,例如[Object object]或类似对象。如果需要更多信息,请尝试将console.log替换为data => JSON.stringify(data)

第二,由于Promises的性质,您必须将另一个.then链接到现有代码上。像

const gplay = require('google-play-scraper');
const fs = require('fs');

const file = fs.createWriteStream('App_Result.txt');

gplay.app({appId: 'com.dxco.pandavszombies'})
  .then(result => JSON.stringify(result))
  .then(text => file.write(text));

答案 1 :(得分:0)

您的app_result并不等于承诺的结果,而是承诺本身。

在将对象写入文件之前,还必须使用JSON.stringify将对象转换为字符串。

尝试编写这样的异步函数。

const myFunction = async () => {
    const app_result = await gplay.app({appId: 'com.instagram.android'});

    fs.writeFile('App_Result.txt', JSON.stringify(app_result))
}