Beispiel #1
0
    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)
Beispiel #2
0
    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 {}
Beispiel #3
0
    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 {}
Beispiel #4
0
    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}
Beispiel #5
0
    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'])