Skip to content

Instantly share code, notes, and snippets.

@ellipse42-archived
Last active August 29, 2015 14:06
Show Gist options
  • Select an option

  • Save ellipse42-archived/3c682d77bd708c7b74a4 to your computer and use it in GitHub Desktop.

Select an option

Save ellipse42-archived/3c682d77bd708c7b74a4 to your computer and use it in GitHub Desktop.
Some Api Script
#! /usr/bin/env python
# coding=utf-8
import sys
import json
import traceback
import hashlib
import requests
from collections import OrderedDict
class Api(object):
API_PREFIX = 'api/v1'
def __init__(self, *args, **kwargs):
self.setup(*args, **kwargs)
def setup(self, app_key, app_token, host='127.0.0.1', port=8888):
self.app_key = app_key
self.app_token = app_token
self.host = host
self.port = port
def _process(self, api, params, method):
try:
# params
params.update({'app_key': self.app_key})
self._encrypt_params(params)
# request GET/POST
url = 'http://%s:%d/%s/%s' % (
self.host, self.port, self.API_PREFIX, api)
if method == 'GET':
info = requests.get(url, params=params)
elif method == 'POST':
info = requests.post(url, data=json.dumps(
params), headers={'content-type': 'application/json'})
else:
raise APIError(4000, 'Request method: %s' % method)
info = info.json()
if info['code'] != 200:
raise APIError(6000, info['message'])
return True, info['data']
except APIError, e:
return False, str(e)
except Exception, e:
traceback.print_exc(file=sys.stdout)
return False, APIError(5000, str(e))
def get_user(self, uid):
return self._process('user', {'uid': uid}, 'GET')
def add_user(self, name):
return self._process('user', {'name': name}, 'POST')
def del_user(self, uid):
return self._process('user', {'uid': uid}, 'GET')
def update_user(self, uid, name):
return self._process(api, {'uid': uid, 'name': name}, method)
def _encrypt_params(self, params):
ordered_params = OrderedDict(
sorted(params.items(), key=lambda x: x[0]))
data = ''
for value in ordered_params.itervalues():
data += value
signature = hashlib.sha1(self.app_token + data).hexdigest()
params.update({'signature': signature})
class APIError(Exception):
def __init__(self, code=2000, message=''):
self.code = code
self.message = message
self.code_type = _code_types.get(self.code, 'Unknow Error')
def __str__(self):
err = {'code': self.code, 'message':
self.message, 'codeType': self.code_type}
return json.dumps(err)
_code_types = {
1000: 'Successful Request',
2000: 'Api',
3000: 'Params Verify Error',
4000: 'Request Method Not Exists',
5000: 'Can\'t Recognize Error',
6000: 'Result Error'
}
if __name__ == '__main__':
# raise APIError(3000, 'request /api/payment error')
api = Api('e1_test', r'ml3u4hg^2t@%+c3!ft3g*b_&&=32tgrf2o&id85vh&f)qef=)2')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment