Ejemplo n.º 1
0
def get_article(request, date_time, count):
    """
    获取文章列表
    :param date_time: 起始时间戳
    :param count: 从起始时间回溯的条目
    """
    try:
        date_time = int(date_time)
        count = int(count)
        if count > 10:
            count = 10
        if count <= 0:
            count = 1
    except:
        return response(code=-1, msg='类型错误')
    articles = Article.objects.filter(
        send_time__lte=date_time).order_by('-send_time')
    filter_articles = []
    next_date_time = 0
    for o_article in articles:
        if o_article.send_time != next_date_time:
            next_date_time = o_article.send_time
            count -= 1
            if count < 0:
                break
        filter_articles.append(get_packed_article(o_article))
    return response(
        body=dict(articles=filter_articles, next_date_time=next_date_time))
Ejemplo n.º 2
0
def get_article_analyse(request, article_id):
    try:
        o_article = Article.objects.get(article_id=article_id)
    except:
        return response(code=1, msg='错误的文章ID')
    analyse_list = []
    analyses = ArticleAnalyse.objects.filter(article=o_article)
    for o_analyse in analyses:
        analyse_list.append(
            dict(
                like_num=o_analyse.like_num,
                comment_num=o_analyse.comment_num,
                read_num=o_analyse.read_num,
                reprint_num=o_analyse.reprint_num,
                create_time=int(o_analyse.create_time.timestamp()),
            ))
    analyse_list_share = []
    analyses = ArticleAnalyseShare.objects.filter(article=o_article)
    for o_analyse in analyses:
        analyse_list_share.append(
            dict(
                share_num=o_analyse.share_num,
                create_time=int(o_analyse.create_time.timestamp()),
            ))
    return response(
        body=dict(analyse=analyse_list, analyse_share=analyse_list_share))
Ejemplo n.º 3
0
def analyse(request):
    interval = int(Config.objects.get(key='interval').value)
    o_last = Config.objects.get(key='analyse-signal')
    last_time = int(o_last.value)
    crt_time = datetime.datetime.now()
    if int(crt_time.timestamp()) - last_time < int(interval) * 60:
        return response()

    kw_groups = KeywordGroup.objects.filter(disable=False)
    # keywords = Keyword.objects.filter(disable=False)
    lasting = int(Config.objects.get(key='lasting').value)
    lasting = datetime.timedelta(minutes=lasting)
    begin_time = crt_time - lasting
    newses = News.objects.filter(publish_time__gte=begin_time)
    # print(len(newses), begin_time)
    for o_group in kw_groups:
        count = 0
        web_list = []
        keywords = Keyword.objects.filter(disable=False, group_id=o_group.pk)
        for o_keyword in keywords:
            kw = o_keyword.kw.upper()
            for news in newses:
                if news.title.upper().find(kw) != -1:
                    count += 1
                    if news.source not in web_list:
                        web_list.append(news.source)
        if count >= o_group.count and len(web_list) >= o_group.web_count:
            Log.create(o_group.group_name, count, len(web_list),
                       count*len(web_list)//(o_group.count*o_group.web_count))

    o_last.value = str(int(crt_time.timestamp()))
    o_last.save()
    return response()
Ejemplo n.º 4
0
def check_login(request):
    ret = wx_check_image_scanned()
    if ret == 0:
        return response(body=1, msg='还没人扫')
    if wx_get_token():
        return response(body=0, msg='登录成功')
    else:
        return response(body=2, msg='登录失败')
Ejemplo n.º 5
0
def grab_article_list(request):
    """
    抓取最新文章并更新更新分享量
    """
    ret = grab_article(7, 0)
    if not ret:
        return response(code=1, msg='抓取文章失败,请尝试重新登录')
    ret = grab_article(7, 7)
    if not ret:
        return response(code=1, msg='抓取文章失败,请尝试重新登录')
    ret = grab_share_num()
    if not ret:
        return response(code=2, msg='抓取最新分享数据失败')
    return response()
Ejemplo n.º 6
0
def reply_to_trail(request):
    trail_id = request.POST['trail_id']
    metric = request.POST['metric']
    # study_id = request.POST['study_id']

    # # get study by id
    # ret = Study.get_study_by_id(study_id)
    # if ret.error is not Error.OK:
    #     return error_response(ret.error)
    # o_study = ret.body
    # if not isinstance(o_study, Study):
    #     return error_response(Error.STRANGE)

    # get trail by id
    ret = Trail.get_trail_by_id(trail_id)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    o_trail = ret.body
    if not isinstance(o_trail, Trail):
        return error_response(Error.STRANGE)

    o_study = o_trail.r_study

    metric_str = json.dumps(metric, ensure_ascii=False)
    o_trail.set_metric(metric_str)

    ret = select_and_run(o_study)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    return response(body=ret.body)
Ejemplo n.º 7
0
def create_study(request):
    """
    client ask server to create a study for running
    """
    config = request.POST['config']
    algo_id = request.POST['algo_id']
    c_ip = request.POST['client_ip']
    c_port = request.POST['client_port']

    ret = get_user_from_session(request)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    o_user = ret.body
    if not isinstance(o_user, User):
        return error_response(Error.STRANGE)

    ret = Algorithm.get_algo_by_id(algo_id)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    o_algo = ret.body
    if not isinstance(o_algo, Algorithm):
        return error_response(Error.STRANGE)

    ret = Study.create(o_user, o_algo, config, c_ip, c_port)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    o_study = ret.body
    if not isinstance(o_study, Study):
        return error_response(Error.STRANGE)

    return response(body=o_study.to_dict())
Ejemplo n.º 8
0
def ask_for_trail(request):
    trail = request.POST['trail']
    study_id = request.POST['study_id']
    print(trail, study_id)

    # get study by id
    ret = Study.get_study_by_id(study_id)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    o_study = ret.body
    if not isinstance(o_study, Study):
        return error_response(Error.STRANGE)

    o_study.finish_epoch()
    if o_study.status == Study.STATUS_FINISH:
        return error_response(Error.FINISHED)
    trail_str = json.dumps(trail, ensure_ascii=False)

    ret = Trail.create(o_study, trail_str)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    o_trail = ret.body
    if not isinstance(o_trail, Trail):
        return error_response(Error.STRANGE)

    ret = trail_client.run(o_study.client_ip, o_study.client_port, trail_str, o_trail.pk)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    return response(body=ret.body)
Ejemplo n.º 9
0
def pause_study(request):
    study_id = request.POST['study_id']

    ret = get_user_from_session(request)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    o_user = ret.body
    if not isinstance(o_user, User):
        return error_response(Error.STRANGE)

    # get study from study_id
    ret = Study.get_study_by_id(study_id)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    o_study = ret.body
    if not isinstance(o_study, Study):
        return error_response(Error.STRANGE)

    # check study belongs to user
    if not o_study.belong(o_user):
        return error_response(Error.NO_RIGHT_MODIFY_STUDY)

    if o_study.status not in [Study.STATUS_RUNNING]:
        return error_response(Error.STUDY_IS_NOT_RUNNING)
    o_study.status = Study.STATUS_PAUSED
    o_study.save()

    return response(body=o_study.to_dict())
Ejemplo n.º 10
0
def auto_search(request):
    query = request.GET.get('q', None)
    term = request.GET.get('term', None)
    if not query or not term:
        return error_response(Error.NO_SEARCH_PARAMETER)

    qs = SearchQuerySet().models(Course)
    results = qs.auto_query(query)

    result_list = []
    for result in results:
        ret = Section.get_sections_by_course(result.object)
        if ret.error is not Error.OK:
            return error_response(ret.error)
        if not ret.body:
            continue
        sections = ret.body
        for section in sections:
            if section.term == term:
                result_list.append(result)
                break

        # result_list.append(result)
    sorted_results = sorted(result_list, key=lambda x: x.score, reverse=True)

    final_result = []
    for result in sorted_results:
        final_result.append(result.object.to_dict(term))

    return response(body=final_result)
Ejemplo n.º 11
0
def get_meetings_by_section(request, course_id, section_id):
    """GET /api/courses/:course_id/sections/:section_id/meetings"""
    ret = Course.get_course_by_id(course_id)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    o_course = ret.body

    ret = Section.get_section_by_id(section_id)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    o_section = ret.body

    ret = o_section.belong_to(o_course)
    if ret.error is not Error.OK:
        return error_response(ret.error)

    ret = TimeSlot.get_meetings_by_section(o_section)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    meetings = ret.body

    meeting_list = []
    for meeting in meetings:
        meeting_list.append(meeting.to_dict())
    return response(body=meeting_list)
Ejemplo n.º 12
0
def get_algo_list(request):
    ret = Algorithm.get_algo_list()
    if ret.error is not Error.OK:
        return error_response(ret.error)
    algo_list = ret.body

    return response(body=algo_list)
Ejemplo n.º 13
0
def get_terms(request):
    """GET /api/courses/terms"""
    ret = Section.get_terms()
    if ret.error is not Error.OK:
        return error_response(ret.error)
    terms = ret.body
    return response(body=terms)
Ejemplo n.º 14
0
def group(request):
    kws = Keyword.objects.all()
    for kw in kws:
        o_group = KeywordGroup.create(kw.kw, count=kw.count, web_count=kw.web_count)
        kw.group_id = o_group.pk
        kw.save()
    return response()
Ejemplo n.º 15
0
def change_color_by_category(request):
    course_id = request.POST['course_id']
    category = request.POST['category']
    color = request.POST['color']
    bg_color = request.POST['bg_color']
    term = request.POST['term']

    ret = get_user_from_session(request)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    o_user = ret.body

    ret = Course.get_course_by_id(course_id)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    o_course = ret.body

    ret = SelectSection.get_selected_section_by_user(o_user)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    select_sections = ret.body

    select_section_list = []
    for select_section in select_sections:
        if select_section.section.course == o_course and select_section.section.category == category and select_section.section.term == term:
            select_section.bgcolor = bg_color
            select_section.color = color
            select_section.save()
            select_section_list.append(select_section.to_dict())

    return response(body=select_section_list)
Ejemplo n.º 16
0
def get_sibling_sections(request, course_id):
    """POST /api/courses/:course:id/sections"""
    category = request.POST['category']
    term = request.POST['term']
    type = request.POST['type']
    section_id = request.POST['section_id']

    ret = Course.get_course_by_id(course_id)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    o_course = ret.body

    ret = Section.get_sections_by_course(o_course)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    sections = ret.body

    section_list = []
    for section in sections:
        if section.category == category and section.term == term and section.type == type and section.id != section_id:
            section_list.append(dict(
                sibling=section.to_dict(),
                self_id=section_id,
            ))
    return response(body=section_list)
Ejemplo n.º 17
0
def get_course_info(request, course_id):
    """GET /api/courses/:course_id"""
    ret = Course.get_course_by_id(course_id)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    o_course = ret.body
    return response(body=o_course.to_dict())
Ejemplo n.º 18
0
def delete_section_by_category(request):
    """DELETE /api/selectsections"""
    course_id = request.POST['course_id']
    category = request.POST['category']
    term = request.POST['term']

    ret = get_user_from_session(request)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    o_user = ret.body

    ret = Course.get_course_by_id(course_id)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    o_course = ret.body

    ret = SelectSection.get_selected_section_by_user(o_user)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    select_sections = ret.body

    for select_section in select_sections:
        if select_section.section.course == o_course and select_section.section.category == category and select_section.section.term == term:
            select_section.delete()
    return response()
Ejemplo n.º 19
0
def delete_event(request):
    event_id = request.POST['event_id']

    ret = Event.delete_event_by_id(event_id)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    return response()
Ejemplo n.º 20
0
def get_comment(request, article_id):
    try:
        o_article = Article.objects.get(article_id=article_id)
    except:
        return response(code=1, msg='错误的文章ID')
    comments = Comment.objects.filter(comment_id=o_article.comment_id)

    comment_list = []
    for comment in comments:
        comment_list.append(
            dict(
                nick_name=comment.nick_name,
                post_time=comment.post_time,
                content=comment.content,
                icon=comment.icon,
            ))
    return response(body=dict(comments=comment_list))
Ejemplo n.º 21
0
def add_keyword(request):
    """
    添加关键字
    """
    kw = request.POST['kw']
    count = request.POST['count']
    web_count = request.POST['web_count']
    Keyword.create(kw, count, web_count)
    return response()
Ejemplo n.º 22
0
def update_lasting(request):
    """
    更新持续时长
    """
    lasting = request.POST['lasting']
    o = Config.objects.get(key='lasting')
    o.value = lasting
    o.save()
    return response()
Ejemplo n.º 23
0
def update_interval(request):
    """
    更新分析间隔
    """
    interval = request.POST['interval']
    o = Config.objects.get(key='interval')
    o.value = interval
    o.save()
    return response()
Ejemplo n.º 24
0
def news_dealer(request):
    """
    网站统一抓取
    """
    crt_time = int(datetime.datetime.now().timestamp())
    last_time = int(Config.objects.get(key=GLOBAL_SIGNAL).value)
    if crt_time - last_time < int(Config.objects.get(key=GLOBAL_INTERVAL).value):
        return response()

    crt_time = datetime.datetime.now()
    old_time = crt_time - datetime.timedelta(days=1)

    # 抓取函数列表
    funcs = [
        qdaily_grab,
        cnbeta_grab,
        techweb_grab,
        sspai_grab,
        leiphone_grab,
        dgtle_grab,
        ithome_grab,
        kr_grab,
        ninetofivemac_grab,
        ninetofivegoogle_grab,
        solidot_grab,
        chouti_grab,
        TCEN_grab,
        TCCN_grab,
        sina_grab,
        engadgetcn_grab,
        engadgeten_grab,
        applenewsroom_grab
    ]
    for func in funcs:
        ret = func()  # 执行抓取
        if ret is None:
            continue
        news_list, source = ret
        for news in news_list:  # 存储到数据库
            if news['publish_time'] > old_time:
                News.create(news, source)

    Config.create(GLOBAL_SIGNAL, str(int(datetime.datetime.now().timestamp())))  # 更新上次抓取时间
    return response()
Ejemplo n.º 25
0
def get_courses_by_term(request):
    term = request.POST['term']
    ret = Section.get_course_by_term(term)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    courses = ret.body
    course_list = []
    for course in courses:
        course_list.append(course.to_dict())
    return response(body=course_list)
Ejemplo n.º 26
0
def delete_old(request):
    crt_time = datetime.datetime.now()
    old_time = crt_time - datetime.timedelta(days=1)
    newses = News.objects.filter(publish_time__lt=old_time)
    for news in newses:
        news.delete()
    logs = Log.objects.filter(create_time__lt=old_time)
    for log in logs:
        log.delete()
    return response()
Ejemplo n.º 27
0
def delete_keyword(request):
    """
    删除关键字
    """
    k_id = request.POST['id']
    try:
        o = Keyword.objects.get(pk=k_id)
    except:
        return error_response(Error.NOT_FOUND_KEYWORD)
    o.delete()
    return response()
Ejemplo n.º 28
0
def init(request):
    """
    初始化网站数据
    """
    Config.create(GLOBAL_SIGNAL, '0')
    Config.create(GLOBAL_INTERVAL, '20')

    Config.create('lasting', '10')  # 默认新闻频率统计范围
    Config.create('interval', '10')  # 默认统计数据时间间隔
    Config.create('analyse-signal', '0')  # 默认统计数据时间
    # Admin.create('cp', 'Chaping321')
    return response()
Ejemplo n.º 29
0
def user_login(request):
    """POST /api/user/login"""
    username = request.POST['username']
    password = request.POST['password']

    ret = User.authenticate(username, password)
    if ret.error is not Error.OK:
        return error_response(ret.error)
    o_user = ret.body

    save_user_to_session(request, o_user)

    return response(body=o_user.to_dict())
Ejemplo n.º 30
0
def refresh_hot(request):
    last_log_id = int(request.POST['last_log_id'])
    last_news_id = int(request.POST['last_news_id'])
    if last_log_id == -1:
        logs = Log.objects.all()[:20]
    else:
        logs = Log.objects.filter(pk__gt=last_log_id)
    log_list = []
    latest_log_id = last_log_id
    for log in logs:
        log_list.append(dict(
            kw=log.kw,
            count=log.count,
            web_count=log.web_count,
            great=log.great,
            tag=log.get_tag(),
        ))
        if latest_log_id < log.pk:
            latest_log_id = log.pk

    if last_news_id == -1:
        newses = News.objects.all()
    else:
        newses = News.objects.filter(pk__gt=last_news_id)
    news_list = []
    latest_news_id = last_news_id
    kws = Keyword.objects.all()
    for news in newses:
        title = news.title.upper()
        for kw in kws:
            if title.find(kw.kw.upper()) != -1:
                title = title.replace(kw.kw.upper(), '<p class="highlight">'+kw.kw.upper()+'</p>')
        news_list.append(dict(
            # publish_time=news.publish_time,
            children=[dict
                (
                title=title,
                url=news.get_web_url(),
                source=news.get_source()
            )
            ],
            time=news.publish_time.strftime("%m-%d %H:%M")
         ))
        if latest_news_id < news.pk:
            latest_news_id = news.pk
    return response(body=dict(
        logs=log_list,
        last_log_id=latest_log_id,
        newses=news_list,
        last_news_id=latest_news_id,
    ))