def search(self, query, page=None, detailed=False): """Sends a POST request and retrieves a list of applications matching the query term(s). :param query: search query term(s) to retrieve matching apps :param page: the page number to retrieve. Max is 12. :param detailed: if True, sends request per app for its full detail :return: a list of apps matching search terms """ page = 0 if page is None else int(page) if page > len(self._pagtok) - 1: raise ValueError( "Parameter 'page' ({page}) must be between 0 and 12.".format( page=page)) pagtok = self._pagtok[page] data = generate_post_data(0, 0, pagtok) self.params.update({"q": quote_plus(query), "c": "apps"}) response = send_request("POST", self._search_url, data, self.params) soup = BeautifulSoup(response.content, "lxml", from_encoding="utf8") if detailed: apps = self._parse_multiple_apps(response) else: apps = [ parse_cluster_card_info(app) for app in soup.select("div.Vpfmgd") ] return apps
def similar(self, app_id, detailed=False, **kwargs): """Sends a GET request, follows the redirect, and retrieves a list of applications similar to the specified app. :param app_id: app to retrieve details from, e.g. 'com.nintendo.zaaa' :param detailed: if True, sends request per app for its full detail :return: a list of similar apps """ url = build_url("similar", app_id) response = send_request("GET", url, params=self.params, allow_redirects=True) soup = BeautifulSoup(response.content, "lxml", from_encoding="utf8") if detailed: apps = self._parse_multiple_apps(response) else: apps = [ parse_cluster_card_info(app) for app in soup.select("div.Vpfmgd") ] return apps