def serverInfo(guildId, channelId): # Auth and session token = session.get('oauth2_token') (user, usertoken) = get_user_cache(token, cache) check_auth(user, usertoken) channelId = channelId if (channelId != None) else guildId mysqldb = MySQL(current_app.config['DB_HOST'], current_app.config['DB_USER'], current_app.config['DB_PASS']) mysqldb.connect() messages = mysqldb.getMessages(channelId) nbMessages = len(messages) # API calls headers = {'authorization': usertoken} channel = requests.get(API_BASE_URL + '/channels/' + channelId, headers=headers).json() guild = requests.get(API_BASE_URL + '/guilds/' + guildId, headers=headers).json() channels = requests.get(API_BASE_URL + '/guilds/' + guildId + '/channels', headers=headers).json() cache['guilds'][guildId] = guild guild = cache['guilds'][channel['guild_id']] data = { 'guildId': guildId, 'channelId': channelId, 'channels': channels } channelinfos = { 'nbmessages' : nbMessages, 'nbchannels' : 0, 'firstmessage' : mysqldb.getFirstMessage(channelId), 'lastmessage' : mysqldb.getLastMessage(channelId) } # Compute things # Render return render_template("layout.html", contentTemplate="server-info.html", user=user, server=guild, data=data, channelinfos=channelinfos)
retryCount += 1 if (retryCount == 2): logging.error('Timeout:user ' + id + ' cannot be filled. Process end.') retryCount = 0 pass else: logging.warning('Timeout:user ' + id + ' cannot be filled. Retrying...') autoFill(id, cursor) # def readFile(): # fileHandler = open("Id.txt", "r"); # IdList = fileHandler.read().splitlines(); # fileHandler.close(); # return IdList; if __name__ == "__main__": dt = DataLoader() users = dt.get_users() dt.update_load_status(users) print(users) db = MySQL() con = db.connect() with con: with con.cursor() as cursor: for user in users: autoFill(user, cursor) con.commit()
def start_database(): db = MySQL() db.init_app(app) conn = db.connect() conn.autocommit(1) return conn
def graph(channelId): # Logic mysqldb = MySQL(current_app.config['DB_HOST'], current_app.config['DB_USER'], current_app.config['DB_PASS']) mysqldb.connect() messages = mysqldb.getMessages(channelId) # main logic count = {} label = {} for message in messages: if message['author_id'] in count: count[message['author_id']] += 1 else: count[message['author_id']] = 1 label[message['author_id']] = message['author_username'] nodes = [] authors = len(count) i = 0 for author in count: color = colorsys.hsv_to_rgb(1/authors*i,1,1) node = { 'id': author, 'label': label[author], 'color': ('#%02X%02X%02X' % (int(color[0]*255), int(color[1]*255), int(color[2]*255))), 'value': count[author] } nodes.append(node) i+=1 #[{from: 1, to: 3, value: 3},..] edges = [] labels = {} contentMessages = {} days = {} dayMember = {} mostWord = {} for author in count: dayMember[author] = {} for i in range(1, len(messages)): # graph key = (messages[i]['author_id'],messages[i-1]['author_id']) if key in labels: labels[key] += 1 contentMessages[key]+= (" \n " + messages[i]['content']) else: labels[key] = 1 contentMessages[key] = messages[i]['content'] # time timestamp = messages[i]['timestamp'] d = datetime.date(timestamp.year, timestamp.month, timestamp.day) timeKey = calendar.timegm(d.timetuple()) member = messages[i]['author_id'] if (timeKey in dayMember[member]): dayMember[member][timeKey] += 1 else: dayMember[member][timeKey] = 1 if (timeKey in days): days[timeKey] += 1 else: days[timeKey] = 1 # --- WORD COUNT --- for contentMessage in contentMessages: msg = contentMessages[contentMessage] words = msg.split() filteredEN_words = [word for word in words if word not in getEnglishStopsWords()] filteredFR_words = [word for word in filteredEN_words if word not in getFrenchStopsWords()] word_counts = Counter(filteredFR_words) num_words = sum(word_counts.values()) lst = [(value, key) for key, value in word_counts.items()] lst.sort(reverse=True) if len(lst) > 0: mostWord[contentMessage] = lst[0] else: mostWord[contentMessage] = '' dayList = {} for member in dayMember: dayList[member] = [] daysSorted = sorted(dayMember[member]) for day in daysSorted: dayList[member].append([day*1000, dayMember[member][day]]) for label in labels: edge = { 'from': label[0], 'to': label[1], 'arrows': 'to', 'label' : mostWord[label][1] if (len(mostWord[label]) >= 2) else '', 'value': labels[label] } edges.append(edge) # Render json = { 'nodes': nodes, 'edges': edges, 'days': dayList } return jsonify(json)
def compute(guildId): # Auth and session token = session.get('oauth2_token') (user, usertoken) = get_user_cache(token, cache) # Logic way = request.args.get('time') channelId = request.args.get('channelId') mysqldb = MySQL(current_app.config['DB_HOST'], current_app.config['DB_USER'], current_app.config['DB_PASS']) mysqldb.connect() params = {} nbMessagesStr = request.args.get('number') if nbMessagesStr is not None: nbMessagesLeft = int(request.args.get('number')) else: nbMessagesLeft = 100 if nbMessagesLeft < 0: nbMessagesLeft = 100 if nbMessagesLeft > 1000: nbMessagesLeft = 1000 # API calls headers = {'authorization': usertoken} first = True while nbMessagesLeft > 0: if not first: time.sleep(1) first = False nbToTake = nbMessagesLeft if nbMessagesLeft > 100: nbToTake = 100 lastMessageId = mysqldb.getLastMessage(channelId) if lastMessageId is None: channel = requests.get(API_BASE_URL + '/channels/' + channelId, headers=headers).json() params = {'around': int(channel['last_message_id']), 'limit': nbToTake} elif way == 'after': lastMessageId = mysqldb.getLastMessage(channelId) params = {'after': int(lastMessageId['id']), 'limit': nbToTake} elif way == 'before': firstMessageId = mysqldb.getFirstMessage(channelId) params = {'before': int(firstMessageId['id']), 'limit': nbToTake} else: abort(412, "Incorrect 'time' parameter.") return messages = requests.get(API_BASE_URL + '/channels/' + channelId + '/messages', headers=headers, params=params).json() def take8(l): return [l[0], l[1][:8]] toInsert = [(str(message['id']), str(guildId), str(channelId), str(message['author']['id']), str(message['content']), str(' '.join(take8(message['timestamp'].split('T')))), str(message['author']['username']), message['author']['discriminator'], str(message['author']['avatar'])) for message in messages] # DB Fill returnValue = mysqldb.insertMessages(toInsert) nbMessagesLeft -= nbToTake # Render json = { 'result': 'ok', 'message': 'Successfully inserted messages' } return jsonify(json)