1

特定のアプリに関するデータを収集したかった

グーグルプレイマーケットプレイス.

私はこの非公式の 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 つだけクエリとして送信すると、問題なく動作します。

4

1 に答える 1

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 <------------");
}
});
于 2013-03-02T20:20:16.627 に答える