从Android Play商店获取数据

Ahm*_*mad 78 android google-play

我见过一些使用Android Play商店数据的应用和网站.例如,具有顶级应用程序排名等的应用程序或站点但是如何获取数据?从哪里我可以解析它?

len*_*nik 46

您可以尝试使用Android Market上的非官方开源API来获取所需的信息.希望这可以帮助.


Iva*_*van 20

免责声明:我来自42matters,他们已经在https://42matters.com/api上提供了这些数据,随时查看或给我们留言.

正如lenik所提到的那样,开源库已经有助于从GPlay获取一些数据.如果您想自己构建一个,可以尝试解析Google Play应用页面,但是您应该注意以下事项:

  • 确保您在robots.txt中未阻止您尝试解析的网址 - 例如https://play.google.com/robots.txt
  • 确保你没有经常这样做,如果你做得太多,谷歌会扼杀并可能将你列入黑名单.
  • 发送正确的User-Agent标头以实际显示您是机器人
  • 应用程序的页面很大 - 请确保您接受gzip并请求移动版本
  • GPlay网站不是一个API,它不关心你解析它,因此它会随着时间的推移而改变.确保您处理更改 - 例如,通过测试以确保您获得预期.

因此,记住获取一个页面元数据是获取页面html并正确解析它的问题.使用JSoup,您可以尝试:

      HttpClient httpClient = HttpClientBuilder.create().build();
      HttpGet request = new HttpGet(crawlUrl);
      HttpResponse rsp = httpClient.execute(request);

      int statusCode = rsp.getStatusLine().getStatusCode();

      if (statusCode == 200) {
           String content = EntityUtils.toString(rsp.getEntity());    
           Document doc = Jsoup.parse(content);
           //parse content, whatever you need
           Element price = doc.select("[itemprop=price]").first();
      }      
Run Code Online (Sandbox Code Playgroud)

对于那个非常简单的用例,应该可以帮助您入门.然而,当你想要做更多有趣的事情时,事情会变得复杂:

  • 机器人中禁止搜索.
  • 保持应用程序元数据最新是很难的.有超过220万个应用程序,如果你想每天刷新他们的元数据,每天有2.2个请求,这将1)立即被阻止,2)花费很多钱 - 如果一个应用程序是100k,每天有220gb的悲观数据传输
  • 你如何发现新的应用程序
  • 您如何在每个国家/地区获得定价,每种语言的翻译

名单还在继续.如果您不想自己完成所有这些操作,可以考虑42matters API,它支持查找和搜索,顶级谷歌图表,高级查询和过滤器.这适用于35种语言和50多个国家.

  • **这项服务很贵** (64认同)
  • 42matters API目前不支持获取用户评论(这是非常好的).希望这可以节省创建和放弃帐户的人. (2认同)

Fac*_*ano 20

我编写了一个小型Node.js模块来刮取应用并列出来自Google Play的数据:google-play-scraper

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

gplay.List({
    category: gplay.category.GAME_ACTION,
    collection: gplay.collection.TOP_FREE,
    num: 2
  }).then(console.log);
Run Code Online (Sandbox Code Playgroud)

结果:

 [ { url: 'https://play.google.com/store/apps/details?id=com.playappking.busrush',
    appId: 'com.playappking.busrush',
    title: 'Bus Rush',
    developer: 'Play App King',
    icon: 'https://lh3.googleusercontent.com/R6hmyJ6ls6wskk5hHFoW02yEyJpSG36il4JBkVf-Aojb1q4ZJ9nrGsx6lwsRtnTqfA=w340',
    score: 3.9,
    price: '0',
    free: false },
  { url: 'https://play.google.com/store/apps/details?id=com.yodo1.crossyroad',
    appId: 'com.yodo1.crossyroad',
    title: 'Crossy Road',
    developer: 'Yodo1 Games',
    icon: 'https://lh3.googleusercontent.com/doHqbSPNekdR694M-4rAu9P2B3V6ivff76fqItheZGJiN4NBw6TrxhIxCEpqgO3jKVg=w340',
    score: 4.5,
    price: '0',
    free: false } ]
Run Code Online (Sandbox Code Playgroud)

  • 我想是的,这都是公开的数据.有趣的谷歌说"嘿,你不抓我的网站". (18认同)

Spa*_*rky 5

Google Play商店不提供此数据,因此网站必须抓取它.

  • 不是(更长?)100%为真,请参阅[使用PHP格式化JSON数据](http://stackoverflow.com/q/22134494/2533433)以获取在https:// play中找到的XHR接口的示例. google.com/store/xhr/getdoc` - 所以它显然是由Google Play本身提供的.但是,返回的结果需要一些调整才能使用(比如在第一行中替换4个字符,比如`data =`在对它们执行`eval()之前). (2认同)