def get_notifications_for_user(user,hosts): #users = [EndUser.objects.all()[1].user] users = [friendship.to_friend for friendship in user.friend_set.all()] recently = int(time.time()*1000 - (12*60*60*1000)) return uniq([dict((('username',page.user.username), ('url',page.url), ('title',page.title), ('host',page.host), ('id', page.url + page.user.username))) for page in PageView.objects.filter(user__in=users,host__in=hosts, endTime__gte=recently) ], lambda x:x['id'],None)
def get_delicious_corpus(): to_msec = int(time.time()*1000) from_msec = to_msec - 604800000 # past week # say your prayers -- returns a dict {url:[tag,tag2,tag3]},... return dict([ (page['url'], _get_delicious_tags_for_url(page['url'])) for page in uniq(PageView.objects.filter(startTime__gte=from_msec,endTime__lte=to_msec).values(), lambda x:x["url"],None) ])
def _get_recent_urls_for_user(user): to_msec = int(time.time() * 1000) from_msec = to_msec - 604800000 # past week return [ evt['url'] for evt in uniq( PageView.objects.filter( user=user, startTime__gte=from_msec, endTime__lte=to_msec).values(), lambda x: x["url"], None) ]
def get_delicious_corpus(): to_msec = int(time.time() * 1000) from_msec = to_msec - 604800000 # past week # say your prayers -- returns a dict {url:[tag,tag2,tag3]},... return dict([(page['url'], _get_delicious_tags_for_url(page['url'])) for page in uniq( PageView.objects.filter(startTime__gte=from_msec, endTime__lte=to_msec).values(), lambda x: x["url"], None)])
def post_events(request): ## lets the user post new activity in a giant single array of activity log elements request_user = authenticate_user(request); if not request_user: return json_response({"error":"Incorrect user/password combination"}, 401) logs = JSONDecoder().decode(request.raw_post_data) committed = [save_entry(entry, request_user) for entry in logs ] hosts = uniq([log['entity']['host'] for log in logs], lambda x:x,None) notifications = get_notifications_for_user(request_user,hosts) return json_response({"committed":len(committed), "notifications":notifications}, 200)
def get_notifications_for_user(user, hosts): #users = [EndUser.objects.all()[1].user] users = [friendship.to_friend for friendship in user.friend_set.all()] recently = int(time.time() * 1000 - (12 * 60 * 60 * 1000)) return uniq([ dict((('username', page.user.username), ('url', page.url), ('title', page.title), ('host', page.host), ('id', page.url + page.user.username))) for page in PageView.objects.filter( user__in=users, host__in=hosts, endTime__gte=recently) ], lambda x: x['id'], None)
def post_events(request): ## lets the user post new activity in a giant single array of activity log elements request_user = authenticate_user(request) if not request_user: return json_response({"error": "Incorrect user/password combination"}, 401) logs = JSONDecoder().decode(request.raw_post_data) committed = [save_entry(entry, request_user) for entry in logs] hosts = uniq([log['entity']['host'] for log in logs], lambda x: x, None) notifications = get_notifications_for_user(request_user, hosts) return json_response( { "committed": len(committed), "notifications": notifications }, 200)
def _get_top_tfidf_tags_for_enduser(enduser, n, tags_for_page, all_tags, number_of_pages): tags = flatten([tags_for_page[url] for url in _get_recent_urls_for_user(enduser.user) if url in tags_for_page and tags_for_page[url] is not None ]) enduser_tag_count = len(tags) if enduser_tag_count < 5: return def freq_in_enduser_tags(tag): return tags.count(tag) def freq_in_all_pages(tag): #this will work as delicious will not return 2 of the same tags for one page return all_tags.count(tag) def tfidf(tag): tf = (freq_in_enduser_tags(tag) / float(enduser_tag_count)) idf = math.log(number_of_pages / freq_in_all_pages(tag)) tfidf_tags = dict([(tag, tfidf(tag)) for tag in uniq(tags, lambda x:x,None)]) return sorted(tfidf_tags.items(), key=itemgetter(1), reverse=True)[:n]
def _get_top_tfidf_tags_for_enduser(enduser, n, tags_for_page, all_tags, number_of_pages): tags = flatten([ tags_for_page[url] for url in _get_recent_urls_for_user(enduser.user) if url in tags_for_page and tags_for_page[url] is not None ]) enduser_tag_count = len(tags) if enduser_tag_count < 5: return def freq_in_enduser_tags(tag): return tags.count(tag) def freq_in_all_pages(tag): #this will work as delicious will not return 2 of the same tags for one page return all_tags.count(tag) def tfidf(tag): tf = (freq_in_enduser_tags(tag) / float(enduser_tag_count)) idf = math.log(number_of_pages / freq_in_all_pages(tag)) tfidf_tags = dict([(tag, tfidf(tag)) for tag in uniq(tags, lambda x: x, None)]) return sorted(tfidf_tags.items(), key=itemgetter(1), reverse=True)[:n]
def _get_recent_urls_for_user(user): to_msec = int(time.time()*1000) from_msec = to_msec - 604800000 # past week return [evt['url'] for evt in uniq(PageView.objects.filter(user=user,startTime__gte=from_msec,endTime__lte=to_msec).values(), lambda x:x["url"],None)]