阿里云开放搜索的python客户端,阿里云python客户端,阿里云开放搜索的pyth
阿里云开放搜索的python客户端,阿里云python客户端,阿里云开放搜索的pyth
阿里云开放搜索的python客户端:
#!/usr/bin/env python# coding: utf-8import sysreload(sys)sys.setdefaultencoding("utf-8")__author__ = 'yukaizhao'from datetime import datetime, timedeltaimport urllib, urllib2from utils import dumpJSON, loadJSONimport uuidimport timefrom config import configParserOPEN_SEARCH_URL_ROOT = configParser.get('search','aliyunOpenSearchUrlRoot')# APP_NAME = configParser.get('search','aliyunAppName')_ACCESS_KEY=configParser.get('search','aliyunAccessKey')_ACCESS_KEY_SECRET=configParser.get('search','aliyunAccessKeySecret')_HTTP_GET = 'GET'_HTTP_POST = 'POST'_ISO8601_DATE_FORMAT = "%Y-%m-%dT%H:%M:%SZ"_TIMEZONE_UTC_OFFSET = -8_ALIYUN_SING_ALGORITHM = configParser.get('search','aliyunSignAlgorithm')_ALIYUN_SIGN_ENCODING = configParser.get('search','aliyunSignEncoding')from hashlib import sha1import hmacfrom urllib import quote_plusfrom sorteddict import sorteddictdef mac_sha1(key, data): _hmac = hmac.new(key, data.encode('UTF-8'), sha1) signature = _hmac.digest().encode('base64') return signature[:-1]def get_signature(params, method): def _urlencode(val): if isinstance(val, unicode): val = str(val) return quote_plus(val) def _encode(val): if not isinstance(val, basestring): val = str(val) result = _urlencode(val) if result: return result.replace("+", "%20").replace("*", "%2A").replace("%7E", "~") return result queryParms = '&'.join(['%s=%s'% (k, _encode(params[k])) for k in params.keys()]) toSign = '%s&%%2F&%s'% (method, _encode(queryParms)) sha1Key = '%s&'% (_ACCESS_KEY_SECRET,) return mac_sha1(sha1Key, toSign)def to_iso8600_date(dt): utcTime = dt + timedelta(hours=_TIMEZONE_UTC_OFFSET) return utcTime.strftime(_ISO8601_DATE_FORMAT)def call(url, params, method): params["Version"] = "v2" params["AccessKeyId"] = _ACCESS_KEY params["Timestamp"] = to_iso8600_date(datetime.now()) params["SignatureMethod"] = "HMAC-SHA1" params["SignatureVersion"] = "1.0" params["SignatureNonce"] = str(uuid.uuid1()) signature = get_signature(params, method) params['Signature'] = signature para_data = urllib.urlencode(params) if method == _HTTP_GET: url = '%s?%s' % (url, para_data) para_data = None f = urllib2.urlopen(url, para_data) response = f.read() f.close() responseJSON = loadJSON(response) if responseJSON.has_key('status') and responseJSON['status'] == 'OK': return responseJSON['result'] if responseJSON.has_key("result") else True errorInfo = '%s:%s\nresponse:%s' % (method, url, response) raise SearchError(errorInfo)def index_call(appName, params, method): url = '%s%s' % (OPEN_SEARCH_URL_ROOT, appName) return call(url, params, method)def add_document(appName, search_table, items): params = sorteddict({'action':'push','table_name': search_table}) postData = dumpJSON(items) params['items'] = postData return index_call(appName, params, _HTTP_POST)def view_document(appName, docId): params = sorteddict({'id':docId}) return index_call(appName, params, _HTTP_POST)def delete_document(appName, *ids): items = [] for id in ids: items.append({'cmd':'delete',"fields":{"id":id}}) params = sorteddict({'action':'push'}) params['table_name'] = 'code' postData = dumpJSON(items) params['items'] = postData return index_call(appName, params, _HTTP_POST)def list_apps(page, pageSize): url = 'http://opensearch.aliyuncs.com/index' params = sorteddict({'page': page, 'page_size': pageSize}) return call(url, params, _HTTP_GET)def _search(appName, keyword, pageNum, pageSize, sort='-RANK', **where): def escape(input): return input.replace('\'', '') config = u'config=start:%d,hit:%d,format:json' % ((pageNum-1)*pageSize, pageSize) condition = u"query=default:'%s'" % (escape(keyword),) if where is not None: for fieldName,operatorAndOperand in where.items(): operator, fieldValue = operatorAndOperand if isinstance(fieldValue, tuple): exp = '' for v in fieldValue: if exp: exp += ' OR ' exp += u" %s:'%s'" % (fieldName, escape(v)) condition = u" %s (%s)" % (operator, exp) else: condition += u" %s %s:'%s'" % (operator, escape(fieldName), escape(fieldValue)) sortExp = u'sort=%s' % (sort,) query = u'%s && %s && %s' % (config, condition, sortExp) url = u'http://opensearch.aliyuncs.com/search' params = sorteddict({u'query': query,'index_name': appName}) return call(url, params, _HTTP_GET)def search(appName, keyword, pageNum, pageSize, sort='-RANK', **where): # aliyun has bug so add try times logic tryTimes = 0 maxTryTimes = 5 lastEx = None while tryTimes < maxTryTimes: try: return _search(appName, keyword, pageNum, pageSize, sort, **where) except SearchError, ex: tryTimes += 1 lastEx = ex raise lastExdef get_timestamp(): return time.time()class SearchError(RuntimeError): passif __name__ == '__main__': from pprint import pprint result = search(u'内存溢出', 1, 10) pprint (result) delete_document('1','2','3','4','0','10','11','12','13','14') document = view_document("2") pprint(document) apps = list_apps(1, 10) pprint(apps) items = [ { "fields": { "id": "10", "type_id": 71, "cat_id": 53, "title": "溢出内存,内存溢出", "body": "溢出内存,内存溢出", "url": "广大中小企业都有各种结构化的数据需要进行检索,目前一般采用数据库本身提供的搜索功能或者利用open source的搜索软件搭建,这样的做法不但会消耗网站本身的资源,性能也会很容易成为问题,而且相关性通常也不够好。我们的产品的目的是要利用阿里云先进的云计算和搜索技术向广大中小企业提供低成本,高质量,高性能,可定制的数据搜索解决方案。本项目和云搜索的通用解决方案目标略有不同,主要区别为本项目主要针对用户的结构化数据进行搜索,云搜索的通用解决方案则主要是针对网页型数据位处理对象。", "author": "广大中小企业都有各种结构化的数据需要进行检索,目前一般采用数据库本身提供的搜索功能或者利用open source的搜索软件搭建,这样的做法不但会消耗网站本身的资源,性能也会很容易成为问题,而且相关性通常也不够好。我们的产品的目的是要利用阿里云先进的云计算和搜索技术向广大中小企业提供低成本,高质量,高性能,可定制的数据搜索解决方案。本项目和云搜索的通用解决方案目标略有不同,主要区别为本项目主要针对用户的结构化数据进行搜索,云搜索的通用解决方案则主要是针对网页型数据位处理对象。", "thumbnail": "广大中小企业都有各种结构化的数据需要进行检索,目前一般采用数据库本身提供的搜索功能或者利用open source的搜索软件搭建,这样的做法不但会消耗网站本身的资源,性能也会很容易成为问题,而且相关性通常也不够好。我们的产品的目的是要利用阿里云先进的云计算和搜索技术向广大中小企业提供低成本,高质量,高性能,可定制的数据搜索解决方案。本项目和云搜索的通用解决方案目标略有不同,主要区别为本项目主要针对用户的结构化数据进行搜索,云搜索的通用解决方案则主要是针对网页型数据位处理对象。", "create_timestamp": 1, "update_timestamp": 12, "hit_num": 93, "focus_count": 2, "grade": 78, "comment_count": 70, "tag": "广大中小企业都有各种结构化的数据需要进行检索,目前一般采用数据库本身提供的搜索功能或者利用open source的搜索软件搭建,这样的做法不但会消耗网站本身的资源,性能也会很容易成为问题,而且相关性通常也不够好。我们的产品的目的是要利用阿里云先进的云计算和搜索技术向广大中小企业提供低成本,高质量,高性能,可定制的数据搜索解决方案。本项目和云搜索的通用解决方案目标略有不同,主要区别为本项目主要针对用户的结构化数据进行搜索,云搜索的通用解决方案则主要是针对网页型数据位处理对象。", "create_user_id": 14, "create_user_name": "广大中小企业都有各种结构化的数据需要进行检索,目前一般采用数据库本身提供的搜索功能或者利用open source的搜索软件搭建,这样的做法不但会消耗网站本身的资源,性能也会很容易成为问题,而且相关性通常也不够好。我们的产品的目的是要利用阿里云先进的云计算和搜索技术向广大中小企业提供低成本,高质量,高性能,可定制的数据搜索解决方案。本项目和云搜索的通用解决方案目标略有不同,主要区别为本项目主要针对用户的结构化数据进行搜索,云搜索的通用解决方案则主要是针对网页型数据位处理对象。" }, "cmd": "ADD" } ] #add_document(items, 'code')
相关内容
- 阿里云收集服务器性能指标的python脚本,阿里python,下面
- ubuntu安装python3的python-pip,python3python-pip,python-pip默认
- python读取yaml,pythonyaml,python读取yaml
- python获得linux服务器的内存使用率,虚拟内存使用率,
- 64位系统编译Python,64位编译python,如果在64位系统下默认
- python计算文件的md5值,python计算md5,from hashlib
- python通过telnet连接华为设备控制防火墙,python华为,最近
- python使用bmemcached操作memcached示例代码,,python使用bmem
- 爬取千万淘宝商品的python脚本,淘宝商品python脚本,分享
- python打开url下载url内容,python打开url内容,import urlli
评论关闭