def set_status(fromUser, choice): from model.redisdb import RedisDB con = RedisDB().con if con.exists('WECHAT_STATUS:'+fromUser) == False: con.set('WECHAT_STATUS:'+fromUser, 0) if choice == 0: con.set('WECHAT_STATUS:'+fromUser, 0) elif choice == 1: if con.get('WECHAT_STATUS:'+fromUser) == '1': num = con.get('WECHAT_IMG_NUM:'+fromUser) con.set('WECHAT_STATUS:'+fromUser, 0) return int(num) else: con.set('WECHAT_STATUS:'+fromUser, 1) con.set('WECHAT_IMG_NUM:'+fromUser, 0) con.expire('WECHAT_STATUS:'+fromUser, 1800) import os path = os.path.realpath(__file__) path = '/'.join(path.split('/')[:-2]) os.system("mkdir %s/tmp/user/%s"%(path,fromUser)) os.system("mkdir %s/tmp/user/%s/recent"%(path,fromUser)) os.system("mkdir %s/tmp/user/%s/sanguosha"%(path,fromUser)) return -1 elif choice == 2: con.set('WECHAT_STATUS:'+fromUser, '201')
def createcall(): cookies = request.cookies weopenid = cookies["weopenid"] print weopenid form = request.form target = form["target"].encode("utf-8") print target from config import BAIDU_AK para = {"address": target, "output": "json", "ak": BAIDU_AK} import urllib url = "http://api.map.baidu.com/geocoder/v2/?" + urllib.urlencode(para) import requests res = requests.get(url) import json data = json.loads(res.text) location = data["result"]["location"] end_wei = location["lat"] # weidu end_jing = location["lng"] # jingdu from model.redisdb import RedisDB con = RedisDB().con geo = con.get("openid2geo:%s" % weopenid).split(":") start_wei = geo[0] start_jing = geo[1] access_token = con.get("weopenid2uber:%s" % weopenid) url = "https://sandbox-api.uber.com.cn/v1/requests" headers = {"Authorization": "Bearer " + access_token, "Content-Type": "application/json"} para = { "start_latitude": float(start_wei), "start_longitude": float(start_jing), "end_latitude": float(end_wei), "end_longitude": float(end_jing), } import json res = requests.post(url, data=json.dumps(para), headers=headers) data = json.loads(res.text) request_id = data["request_id"] driver = data["driver"] eta = data["eta"] surge_multiplier = data["surge_multiplier"] print request_id, driver, eta, surge_multiplier con.set("openid2requestid:%s" % weopenid, request_id) return jsonify(res="00000")
def index(pin_id): args = request.args if not "code" in args: return "error" code = args["code"] from model.redisdb import RedisDB con = RedisDB().con target = con.get("pinid2target:%s" % pin_id) time = con.get("pinid2time:%s" % pin_id) num = int(con.get("pinid2num:%s" % pin_id)) return render_template("index.html", target=target, time=time, num=num, pinid=pin_id, code=code)
def save_image(fromUser, picurl, mediaid): status = get_status(fromUser) from model.redisdb import RedisDB con = RedisDB().con routerid = con.get('WECHAT_BIND:'+fromUser) import time now_time = time.time() now_time = time.localtime(now_time) now_time = time.strftime('%Y-%m-%d-%H:%M:%S',now_time) if status == '1': filename = now_time + '.jpg' import os path = os.path.realpath(__file__) path = '/'.join(path.split('/')[:-2]) os.system('wget -O %s/tmp/user/%s/recent/%s "%s" &'%(path, fromUser, filename, picurl)) from model.redisdb import RedisDB con = RedisDB().con num = int(con.get('WECHAT_IMG_NUM:'+fromUser)) con.set('WECHAT_IMG_NUM:'+fromUser, num+1) routerid = con.get('WECHAT_BIND:'+fromUser) if routerid != None: f = open('%s/tmp/router/%s/ins.json'%(path,routerid),'r') text = f.read() if text == '': text = '{"ins":[]}' import json data = json.loads(text) f.close() f = open('%s/tmp/router/%s/ins.json'%(path,routerid),'w') data['ins'].append({'type':'image','wechatid':fromUser,'url':'http://wull.me/user/%s/recent/%s'%(fromUser,filename)}) f.write(json.dumps(data)) f.close() return '' elif status == '201': import os path = os.path.realpath(__file__) path = '/'.join(path.split('/')[:-2]) os.system("mkdir %s/tmp/user/%s"%(path,fromUser)) os.system("mkdir %s/tmp/user/%s/sanguosha"%(path,fromUser)) # os.system("mkdir /root/workplace/TI/tiplayer/image/%s/recent"%fromUser) os.system('wget -O %s/tmp/user/%s/sanguosha/pic.jpg "%s" &'%(path, fromUser, picurl)) from model.redisdb import RedisDB con = RedisDB().con con.set('WECHAT_STATUS:'+fromUser, '202') return u'【step 1/6】发一下姓名过来,如“张三”,支持2~4个字'
def router_getins(): ''' 路由器轮询获取指令 ''' form = request.form if not 'token' in form or not 'routerid' in form or not 'routerkey' in form: return 'errror' token = form['token'] routerid = form['routerid'] routerkey = form['routerkey'] if token != 'djqoidjqoq12e941nqdqnfhoho-==': return 'error' from model.redisdb import RedisDB con = RedisDB().con if con.get('routerid2key:%s'%routerid) != routerkey: return 'error' try: f = open('tmp/router/%s/ins.json'%routerid,'r') data = f.read() f.close() except: data = '{"ins":[]}' f = open('tmp/router/%s/ins.json'%routerid,'w') f.write('{"ins":[]}') f.close() return data
def get_accesstoken(): try: from model.redisdb import RedisDB con = RedisDB().con except: from redis import Redis con = Redis('localhost') access_token = con.get('WECHAT_ACCESS_TOKEN') if access_token != None: return access_token from config import APP_KEY, APP_SECRET import requests import urllib, json url = "https://api.weixin.qq.com/cgi-bin/token?" data = { 'grant_type':'client_credential', 'appid':APP_KEY, 'secret':APP_SECRET } res = requests.get(url + urllib.urlencode(data)) res_data = json.loads(res.text) access_token = res_data['access_token'] con.set('WECHAT_ACCESS_TOKEN', access_token) con.expire('WECHAT_ACCESS_TOKEN', 3600) return access_token
def getbind(): args = request.args openid = args['openid'] from model.redisdb import RedisDB con = RedisDB().con if con.exists('WECHAT_BIND:'+openid) == False: return jsonify(num=1, routerid=con.get('WECHAT_BIND:'+openid)) return jsonify(num=0)
def get_status(fromUser): from model.redisdb import RedisDB con = RedisDB().con if con.exists('WECHAT_STATUS:'+fromUser) == False: con.set('WECHAT_STATUS:'+fromUser, 0) return con.get('WECHAT_STATUS:'+fromUser)
def pininfo(pinid): from model.redisdb import RedisDB con = RedisDB().con openidlist = con.get("pinid2openid:%s" % pinid) target = con.get("pinid2target:%s" % pinid) time = con.get("pinid2time:%s" % pinid) num = int(con.get("pinid2num:%s" % pinid)) idlist = openidlist.split(";") from wechat.tools import get_info_by_openid leader_nickname, leader_headimgurl = get_info_by_openid(idlist[0]) userlist = [{"name": leader_nickname, "headimgurl": leader_headimgurl}] print userlist for item in idlist[1:]: nickname, headimgurl = get_info_by_openid(item) userlist.append({"name": nickname, "headimgurl": headimgurl}) return jsonify(res="00000", leader=leader_nickname, member=userlist)
def add_pinid(pinid, code): from wechat.tools import get_accesstoken_by_code access_token, openid = get_accesstoken_by_code(code) from model.redisdb import RedisDB con = RedisDB().con openidlist = con.get("pinid2openid:%s" % pinid) openidlist = openidlist + ";" + openid con.set("pinid2openid:%s" % pinid, openidlist) return jsonify(res="00000")
def get_username_by_session(session): ''' 根据session获得用户名 ''' from model.redisdb import RedisDB con = RedisDB().con key = 'session2username:'+session value = con.get(key) if value != None: con.expire(key, 3600) return value
def router_admin(): ''' 路由管理 ''' #https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxc4d580c3d948f21a&redirect_uri=http%3A%2F%2Fwull.me/router/admin&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect args = request.args if not 'code' in args: return '请用微信打开网页' code = args['code'] from wechat.tool import get_accesstoken_by_code access_token, openid = get_accesstoken_by_code(code) from model.redisdb import RedisDB con = RedisDB().con routerid = con.get('WECHAT_BIND:'+openid) if routerid == None: return render_template("admin_error.html") else: return redirect("http://192.168.1.1:5000")
def w_index(): if request.method == 'GET': try: args = request.args signature = args.get('signature','') timestamp = args.get('timestamp','') nonce = args.get('nonce','') echostr = args.get('echostr') token = 'zengzhaoyang' list = [token,timestamp,nonce] list.sort() sha1 = hashlib.sha1() map(sha1.update,list) hashcode = sha1.hexdigest() if hashcode == signature: return echostr return 'wrong' except: return 'wrong' else: data = request.data re_touser = re.compile('<ToUserName><!\\[CDATA\\[(.*?)\\]\\]></ToUserName>') re_fromuser = re.compile('<FromUserName><!\\[CDATA\\[(.*?)\\]\\]></FromUserName>') re_msgType = re.compile('<MsgType><!\\[CDATA\\[(.*?)\\]\\]></MsgType>') re_content = re.compile('<Content><!\\[CDATA\\[(.*?)\\]\\]></Content>') re_event = re.compile('<Event><!\\[CDATA\\[(.*?)\\]\\]></Event>') re_eventkey = re.compile('<EventKey><!\\[CDATA\\[(.*?)\\]\\]></EventKey>') re_recognition = re.compile('<Recognition><!\\[CDATA\\[(.*?)\\]\\]></Recognition>') re_picurl = re.compile('<PicUrl><!\\[CDATA\\[(.*?)\\]\\]></PicUrl>') re_mediaid = re.compile('<MediaId><!\\[CDATA\\[(.*?)\\]\\]></MediaId>') re_scantype = re.compile('<ScanType><!\\[CDATA\\[(.*?)\\]\\]></ScanType>') re_scanresult = re.compile('<ScanResult><!\\[CDATA\\[(.*?)\\]\\]></ScanResult>') toUser = re_touser.findall(data)[0] fromUser = re_fromuser.findall(data)[0] msgType = re_msgType.findall(data)[0] if msgType == 'event': event = re_event.findall(data)[0] if event == 'subscribe': return reply_text%(fromUser, toUser, int(time.time()), 'hello') elif event == 'unsubscribe': return reply_text%(fromUser, toUser, int(time.time()), 'bye') elif event == 'CLICK': eventKey = re_eventkey.findall(data)[0] if eventKey == 'BUTTON1': from tool import random_choose_music res = random_choose_music() return reply_music%(fromUser, toUser, int(time.time()), res['songName'], res['artistName'], res['showLink'], res['showLink']) elif eventKey == 'BUTTON2': from tool import check_bind if check_bind(fromUser) == False: return reply_text%(fromUser, toUser, int(time.time()), '不好意思,你还没有绑定设备,扫描二维码进行绑定吧') from tool import set_status res = set_status(fromUser, 1) if res == -1: return reply_text%(fromUser, toUser, int(time.time()), '您已进入云备胎状态,现在您发送的图片都会直接同步到小t哦\n再次点击“云备胎”按钮可以退出状态\n三十分钟内没有发送图片的话也会自动退出状态哦') else: if res != 0: import os os.system("python /root/workplace/TI/tiplayer/wechat/w.py %s &"%fromUser) return reply_text%(fromUser, toUser, int(time.time()), '本次您总共同步了%d张照片,谢谢您的使用'%res) elif eventKey == 'BUTTON3': from tool import set_status res = set_status(fromUser, 2) return reply_text%(fromUser, toUser, int(time.time()), '发一张图片过来吧,有惊喜哦') elif event == 'VIEW': eventKey = re_eventkey.findall(data)[0] return '' elif msgType == 'image': picurl = re_picurl.findall(data)[0] mediaid = re_mediaid.findall(data)[0] from tool import save_image res = save_image(fromUser, picurl, mediaid) if res == '': return '' else : return reply_text%(fromUser, toUser, int(time.time()), res) elif msgType == 'text': content = re_content.findall(data)[0] if content == '取消': from tool import set_status set_status(fromUser, 0) return reply_text%(fromUser, toUser, int(time.time()), '回到正常状态') if content == '取消绑定': from tool import cancel_bind cancel_bind(fromUser) return reply_text%(fromUser, toUser, int(time.time()), '取消绑定成功') from tool import check_status status, res = check_status(fromUser, content) if status == 0: return reply_text%(fromUser, toUser, int(time.time()), res) temp = content.split() if temp[0] == '音乐': query = ' '.join(temp[1:]) from tool import get_music showLink = get_music(query) return reply_music%(fromUser, toUser, int(time.time()), query.decode('utf-8'), ' ', showLink, showLink) elif temp[0] == '下载': if len(temp) != 3: return reply_text%(fromUser, toUser, int(time.time()), '请以"下载 文件名 下载地址"的格式输入') filename = temp[1] url = temp[2] # from tool import download_url # download_url(fromUser, filename, url) from model.redisdb import RedisDB con = RedisDB().con routerid = con.get('WECHAT_BIND:'+fromUser) if routerid == None: return reply_text%(fromUser, toUser, int(time.time()), '不好意思,你还没有绑定设备,扫描二维码进行绑定吧') import os path = os.path.realpath(__name__) path = '/'.join(path.split('/')[:-1]) f = open(path + '/tmp/router/%s/ins.json'%routerid,'w') w_dict = { 'ins':[ { "type":"download", "url":url, "filename":filename, "wechatid":fromUser } ] } import json f.write(json.dumps(w_dict)) f.close() return reply_text%(fromUser, toUser, int(time.time()), '您的任务已提交至下载队列,下载完成后我们将会提醒您') #return reply_text%(fromUser, toUser, int(time.time()), content) return "" elif msgType == 'voice': recognition = re_recognition.findall(data)[0] if recognition == '停': from model.redisdb import RedisDB con = RedisDB().con routerid = con.get('WECHAT_BIND:'+fromUser) if routerid != None: import os path = os.path.realpath(__file__) path = '/'.join(path.split('/')[:-2]) f = open('%s/tmp/router/%s/ins.json'%(path,routerid),'r') text = f.read() if text == '': text = '{"ins":[]}' import json data = json.loads(text) f.close() f = open('%s/tmp/router/%s/ins.json'%(path,routerid),'w') data['ins'].append({'type':'stop'}) f.write(json.dumps(data)) f.close() from tool import voice res = voice(recognition) if res[0] == 'text': return reply_text%(fromUser, toUser, int(time.time()), recognition) elif res[0] == 'music': from model.redisdb import RedisDB con = RedisDB().con routerid = con.get('WECHAT_BIND:'+fromUser) if routerid != None: import os path = os.path.realpath(__file__) path = '/'.join(path.split('/')[:-2]) f = open('%s/tmp/router/%s/ins.json'%(path,routerid),'r') text = f.read() if text == '': text = '{"ins":[]}' import json data = json.loads(text) f.close() f = open('%s/tmp/router/%s/ins.json'%(path,routerid),'w') data['ins'].append({'type':'play','showlink':res[3]}) f.write(json.dumps(data)) f.close() return reply_music%(fromUser, toUser, int(time.time()), res[1], res[2], res[3], res[3]) elif res[0] == 'video': return reply_news%(fromUser, toUser, int(time.time()), res[1], '', 'http://wull.me/static/img/getheadimg.jpg', res[2]) elif res[0] == 'set': from model.redisdb import RedisDB con = RedisDB().con routerid = con.get('WECHAT_BIND:'+fromUser) if routerid != None: import os path = os.path.realpath(__file__) f = open('%s/tmp/router/%s/ins.json'%(path,routerid),'r') text = f.read() if text == '': text = '{"ins":[]}' import json data = json.loads(text) f.close() f = open('%s/tmp/router/%s/ins.json'%(path,routerid),'w') data['ins'].append({'type':'set','obj':res[1],'op':res[2]}) f.write(json.dumps(data)) f.close() return ''
def wechat_index(): if request.method == 'GET': try: args = request.args signature = args.get('signature','') timestamp = args.get('timestamp','') nonce = args.get('nonce','') echostr = args.get('echostr') token = 'zengzhaoyang' list = [token,timestamp,nonce] list.sort() sha1 = hashlib.sha1() map(sha1.update,list) hashcode = sha1.hexdigest() if hashcode == signature: return echostr return 'wrong' except: return 'wrong' else: data = request.data re_touser = re.compile('<ToUserName><!\\[CDATA\\[(.*?)\\]\\]></ToUserName>') re_fromuser = re.compile('<FromUserName><!\\[CDATA\\[(.*?)\\]\\]></FromUserName>') re_msgType = re.compile('<MsgType><!\\[CDATA\\[(.*?)\\]\\]></MsgType>') re_content = re.compile('<Content><!\\[CDATA\\[(.*?)\\]\\]></Content>') re_event = re.compile('<Event><!\\[CDATA\\[(.*?)\\]\\]></Event>') re_eventkey = re.compile('<EventKey><!\\[CDATA\\[(.*?)\\]\\]></EventKey>') re_recognition = re.compile('<Recognition><!\\[CDATA\\[(.*?)\\]\\]></Recognition>') re_picurl = re.compile('<PicUrl><!\\[CDATA\\[(.*?)\\]\\]></PicUrl>') re_mediaid = re.compile('<MediaId><!\\[CDATA\\[(.*?)\\]\\]></MediaId>') re_scantype = re.compile('<ScanType><!\\[CDATA\\[(.*?)\\]\\]></ScanType>') re_scanresult = re.compile('<ScanResult><!\\[CDATA\\[(.*?)\\]\\]></ScanResult>') re_latitude = re.compile('<Latitude>(.*?)</Latitude>') re_longitude = re.compile('<Longitude>(.*?)</Longitude>') toUser = re_touser.findall(data)[0] fromUser = re_fromuser.findall(data)[0] msgType = re_msgType.findall(data)[0] if msgType == 'event': event = re_event.findall(data)[0] if event == 'CLICK': eventKey = re_eventkey.findall(data)[0] if eventKey == 'QUERY': from model.redisdb import RedisDB con = RedisDB().con access_token = con.get('weopenid2uber:%s'%fromUser) request_id = con.get('openid2requestid:%s'%fromUser) url = 'https://sandbox-api.uber.com.cn/v1/requests/%s'%request_id headers = {'Authorization':'Bearer '+access_token}#,'Content-Type': 'application/json'} import json import requests res = requests.get(url, headers=headers) print res.text data = json.loads(res.text) driver_name = 'null' driver_phone = '' driver_rating = '' eta = '' license_plate = '' try: driver = data['driver'] driver_phone = driver['phone_number'] driver_rating = driver['rating'] driver_name = driver['name'] eta = data['eta'] license_plate = data['vehicle']['license_plate'] except: pass word = '司机:%s\n手机号:%s\n星际:%s\n车牌:%s\n剩余时间:%s分钟\n'%(driver_name, driver_phone, driver_rating, license_plate, eta) return reply_text%(fromUser, toUser, int(time.time()), word) if event == 'LOCATION': print 'hahaha' lat = re_latitude.findall(data)[0] # weidu lng = re_longitude.findall(data)[0] # jingdu print lat,lng from model.redisdb import RedisDB con = RedisDB().con con.set('openid2geo:%s'%fromUser,lat+':'+lng) return '' elif msgType == 'text': content = re_content.findall(data)[0] return reply_text%(fromUser, toUser, int(time.time()), content) elif msgType == 'voice': recognition = re_recognition.findall(data)[0] pass
def get_userid_by_session(session): from model.redisdb import RedisDB con = RedisDB().con userid = con.get('session2username:%s'%session) print userid return userid