android-market检索空结果

时间:2013-03-02 15:34:39

标签: java android google-play

我想在

中收集有关特定应用的一些数据

Google Play marketplace。

我使用过这个非正式的API:

https://code.google.com/p/android-market-api/

这是我的代码,基本上可以获取应用名称列表

并尝试在每个应用上获取其他数据:

public void printAllAppsData(ArrayList<AppHarvestedData> dataWithAppsNamesOnly)
{       
    MarketSession session = new MarketSession();
    session.login("[myGamil]","[myPassword]");
    session.getContext().setAndroidId("dead00beef");

    final ArrayList<AppHarvestedData> finalResults = new ArrayList<AppHarvestedData>();

    for (AppHarvestedData r : dataWithAppsNamesOnly)
    {
    String query = r.name;
    AppsRequest appsRequest = AppsRequest.newBuilder()
                                    .setQuery(query)
                                    .setStartIndex(0).setEntriesCount(10)
                                    //.setCategoryId("SOCIAL") 
                                    .setWithExtendedInfo(true)
                                    .build();

    session.append(appsRequest, new Callback<AppsResponse>() {
             @Override
             public void onResult(ResponseContext context, AppsResponse response) {

                      List<App> apps = response.getAppList(); 
                        for (App app : apps) { 
                                AppHarvestedData r = new AppHarvestedData(); 

                                r.title = app.getTitle();
                                r.description = app.getExtendedInfo().getDescription();
                                String tmp = app.getExtendedInfo().getDownloadsCountText();
                                tmp = tmp.replace('<',' ').replace('>',' ');
                                int indexOf = tmp.indexOf("-");
                                tmp = (indexOf == -1) ? tmp : tmp.substring(0, indexOf);
                                r.downloads = tmp.trim();
                                r.rating = app.getRating();
                                r.version = app.getVersion(); 
                                r.userRatingCount = String.valueOf(app.getRatingsCount()); 
                                finalResults.add(r);
                                }
                        }
             });
    session.flush();
    }

    for(AppHarvestedData res : finalResults)
    {           
            System.out.println(res.toString());
    }
}

}

此时我应该重新打电话给session.flush();吗?

我的所有问题都会返回空集合,

即使我看到有一些名字作为输入。

当我只发送一个硬编码的应用名称作为查询时,它工作正常。

1 个答案:

答案 0 :(得分:0)

session.flush()关闭你的会话 你应该为每个查询打开会话。注意用户可以锁定几分钟,因此您应该有许多用户来处理这些查询。 如果你有AppId,你应该使用该查询:

  String query = r.name;
    AppsRequest appsRequest = AppsRequest.newBuilder()
                                    .setAppId("com.example.android")               
                                    .setWithExtendedInfo(true)
                                    .build();

    session.append(appsRequest, new Callback<AppsResponse>() {
             @Override
             public void onResult(ResponseContext context, AppsResponse response) {

                      List<App> apps = response.getAppList(); 
                        for (App app : apps) { 
                                AppHarvestedData r = new AppHarvestedData(); 

                                r.title = app.getTitle();
                                r.description = app.getExtendedInfo().getDescription();
                                String tmp = app.getExtendedInfo().getDownloadsCountText();
                                tmp = tmp.replace('<',' ').replace('>',' ');
                                int indexOf = tmp.indexOf("-");
                                tmp = (indexOf == -1) ? tmp : tmp.substring(0, indexOf);
                                r.downloads = tmp.trim();
                                r.rating = app.getRating();
                                r.version = app.getVersion(); 
                                r.userRatingCount = String.valueOf(app.getRatingsCount()); 
                                finalResults.add(r);
                                }
                        }
             });
    session.flush();
    }

如果您还要下载屏幕截图或图片,请调用此查询:

    GetImageRequest? imgReq; imgReq = GetImageRequest?.newBuilder().setAppId(appId).setImageUsage(AppImageUsage?.SCREENSHOT).setImageId("0").build();

session.append(imgReq, new Callback<GetImageResponse>() {
@Override public void onResult(ResponseContext? context, GetImageResponse? response) {
Log.d(tag, "------------------> Images response <----------------"); if(response != null) {
try {
//imageDownloader.download(image, holder.image, holder.imageLoader);
Log.d(tag, "Finished downloading screenshot 1...");
} catch(Exception ex) {
ex.printStackTrace();
}
} else {
Log.e(tag, "Response was null");
} Log.d(tag, "------------> End of Images response <------------");
}
});