示例#1
0
 def handle(self, *args, **options):
     """
     Основной метод - точка входа
     """
     items = Item.objects.all()
     save_pickle_file('./pk_list.pickle',
                      list(items.values_list('pk', flat=True)))
     items.update(to_update=True)
 def handle(self, *args, **options):
     """
     Основной метод - точка входа
     """
     items = Item.objects.all()
     save_pickle_file('./pk_list.pickle',
                      list(items.values_list('pk', flat=True)))
     items.update(to_update=True)
示例#3
0
def update_news():
    items_on_once = 10
    filepath = './pk_list.pickle'
    # если какая-то новость косячная, то на ней обработка не замнется
    pk_list = load_pickle_file(filepath)
    shuffle(pk_list)
    if pk_list is None:
        return

    list_tags = list(Tag.objects.values_list('name', flat=True))

    while pk_list:
        print('Parse: (left - %s)' % len(pk_list))
        success_pks = []
        for item in Item.objects.filter(pk__in=pk_list[:items_on_once]):
            try:
                http_code, content, _ = _get_http_data_of_url(item.link)
                assert http_code == '404', 'Not found page'
                item_data = {
                    'title': item.title,
                    'content': content,
                    'description': item.description,
                }
                tags_for_item = _get_tags_for_item(item_data, list_tags)

                if tags_for_item:
                    # todo
                    # надо ли определяет каких тегов нет еще и добавлять только их
                    # или писать все, а БД сама разберется?
                    # разница - в количестве запросов
                    tags_for_insert = diff(tags_for_item,
                                           item.tags.values_list('name',
                                                                 flat=True))
                    tags_objects = Tag.objects.filter(name__in=tags_for_insert)
                    item.tags.add(*tags_objects)
                    item.save()

            except Exception:
                pass
            # print(item)
            success_pks.append(item.pk)

        Item.objects.filter(pk__in=success_pks).update(to_update=False)
        pk_list = diff(pk_list, success_pks)
        save_pickle_file(filepath, pk_list)
示例#4
0
def update_news():
    items_on_once = 10
    filepath = './pk_list.pickle'
    # если какая-то новость косячная, то на ней обработка не замнется
    pk_list = load_pickle_file(filepath)
    shuffle(pk_list)
    if pk_list is None:
        return

    list_tags = list(Tag.objects.values_list('name', flat=True))

    while pk_list:
        print("Parse: (left - %s)" % len(pk_list))
        success_pks = []
        for item in Item.objects.filter(pk__in=pk_list[:items_on_once]):
            try:
                http_code, content = _get_http_data_of_url(item.link)
                assert http_code == '404', "Not found page"
                item_data = {
                    'title': item.title,
                    'content': content,
                    'description': item.description,
                }
                tags_for_item = _get_tags_for_item(item_data, list_tags)

                if tags_for_item:
                    # todo
                    # надо ли определяет каких тегов нет еще и добавлять только их
                    # или писать все, а БД сама разберется?
                    # разница - в количестве запросов
                    tags_for_insert = diff(tags_for_item,
                                           item.tags.values_list('name',
                                                                 flat=True))
                    tags_objects = Tag.objects.filter(name__in=tags_for_insert)
                    item.tags.add(*tags_objects)
                    item.save()

            except Exception:
                pass
            print(item)
            success_pks.append(item.pk)

        Item.objects.filter(pk__in=success_pks).update(to_update=False)
        pk_list = diff(pk_list, success_pks)
        save_pickle_file(filepath, pk_list)