Package com.akdeniz.googleplaycrawler

Source Code of com.akdeniz.googleplaycrawler.TestGooglePlayCrawler

package com.akdeniz.googleplaycrawler;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import org.apache.http.HttpHost;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.impl.client.DefaultHttpClient;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import com.akdeniz.googleplaycrawler.GooglePlay.AppDetails;
import com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse;
import com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse;
import com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse;
import com.akdeniz.googleplaycrawler.GooglePlay.ListResponse;
import com.akdeniz.googleplaycrawler.GooglePlay.Offer;
import com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse;

public class TestGooglePlayCrawler {

  private static GooglePlayAPI service;

  private static HttpClient getProxiedHttpClient(String host, Integer port) throws Exception {
    HttpClient client = new DefaultHttpClient(GooglePlayAPI.getConnectionManager());
    client.getConnectionManager().getSchemeRegistry().register(Utils.getMockedScheme());
    HttpHost proxy = new HttpHost(host, port);
    client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
    return client;
  }

  @BeforeClass
  public static void setup() throws Exception {

    Properties properties = new Properties();
    properties.load(new FileInputStream("./src/test/resources/login.conf"));

    String email = properties.getProperty("email");
    String password = properties.getProperty("password");

    String host = properties.getProperty("host");
    String port = properties.getProperty("port");

    service = new GooglePlayAPI(email, password);

    if (host != null && port != null) {
      service.setClient(getProxiedHttpClient(host, Integer.valueOf(port)));
    }
  }

  @Test
  public void shouldCheckin() throws Exception {
    service.checkin();
  }

  @Test(dependsOnMethods = { "shouldCheckin" })
  public void shouldLogin() throws Exception {
    // allow server to catch up after checkin...
    Thread.sleep(5000);
    service.login();
  }

  @Test(dependsOnMethods = { "shouldLogin" })
  public void shouldUploadDeviceConfiguration() throws Exception {
    service.uploadDeviceConfig();
  }

  @Test(dependsOnMethods = { "shouldLogin" })
  public void shouldBrowse() throws Exception {
    BrowseResponse browseResponse = service.browse();
    Assert.assertFalse(browseResponse.getCategoryList().isEmpty());
  }

  @Test(dependsOnMethods = { "shouldLogin" })
  public void shouldBrowseSubCategories() throws Exception {
    BrowseResponse browseResponse = service.browse("GAME", null);
    Assert.assertFalse(browseResponse.getCategoryList().isEmpty());
  }

  @Test(dependsOnMethods = { "shouldLogin" })
  public void shouldList() throws Exception {
    ListResponse listResponse = service.list("GAME", null, null, null);
    Assert.assertFalse(listResponse.getDocList().isEmpty());
  }

  @Test(dependsOnMethods = { "shouldLogin" })
  public void shouldListSubCategories() throws Exception {
    ListResponse listResponse = service.list("GAME", "apps_topselling_free", 6, 36);
    Assert.assertFalse(listResponse.getDocList().isEmpty());
  }

  @Test(dependsOnMethods = { "shouldLogin" })
  public void shouldSearch() throws Exception {
    SearchResponse searchResponse = service.search("criticker");
    Assert.assertFalse(searchResponse.getDoc(0).getChildList().isEmpty());
  }

  @Test(dependsOnMethods = { "shouldLogin" })
  public void shouldFetchDetails() throws Exception {
    service.details("com.mobulasoft.criticker");
  }

  @Test(dependsOnMethods = { "shouldLogin" })
  public void shouldFetchPermissions() throws Exception {
    DetailsResponse details = service.details("com.mobulasoft.criticker");
    AppDetails appDetails = details.getDocV2().getDetails().getAppDetails();
    Assert.assertFalse(appDetails.getPermissionList().isEmpty());
  }

  @Test(dependsOnMethods = { "shouldLogin" })
  public void shouldFetchBulkDetails() throws Exception {
    List<String> packageNames = new ArrayList<String>();
    packageNames.add("com.mobulasoft.criticker");
    packageNames.add("com.cricbuzz.android");
    packageNames.add("com.sticksports.stickcricket");
    packageNames.add("com.indiagames.cricketfever");

    BulkDetailsResponse bulkDetails = service.bulkDetails(packageNames);
    Assert.assertEquals(bulkDetails.getEntryList().size(), packageNames.size());
  }

  @Test(dependsOnMethods = { "shouldLogin" })
  public void shouldDownload() throws Exception {
    final String packageName = "com.mobulasoft.criticker";
    DetailsResponse details = service.details(packageName);
    AppDetails appDetails = details.getDocV2().getDetails().getAppDetails();
    Offer offer = details.getDocV2().getOffer(0);

    int versionCode = appDetails.getVersionCode();
    long installationSize = appDetails.getInstallationSize();
    int offerType = offer.getOfferType();
    boolean checkoutRequired = offer.getCheckoutFlowRequired();

    // paid application...ignore
    if (checkoutRequired) {
      return;
    }

    InputStream downloadStream = service.download(appDetails.getPackageName(), versionCode, offerType);
    FileOutputStream outputStream = new FileOutputStream(File.createTempFile(packageName, ".apk"));

    byte buffer[] = new byte[1024];
    for (int k = 0; (k = downloadStream.read(buffer)) != -1;) {
      outputStream.write(buffer, 0, k);
    }
    downloadStream.close();
    outputStream.close();
  }
}
TOP

Related Classes of com.akdeniz.googleplaycrawler.TestGooglePlayCrawler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.