import requests from django.core.cache import cache class AlemTat(object): COUNTRY_CODE = '0001' CITY_CODE = '000003' API_KEY = '677a8773-c647-4b8f-8968-32a67d55e0d3' CONTRACT = '05828/ИМ' def _build_url(self, url): # url = url.replace('\{ext\}', API_KEY) retval = url if '?' in url: retval = url + '&ApiKey={}'.format(self.API_KEY) else: retval = url + '?ApiKey={}'.format(self.API_KEY) return retval def get_cities(self): cache_key = 'alemtat_cities' retval = cache.get(cache_key, None) if not retval: url = self._build_url( 'http://api.alemtat.kz/web/{ext}/Catalog/getCitiesByCountry?CountryLocalCode={}'.format(self.COUNTRY_CODE, ext=self.API_KEY)) r = requests.get(url) retval = r.json() cache.set(cache_key, retval, 60*60*24*7) return retval def get_cities_tuple(self): retval = map(lambda cities: (cities['LocalCode'], '{} - {}'.format(cities['LocalityName'].title(), cities[ 'Region'].capitalize())), self.get_cities()) return tuple(retval) def get_services(self): cache_key = 'alemtat_services' retval = cache.get(cache_key, None) if not retval: url = self._build_url( 'http://api.alemtat.kz/web/{ext}/Catalog/getServices'.format(ext=self.API_KEY)) r = requests.get(url) retval = r.json() cache.set(cache_key, retval, 60*60*24*7) return retval def get_services_tuple(self): retval = map(lambda services: (services['LocalCode'], services['Name'],), self.get_services()) return tuple(retval) # def get_services_tuple(self): # retval = map(lambda cities: (cities['LocalCode'], '{} - {}'.format(cities['LocalityName'].title(), cities[ # 'Region'].capitalize())), self.get_cities()) # return tuple(retval) def get_amount(self, to, places, weight, service): url = self._build_url( 'http://api.alemtat.kz/web/{ext}/Calc/getAmount'.format(ext=self.API_KEY)) post_data = dict( FromCountryCode=self.COUNTRY_CODE, FromLocalCode=self.CITY_CODE, ToCountryCode=self.COUNTRY_CODE, ToLocalCode=to, ServiceLocalCode=service, Places=places, Weight=weight, Contract=self.CONTRACT, ) r = requests.post(url, data=post_data) return r.json() def alemtat_get_cities_tuple(): a = AlemTat() return a.get_cities_tuple() def alemtat_get_services_tuple(): a = AlemTat() return a.get_services_tuple()