Exemple #1
0
	def post(self):
		ts = self.args['_']
		if abs(int(time() * 1000) - int(ts)) > 1800000:
			return {'success':0, 'message': '时间戳无效'}, 200
		token = self.args['token']
		appkey = self.args['appkey']
		verify_token = flask_redis.get(appkey)
		if verify_token is None:
			return {'success': 0, 'message': 'token 无效'}, 200
		else:
			verify_token = verify_token.decode('utf-8') if type(verify_token) == type(b'') else verify_token
			if verify_token != token:
				return {'success': 0, 'message': 'token 无效'}, 200
		sign = self.args['sign']
		if hash_sha256("{0},{1},{2}".format(ts, token, appkey)) != sign:
			return {'success': 0, 'message': 'sign 无效'}, 200
		keyword = self.args['keyword']
		query = Website.query.join(Token, Website.id==Token.website_id).filter(Token.appkey == appkey).first()
		domain = query.domain
		try:
			s = Search(using=client, index='suggest', doc_type='news')
			s = s.filter('term', website=domain).query('match', title=keyword)
			s = s[0:10]
			response = s.execute()
			return {'success': 1, 'data': response.to_dict()}, 200
		except Exception as e:
			return {'success': 0, 'message': e}, 200
Exemple #2
0
    def get(self, request):
        """
            API to fetch store

            @params: store_id: integer
            @returns: Retrive store information
        """

        result = {}
        store_id = int(request.query_params.get('store_id'))
        serializer = FetchStoreSerializer(data=request.query_params)
        if serializer.is_valid():
            search = Search(using=self.es, index="store_data_index")
            search = search.filter("match", store_id=store_id)
            data = search.execute().to_dict()
            if data['hits']['hits']:
                result['status'] = True
                result['data'] = data['hits']['hits'][0]['_source']
            else:
                result['status'] = False
                result['message'] = 'No data found for the give store id'
            status_code = status.HTTP_200_OK
        else:
            status_code = status.HTTP_400_BAD_REQUEST
            result = {'status': False, 'message': serializer.errors}
        return Response(result, status=status_code)
Exemple #3
0
	def post(self):
		ts = self.args['_']
		if abs(int(time() * 1000) - int(ts)) > 1800000:
			return {'success':0, 'message': '时间戳无效'}, 200
		token = self.args['token']
		appkey = self.args['appkey']
		verify_token = flask_redis.get(appkey)
		if verify_token is None:
			return {'success': 0, 'message': 'token 无效'}, 200
		else:
			verify_token = verify_token.decode('utf-8') if type(verify_token) == type(b'') else verify_token
			if verify_token != token:
				return {'success': 0, 'message': 'token 无效'}, 200
		sign = self.args['sign']
		if hash_sha256("{0},{1},{2}".format(ts, token, appkey)) != sign:
			return {'success': 0, 'message': 'sign 无效'}, 200
		page = int(self.args['page'])
		size = int(self.args['size'])
		from_size = (page - 1) * size
		to_size = page * size
		channel = self.args['channel']
		category = self.args['category']
		location = self.args['location']
		times = self.args['times']
		and_ = self.args['and']
		sort_field = self.args['s']
		is_open = self.args['is_open']
		o = self.args['o']
		scope = self.args['scope']
		if scope in ['content', 'tag', 'title', 'description', 'author', 'writings']:
			scope = [scope]
		else:
			scope = ['content', 'tag', 'title', 'description', 'author', 'writings']
		keyword = self.args['keyword']
		try:
			s = Search(using=client, index='gdszx', doc_type='culture')
			if times:
				s = s.filter('term', times=times)
			if category:
				s = s.filter('term', category=category)
			if location:
				s = s.filter('term', location=location)
			if channel:
				s = s.filter('term', channel=channel)
			if is_open == '0':
				s = s.filter('term', is_open=False)
			elif is_open == '1':
				s = s.filter('term', is_open=True)
			s = s.query('multi_match', query=keyword, fields=scope)
			if and_ != None and and_.strip() != '':
				for word in split(r'\s+', and_.strip()):
					s = s.query('multi_match', query=word, fields=scope)
			s = s.highlight('title', fragment_size=50).highlight('content', fragment_size=100)
			s.aggs.bucket('times_all', 'terms', field='times', size=10)
			s.aggs.bucket('channel_all', 'terms', field='channel', size=10)
			s.aggs.bucket('category_all', 'terms', field='category', size=10)
			s.aggs.bucket('location_all', 'terms', field='location', size=10)
			s = s.sort(o+sort_field)
			s = s[from_size:to_size]
			response = s.execute()
			return {'success': 1, 'data': response.to_dict()}, 200
		except Exception as e:
			return {'success': 0, 'message': e}, 200
Exemple #4
0
	def post(self):
		ts = self.args['_']
		if abs(int(time() * 1000) - int(ts)) > 1800000:
			return {'success':0, 'message': '时间戳无效'}, 200
		token = self.args['token']
		appkey = self.args['appkey']
		verify_token = flask_redis.get(appkey)
		if verify_token is None:
			return {'success': 0, 'message': 'token 无效'}, 200
		else:
			verify_token = verify_token.decode('utf-8') if type(verify_token) == type(b'') else verify_token
			if verify_token != token:
				return {'success': 0, 'message': 'token 无效'}, 200
		sign = self.args['sign']
		if hash_sha256("{0},{1},{2}".format(ts, token, appkey)) != sign:
			return {'success': 0, 'message': 'sign 无效'}, 200
		query = Website.query.join(Token, Website.id==Token.website_id).filter(Token.appkey == appkey).first()
		domain = query.domain
		page = int(self.args['page'])
		size = int(self.args['size'])
		from_size = (page - 1) * size
		to_size = page * size
		origin = self.args['origin']
		channel = self.args['channel']
		category = self.args['category']
		author = self.args['author']
		editor = self.args['editor']
		begin = self.args['from']
		to = self.args['to']
		has_pic = self.args['has_pic']
		has_video = self.args['has_video']
		v1 = self.args['v1']
		v2 = self.args['v2']
		v3 = self.args['v3']
		v4 = self.args['v4']
		v5 = self.args['v5']
		v6 = self.args['v6']
		not_ = self.args['not']
		and_ = self.args['and']
		sort_field = self.args['s']
		o = self.args['o']
		f = self.args['f']
		l = self.args['l']
		l = [] if l is None else l.split(',')
		scope = self.args['scope']
		if scope in ['content', 'tag', 'title', 'description']:
			scope = [scope]
		else:
			scope = ['content', 'tag', 'title', 'description']
		keyword = self.args['keyword']
		try:
			s = Search(using=client, index='common', doc_type='search')
			s = s.filter('term', website=domain)
			if author:
				s = s.filter('term', author=author)
			if editor:
				s = s.filter('term', editor=editor)
			if origin:
				s = s.filter('term', origin=origin)
			if category:
				s = s.filter('term', category=category)
			if channel:
				s = s.filter('term', channel=channel)
			if v1:
				s = s.filter('term', reserved_1=v1)
			if v2:
				s = s.filter('term', reserved_2=v2)
			if v3:
				s = s.filter('term', reserved_3=v3)
			if v4:
				s = s.filter('term', reserved_4=v4)
			if v5:
				s = s.filter('term', reserved_5=v5)
			if v6:
				s = s.filter('term', reserved_6=v6)
			if has_pic == '0':
				s = s.filter('term', has_pic=False)
			elif has_pic == '1':
				s = s.filter('term', has_pic=True)
			if has_video == '0':
				s = s.filter('term', has_video=False)
			elif has_video == '1':
				s = s.filter('term', has_video=True)
			s = s.filter('range', pdate={'gte': begin, 'lte': to})

			s = s.query('multi_match', query=keyword, fields=scope)
			if not_:
				s = s.exclude('multi_match', query=not_, fields=scope)
			if and_ != None and and_.strip() != '':
				for word in split(r'\s+', and_.strip()):
					s = s.query('multi_match', query=word, fields=scope)
			s = s.highlight('title', fragment_size=50).highlight('content', fragment_size=100).highlight('tag', fragment_size=50).highlight('description', fragment_size=100)
			if f == 'title':
				s = s.exclude('terms', title__raw=l)
			elif f == 'url':
				s = s.exclude('terms', url=l)
			s = s.sort(o+sort_field)
			s = s[from_size:to_size]
			response = s.execute()
			related = related_search(client, keyword)
			return {'success': 1, 'data': response.to_dict(), 'related': related}, 200
		except Exception as e:
			return {'success': 0, 'message': e}, 200