def fb_login(cls, did, fbid, fb_name, frd_list): uid = cls.fbid_to_uid(fbid) is_new = False if uid is None: uid = cls.did_to_uid(did) # create new account if device already binded to a fb id if uid is None or cls.did_to_fbid(did) is not None: uid = cls.create_user(fbid, cls.FBID2UID) is_new = True Log.info("create user by fb: uid=%d" % uid) else: # clear device id map to enable new login by did? Redis().hset(cls.FBID2UID, fbid, uid) Redis().hset(cls.DID2FBID, did, fbid) Log.info("move user to fb map: uid=%d" % uid) #update info user = User(uid) user.setName(fb_name) if not user.fbid: #import friends for 1st time uid_list = [] for f in frd_list: u = cls.fbid_to_uid(f) if u is not None: uid_list.append(u) if len(uid_list) > 0: Social.importFriends(uid, uid_list) user.fbid = fbid return (uid, is_new)
def confirm(cls, para): uid = para['uid'] fuid = para['fuid'] req = cls(uid) if not req.exist(fuid): return Error.REQUEST_NOT_EXIST if Social.importFriends(uid, [fuid]) is False: return Error.FRIEND_FULL req.delete(fuid) return {}
def share(cls, para): uid = para['uid'] share_type = int(para['type']) share_gift = cls(uid) if not share_gift.hasFlag(share_type): return Error.INVALID_PARAM now = int(time.time()) key = '%s:%s' % (uid, now) data = { 'uid': uid, 'time': now, 'type': share_type, } item_type = cls.getIndexItemType() item_type(key).setAll(data) Redis().expire(key, cls.TTL) frd_list = Social.getFriendsUID(uid) for f in frd_list: box = cls(f) box.addKey(key) Notice(f).push({'type':Notice.TYPE_SHAREGIFT}) n = box.size() if n > cls.MAX_SIZE: box.remove(n - cls.MAX_SIZE) # clear share_gift.clearFlag(share_type) return {}
def recommend(cls, para): uid = para['uid'] uid_list = cls.getNearby(uid, cls.REC_NUM) ret = [] for u in uid_list: if Social.isFriend(uid, u): continue user = User(u) data = {'uid':u, 'name':user.getName(), 'icon':user.getIcon(), 'level':user.level} if user.country is not None: data['country'] = user.country if user.region is not None: data['region'] = user.region ret.append(data) return {'users': ret}
def __init__(self, main, ad, influence, recommendation, input, graph, env, people): self.mainConfig = main self.influenceConfig = influence self.adConfig = ad self.recommendationConfig = recommendation self.inputConfig = input self.graphConfig = graph self.envConfig = env self.graph = people self.environment = Environment(self.graph, self.envConfig) pygame.init() surface = pygame.display.set_mode((1920, 1080)) pygame.display.set_caption("User Interactions") clock = pygame.time.Clock() self.graphDrawrer = GraphDrawrer(self.graph, self.mainConfig, self.influenceConfig, self.adConfig, self.recommendationConfig, self.graphConfig, self.envConfig) counter = 0 record = {} if self.mainConfig.influence and self.influenceConfig.type == "1": influence = Influence1(self.graph) influence.initialiseGraph() influence.startingNodes(int(self.influenceConfig.seed)) if self.mainConfig.influence and self.influenceConfig.type == "2": influence = Influence2(self.graph) influence.initialiseGraph() influence.startingNodes(int(self.influenceConfig.seed)) if self.mainConfig.recommendation: recommendation = Recommendation(self.graph) recommendation.intialise(self.recommendationConfig.seed) for person in self.graph.people: person.item1 = recommendation.getRecommendation(person, "item1") for person in self.graph.people: person.item2 = recommendation.getRecommendation(person, "item2") for person in self.graph.people: person.item3 = recommendation.getRecommendation(person, "item3") if self.mainConfig.social: social = Social(self.graph, self.graphDrawrer) if int(self.inputConfig.cull) < len(self.graph.connections): self.graph.trim(int(self.inputConfig.cull)) for n in range(0,10): for connection in self.graph.connections: if not (connection.between[0] in self.graph.people): self.graph.connections.remove(connection) for connection in self.graph.connections: if not (connection.between[1] in self.graph.people): self.graph.connections.remove(connection) # LineIntersection(self.graph) for n in range(0, 20): Layout(self.graph).force_directed() if self.mainConfig.second: graph = pygame.transform.scale(self.graphDrawrer.make_frame(True), (960 , 1080)) env = pygame.transform.scale(self.environment.make_frame(), (960, 1080)) surface.blit(graph, (0, 0)) surface.blit(env, (960, 0)) else: surface.blit(self.graphDrawrer.make_frame(True), (0,0)) pygame.display.update() clock.tick(60) # LineIntersection(self.graph) if self.mainConfig.advert: viral = Viral(self.graph, float(self.adConfig.seed), float(self.adConfig.email), float(self.adConfig.ad), float(self.adConfig.mu), float(self.adConfig.sigma)) for person in self.graph.people: person.totalPart = 0 viral.makeCampaign(self.graph) viral.seedEmail(self.graph, 5, 0) viral.seedAdvert(self.graph, 0.1, 0) record[counter] = viral.record(self.graph, 0) while self.graphDrawrer.go: counter += 1 if self.mainConfig.social: if (counter%60 == 0): for person in self.graph.people: social.checkWall(person) if random.random() < 0.1: social.postPhoto(person) if random.random() < 0.1: social.postStatus(person) if self.mainConfig.second: graph = pygame.transform.scale(self.graphDrawrer.make_frame(), (960 , 1080)) env = pygame.transform.scale(self.environment.make_frame(), (960, 1080)) surface.blit(graph, (0, 0)) surface.blit(env, (960, 0)) else: surface.blit(self.graphDrawrer.make_frame(), (0,0)) pygame.display.update() clock.tick(60) if counter % 5 == 0: if self.mainConfig.advert: viral.checkEmail(self.graph, 0) record[counter] = viral.record(self.graph, 0) if self.mainConfig.influence: influence.process(counter) Plotter(record)
from flask import Flask, jsonify, Response, request # from ML import ML from ML import ML from DB import DB from Social import Social from SessionManager import SessionManager from flask_cors import CORS app = Flask(__name__) cors = CORS(app, resources={r"/*": {"origins": "*"}}) ml = ML() db = DB() social = Social([db, ml]) sessMan = SessionManager(db, social) @app.route('/sessMan/getTweets', methods=['get']) def runGetTweets(): PID = request.args.get('key')[1:] count = db.getCountPerDay(PID)[0][0] print(count) return sessMan.getTweets(PID, count), 200 @app.route('/sessMan/isRunning', methods=['get']) def profileIsRunning(): PID = request.args.get('key')[1:] return str(sessMan.isProfileRunning(PID)) @app.route('/sessMan/stopProfile', methods=['get'])