2010-01-05 16:07:11 +00:00
|
|
|
from django.shortcuts import render_to_response, get_list_or_404, get_object_or_404
|
|
|
|
from django.contrib.auth.decorators import login_required
|
|
|
|
from django.template import RequestContext
|
|
|
|
from django.db import IntegrityError
|
|
|
|
from django.core.cache import cache
|
|
|
|
from django.contrib.auth.models import User
|
|
|
|
from django.http import HttpResponse, HttpRequest
|
|
|
|
from django.core import serializers
|
|
|
|
from django.utils.safestring import mark_safe
|
|
|
|
from django.views.decorators.cache import cache_page
|
|
|
|
from django.views.decorators.http import require_POST
|
2010-03-28 14:50:41 -04:00
|
|
|
from apps.rss_feeds.models import Feed, Story, Tag, StoryAuthor
|
2010-02-11 01:28:47 -05:00
|
|
|
from apps.reader.models import UserSubscription, UserStory
|
2010-03-23 20:03:40 -04:00
|
|
|
from apps.analyzer.models import ClassifierTitle, ClassifierAuthor, ClassifierFeed, ClassifierTag, get_classifiers_for_user
|
2010-01-05 16:07:11 +00:00
|
|
|
from utils import json
|
|
|
|
from utils.user_functions import get_user
|
|
|
|
import logging
|
|
|
|
import datetime
|
|
|
|
import random
|
|
|
|
|
|
|
|
def index(requst):
|
|
|
|
pass
|
|
|
|
|
|
|
|
@require_POST
|
2010-01-21 13:12:29 -05:00
|
|
|
@json.json_view
|
2010-01-12 01:19:37 +00:00
|
|
|
def save_classifier_story(request):
|
2010-01-05 16:07:11 +00:00
|
|
|
post = request.POST
|
|
|
|
facets = post.getlist('facet')
|
|
|
|
code = 0
|
|
|
|
message = 'OK'
|
|
|
|
payload = {}
|
|
|
|
feed = Feed.objects.get(pk=post['feed_id'])
|
|
|
|
story = Story.objects.get(pk=post['story_id'])
|
2010-01-07 00:04:12 +00:00
|
|
|
score = int(post['score'])
|
2010-01-05 16:07:11 +00:00
|
|
|
|
|
|
|
if 'title' in post and 'title' in facets:
|
2010-04-03 17:59:00 -04:00
|
|
|
classifier_title, created = ClassifierTitle.objects.get_or_create(
|
|
|
|
user=request.user,
|
|
|
|
title=post['title'],
|
|
|
|
feed=feed,
|
|
|
|
defaults={
|
|
|
|
'original_story': story,
|
|
|
|
'score': score,
|
|
|
|
})
|
|
|
|
if not created:
|
|
|
|
classifier_title.score = score
|
|
|
|
classifier_title.save()
|
2010-01-05 16:07:11 +00:00
|
|
|
|
|
|
|
if 'author' in facets:
|
|
|
|
author = story.story_author
|
2010-04-03 17:59:00 -04:00
|
|
|
classifier_author, created = ClassifierAuthor.objects.get_or_create(
|
|
|
|
user=request.user,
|
|
|
|
author=author,
|
|
|
|
feed=feed,
|
|
|
|
defaults={
|
|
|
|
'original_story': story,
|
|
|
|
'score': score,
|
|
|
|
})
|
|
|
|
if not created:
|
|
|
|
classifier_author.score = score
|
|
|
|
classifier_author.save()
|
2010-01-05 16:07:11 +00:00
|
|
|
|
|
|
|
if 'publisher' in facets:
|
2010-04-03 17:59:00 -04:00
|
|
|
classifier_feed, created = ClassifierFeed.objects.get_or_create(
|
|
|
|
user=request.user,
|
|
|
|
feed=feed,
|
|
|
|
defaults={
|
|
|
|
'original_story': story,
|
|
|
|
'score': score,
|
|
|
|
})
|
|
|
|
if not created:
|
|
|
|
classifier_feed.score = score
|
|
|
|
classifier_feed.save()
|
2010-01-05 16:07:11 +00:00
|
|
|
|
|
|
|
if 'tag' in post:
|
|
|
|
tags = post.getlist('tag')
|
|
|
|
for tag_name in tags:
|
|
|
|
tag = Tag.objects.get(name=tag_name, feed=feed)
|
2010-04-03 17:59:00 -04:00
|
|
|
classifier_tag, created = ClassifierTag.objects.get_or_create(
|
|
|
|
user=request.user,
|
|
|
|
tag=tag,
|
|
|
|
feed=feed,
|
|
|
|
defaults={
|
|
|
|
'original_story': story,
|
|
|
|
'score': score,
|
|
|
|
})
|
|
|
|
print classifier_tag, classifier_tag.score, created, score
|
|
|
|
if not created:
|
|
|
|
classifier_tag.score = score
|
|
|
|
classifier_tag.save()
|
2010-01-05 16:07:11 +00:00
|
|
|
|
2010-01-12 01:19:37 +00:00
|
|
|
response = dict(code=code, message=message, payload=payload)
|
2010-01-21 13:12:29 -05:00
|
|
|
return response
|
2010-01-12 01:19:37 +00:00
|
|
|
|
|
|
|
@require_POST
|
2010-01-21 13:12:29 -05:00
|
|
|
@json.json_view
|
2010-01-12 01:19:37 +00:00
|
|
|
def save_classifier_publisher(request):
|
|
|
|
post = request.POST
|
2010-03-28 14:50:41 -04:00
|
|
|
feed = Feed.objects.get(pk=post['feed_id'])
|
2010-01-12 01:19:37 +00:00
|
|
|
code = 0
|
|
|
|
message = 'OK'
|
|
|
|
payload = {}
|
|
|
|
|
2010-04-03 00:59:03 -04:00
|
|
|
def _save_classifier(ClassifierCls, content_type, ContentCls=None, post_content_field=None):
|
|
|
|
for opinion, score in {'like_'+content_type: 1, 'dislike_'+content_type: -2}.items():
|
2010-03-28 14:50:41 -04:00
|
|
|
if opinion in post:
|
|
|
|
post_contents = post.getlist(opinion)
|
|
|
|
for post_content in post_contents:
|
|
|
|
classifier_dict = {
|
|
|
|
'user': request.user,
|
|
|
|
'feed': feed,
|
|
|
|
'defaults': {
|
|
|
|
'score': score
|
|
|
|
}
|
|
|
|
}
|
2010-04-03 00:59:03 -04:00
|
|
|
if content_type in ('author', 'tag'):
|
|
|
|
# Use content to lookup object. Authors, Tags.
|
2010-03-28 14:50:41 -04:00
|
|
|
content_dict = {
|
|
|
|
post_content_field: post_content,
|
|
|
|
'feed': feed
|
|
|
|
}
|
|
|
|
content = ContentCls.objects.get(**content_dict)
|
|
|
|
classifier_dict.update({content_type: content})
|
2010-04-03 00:59:03 -04:00
|
|
|
elif content_type in ('title',):
|
2010-03-28 14:50:41 -04:00
|
|
|
# Skip content lookup and just use content directly. Titles.
|
|
|
|
classifier_dict.update({content_type: post_content})
|
2010-04-03 00:59:03 -04:00
|
|
|
|
2010-03-28 14:50:41 -04:00
|
|
|
classifier, _ = ClassifierCls.objects.get_or_create(**classifier_dict)
|
|
|
|
if classifier.score != score:
|
|
|
|
classifier.score = score
|
|
|
|
classifier.save()
|
|
|
|
|
2010-04-03 00:59:03 -04:00
|
|
|
_save_classifier(ClassifierAuthor, 'author', StoryAuthor, 'author_name')
|
|
|
|
_save_classifier(ClassifierTag, 'tag', Tag, 'name')
|
|
|
|
_save_classifier(ClassifierTitle, 'title')
|
|
|
|
_save_classifier(ClassifierFeed, 'publisher')
|
2010-01-12 01:19:37 +00:00
|
|
|
|
2010-01-05 16:07:11 +00:00
|
|
|
response = dict(code=code, message=message, payload=payload)
|
2010-03-16 23:18:54 -04:00
|
|
|
return response
|
|
|
|
|
|
|
|
@json.json_view
|
|
|
|
def get_classifiers_feed(request):
|
|
|
|
feed = request.POST['feed_id']
|
|
|
|
user = get_user(request)
|
|
|
|
code = 0
|
|
|
|
|
2010-03-23 20:03:40 -04:00
|
|
|
payload = get_classifiers_for_user(user, feed)
|
2010-03-16 23:18:54 -04:00
|
|
|
|
|
|
|
response = dict(code=code, payload=payload)
|
|
|
|
|
2010-01-21 13:12:29 -05:00
|
|
|
return response
|