def get_presta_data(self, page_num, page_limit):
        domain = self.shop.domain
        headers = {"Authorization": self.shop.authheader}
        sync_type = self.shop.sync_type.lower()
        result_dict = {}

        try:
            # get products
            initial_index = page_num * page_limit
            data = get_xml_data("http://%s/api/%s?display=[id,%s,%s,name]&sort=[id_ASC]&limit=%d,%d&price[base_price][use_reduction]=0&price[base_price][use_tax]=0"
                                % (domain, 'products', sync_type, JOINED_ATTRS, initial_index, page_limit), headers)

            self._get_presta_data(headers, data, result_dict, domain, sync_type, page_limit, page_num)
        except urllib2.HTTPError as e:
            error = PrestaError.get_error(PrestaError.DOMAIN, 'Incorrect value', self)
            if e.code == 500:
                # This should never happen after we implemented proper pagination
                message = e.fp.read()
                send_email.delay('mail/error', {'domain': domain, 'data_list': str(e.message),
                                                'full_data': str(page_num), 'message': str(message)},
                                 "Client Error")
                error = {PrestaError.DOMAIN: _('You have some problem with API access configuration,<br>'
                                               'try if API works by manually examining url:<br>') +
                                             '<a href="http://%s/api/products">http://%s/api/products</a>' % (domain, domain)}
            elif e.code in (401, 403):
                # send email about this
                send_email.delay('mail/error', {'domain': domain, 'data_list': '',
                                                'full_data': '', 'message': ''}, "Incorrect key")
                error = PrestaError.get_error(PrestaError.KEY, 'Incorrect value', self)
                if 'attribute_lang' in result_dict:
                    error = PrestaError.get_error(PrestaError.KEY, PrestaError.PROD_COMBINATIONS, self)
                elif 'product' in result_dict:
                    error = PrestaError.get_error(PrestaError.KEY, PrestaError.PROD_OPTIONS_VALUES, self)
            elif e.code == 404 or e.code == 503:
                error = PrestaError.get_error(PrestaError.DOMAIN, PrestaError.NOT_ACTIVATED, self)
            return result_dict, error
        except (urllib2.URLError, socket.timeout):
            # either timeout or dns error
            error = PrestaError.get_error(PrestaError.DOMAIN, PrestaError.NOT_REACHABLE, self)
            return result_dict, error
        except PrestaError, e:
            # no products found in the shop
            error = PrestaError.get_error(PrestaError.DOMAIN, e.message, self)
            return result_dict, error