예제 #1
0
    def parse(self):
        logger.info("start parsing: %s", self.name)
        downloaded_news = self.download()

        queries = []
        for data in downloaded_news['items']:
            news_data = self.formatNews(data)

            try:
                query = News(
                    id=news_data['id'],
                    datetime=datetime.fromtimestamp(news_data['datetime'],
                                                    pytz.utc),
                    title=news_data['title'],
                    content=news_data['content'],
                    source_title=news_data['source_title'],
                    source_url=news_data['source_url'],
                    referrer=news_data['referrer'],
                )
            except Exception as e:
                logger.error("%s: %s", e, str(data))

            queries.append(query)

        logger.info("done parsing: %s, %s queries were parsed", self.name,
                    len(queries))

        return queries
예제 #2
0
    def post(self):
        user = g.user
        if not user:
            return jsonify(errno=RET.SESSIONERR, errmsg="用户未登录")

        # POST 提交,执行发布新闻操作
        # 1. 获取要提交的数据
        title = request.form.get("title")
        source = "个人发布"
        digest = request.form.get("digest")
        content = request.form.get("content")
        index_image = request.files.get("index_image")
        category_id = request.form.get("category_id")
        # 1.1 判断数据是否有值
        if not all([title, source, digest, content, index_image, category_id]):
            return jsonify(errno=RET.PARAMERR, errmsg="参数有误")

        try:
            category_id = int(category_id)
        except Exception as e:
            current_app.logger.error(e)
            return jsonify(errno=RET.PARAMERR, errmsg="参数有误")

        key = "https://beishufudeyu.github.io/images/%E5%88%86%E5%B8%83%E5%BC%8F%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6.png"
        if index_image is not None:
            # 2. 将标题图片上传到七牛
            try:
                index_image_data = index_image.read()
                key = storage(index_image_data)
            except Exception as e:
                current_app.logger.error(e)
                return jsonify(errno=RET.THIRDERR, errmsg="上传图片错误")

        # 3. 初始化新闻模型,并设置相关数据
        news = News()
        news.title = title
        news.digest = digest
        news.source = source
        news.content = content
        if index_image:
            news.index_image_url = constants.QINIU_DOMIN_PREFIX + key
        else:
            news.index_image_url = key
        news.category_id = category_id
        news.user_id = g.user.id
        # 1代表待审核状态
        news.status = 1

        # 4. 保存到数据库
        try:
            db.session.add(news)
            db.session.commit()
        except Exception as e:
            db.session.rollback()
            current_app.logger.error(e)
            return jsonify(errno=RET.DBERR, errmsg="保存数据失败")
        # 5. 返回结果
        return jsonify(errno=RET.OK, errmsg="发布成功,等待审核")
예제 #3
0
def generate_random_news(category,
                         new=randint(1, 6),
                         old=randint(1, 6)):
    ns = []
    author_user = UserFactory()
    for i in range(new):
        n = News(title="news", body="news body",
                 date=datetime.now() - timedelta(days=randint(0, 6)),
                 author_id=author_user.pk)
        n.category = category
        n.save()
        ns.append(n)
    for i in range(old):
        n = News(title="old news", body="news body",
                 date=datetime.now() - timedelta(days=randint(8, 20)),
                 author_id=author_user.pk)
        n.category = category
        n.save()
        ns.append(n)
    return (new, old, ns)
예제 #4
0
def exist_a_news(step):
    for news_hashes in step.hashes:
        author = User.objects.get(username__exact=news_hashes.get('author'))
        date, hour = news_hashes.get('date_and_time').split()
        day, month, year = date.split('/')
        hours, minutes = hour.split(':')
        date_time = datetime(int(year), int(month), int(day), int(hours), int(minutes))
        News(title=news_hashes.get('title'), summary=news_hashes.get('summary'), body=news_hashes.get('body'), image=news_hashes.get('image'), author=author, date_and_time=date_time).save()
        file_name = news_hashes.get('image').split('/')[-1]
        shutil.copy2(os.path.join(settings.PROJECT_ROOT_PATH, 'apps', 'news',
                                  'features', 'resources', file_name),
                     os.path.join(settings.MEDIA_ROOT, 'test', 'images', 'news'))
예제 #5
0
 def test_get_successive_news(self):
     ns = []
     for i in range(12):
         n = News(title="news",
                  body="news body",
                  author_id=1,
                  date=datetime.now() - timedelta(days=12 - i))
         n.save()
         ns.append(n)
     self.assertEqual(0, len(News.objects.get_successive_news('-', 0, 0)))
     self.assertEqual(
         0, len(News.objects.get_successive_news('-', randint(0, 11), 0)))
     self.assertEqual(12, len(News.objects.get_successive_news('-', 0, 20)))
     nss = News.objects.get_successive_news('-', 3, 6)
     for i in range(0, 6):
         self.assertEqual(nss[i].id, ns[8 - i].id)
     for n in ns:
         n.delete()
예제 #6
0
 def create(self, validate_data):
     news =News(**validate_data)
     news.author=self.request.user
     news.save()
     return news
예제 #7
0
 def test_creating_news(self):
     n1 = News(title="news test", body="news body")
     self.assertEqual(str(n1), "news test")