def topic_ana(request): topics_str = _get(request, 'topic') if not topics_str: return HttpResponseRedirect('/') topics = topics_str.split(common.TOPIC_SEPARATOR) topic_dicts = [dict(topic=t, rm_q='') for t in topics] if len(topics) > 1: for topic_dict in topic_dicts: tmp_topics = topics[:] tmp_topics.remove(topic_dict['topic']) topic_dict['rm_q'] = _join_topic_str(tmp_topics, common.TOPIC_SEPARATOR) related_topics = db.get_related_topics(topics) all_amount = db.get_articles_amount_by_topics(topics) for item in related_topics: item['q'] = topics_str + common.TOPIC_SEPARATOR + item['title'] item['percentage'] = 100* item['amount'] / all_amount if item['percentage'] ==0: item['percentage'] = 1 start = _shift_datetime(_truncate_day(datetime.datetime.now()), days=-7) all_7d_amount = db.get_articles_amount_by_topics(topics, start=start) related_7d_topics = db.get_related_topics(topics, start=start) for item in related_7d_topics: item['q'] = topics_str + common.TOPIC_SEPARATOR + item['title'] item['percentage'] = 100* item['amount'] / all_7d_amount if item['percentage'] ==0: item['percentage'] = 1 return render_to_response('topic_analytics.html', dict(topics=topic_dicts, topic=topics_str, all_7d_amount=all_7d_amount, related_7d_topics=related_7d_topics, all_amount=all_amount, related_topics=related_topics))
def dtopic(request): t = _get(request, 't') if not t: return HttpResponseRedirect('/') filename = os.path.join(DATA_ROOT, 'topic', t) #if not os.path.exists(filename) or True: if True: with open(filename, 'wb') as f: writer = UnicodeWriter(f) topics = t.split(common.TOPIC_SEPARATOR) related_topics = db.get_related_topics(topics, limit=10) writer.writerow(['topic', 'articles']) writer.writerows([[d['title'], str(d['amount'])] for d in related_topics]) wrapper = FileWrapper(file(filename)) response = HttpResponse(wrapper, content_type='text/plain') response['Content-Length'] = os.path.getsize(filename) return response
def topic(request): topics_str = _get(request, 'topic') if not topics_str: return HttpResponseRedirect('/') limit = _get(request, 'limit') if limit is None: limit = 100 elif limit == 'all': limit = 0 else: try: limit = int(limit) except Exception: limit = 100 topics = topics_str.split(common.TOPIC_SEPARATOR) topic_dicts = [dict(topic=t, rm_q='') for t in topics] if len(topics) == 1: articles = db.list_articles_by_topic(topics[0], limit=limit) else: articles = db.list_articles_by_topics(topics, limit=limit) for topic_dict in topic_dicts: tmp_topics = topics[:] tmp_topics.remove(topic_dict['topic']) topic_dict['rm_q'] = _join_topic_str(tmp_topics, common.TOPIC_SEPARATOR) def _process_row(a): a['created_date'] = a['created'][:10] #.timepstr('%Y-%M-%D') a['url'] = urllib.unquote(a['url']) a['source_url'] = urllib.unquote(a['source_url']) return a articles = [_process_row(a) for a in articles] limit = limit if len(articles) == limit else 0 related_topics = db.get_related_topics(topics, limit=10) for item in related_topics: item['q'] = topics_str + common.TOPIC_SEPARATOR + item['title'] highlight_pattern=_join_topic_str(topics, common.DISPLAY_SEPARATOR) return render_to_response('topic.html', dict(topics=topic_dicts, topic=topics_str, highlight_pattern=highlight_pattern, articles=articles, limit=limit, related_topics=related_topics))