Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.74/76: Рейтинг темы: голосов - 76, средняя оценка - 4.74
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16

Анализ информации из социальных сетей

21.07.2018, 11:33. Показов 18023. Ответов 187
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
нужно собирать и анализировать информацию из социальных сетей

на python делать?
с чего нужно начинать?
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.07.2018, 11:33
Ответы с готовыми решениями:

Как сделать телеграм бота пересылающий посты и новости из RSS лент и социальных сетей (агрегатор)
Я пытался как всегда разбить план на мелкие составляющие, я начал думать что конкретно и как бот должен будет уметь делать, но даже во...

Блокировка социальных сетей
Возможно подобная тема уже есть, но как-то не нашел.... И всё же дело вот в чем, блокировать соцсети это понятно как, антивирус там,...

Кнопки социальных сетей
Скачал бесплатный шаблон в Вордпресс,в демо версии установлены кнопки социальных сетей в шапке сайта(фото№1).В админпанели есть социальные...

187
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
05.10.2018, 19:32  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от ТабуретY Посмотреть сообщение
количество постов можно получить проще
я вот так решил эту задачу... =) пишу наобум... но вроде получается...

Python
1
2
3
4
5
6
7
8
9
10
    def get_count(self, id):
        """
            Получаем цифру - количество постов в источнике
        :param id:
        :return:
        """
        tools = vk_api.VkTools(self.vk_session)
        wall = tools.get_all('wall.get', 100, {'owner_id': id})
        for post in wall['items']:
            return post['id']
Добавлено через 1 минуту
* * *

Цитата Сообщение от ТабуретY Посмотреть сообщение
можно получить список id всех постов и потом по этим id вытягивать посты
Вот это мне и нужно!
Получить список всех постов (по id или дате) а потом в main.py

Python
1
2
3
4
5
6
7
8
9
10
11
            if to_dos == 1:
                bases = sqlite_base(name_db)
                while count >= 0:
                    post = vk.get_post_count(int(id))
                    print(post)
 
 
 
                # data = [(post[i]['id'], post[i]['date'], post[i]['text']) for i in
                #         range(len(post))]
                # bases.save(data)
каждый сохранять

* только я еще не дописал это, не знаю, как реализовать
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
05.10.2018, 20:17
Цитата Сообщение от IRIP Посмотреть сообщение
я вот так решил эту задачу...
У этого решения большой недостаток, если посты удаляют, то id не меняется, то есть если сделают 10 постов, то у последнего id=10, но если удалят, например, посты с id 2 и 3, то постов будет 8, но id последнего будет 10

Python
1
2
3
4
5
6
7
8
def get_count(self, id):
        """
            Получаем цифру - количество постов в источнике
        :param id:
        :retur
       """
        wall = tools.get_all('wall.get', 1, {'owner_id': id})
        return wall['count']
Добавлено через 8 минут
Если нужны все посты, то с помощью этой функции

Python
1
2
3
def __get_group(self):
       tools = vk_api.VkTools(self.vk_session)
       return tools.get_all_slow_iter('wall.get', 100, {'owner_id': -self.id}, 'items')
можно так

Python
1
for post in vk.wall:
1
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
05.10.2018, 21:39  [ТС]
Цитата Сообщение от ТабуретY Посмотреть сообщение
У этого решения большой недостаток, если посты удаляют, то id не меняется, то есть если сделают 10 постов, то у последнего id=10, но если удалят, например, посты с id 2 и 3, то постов будет 8, но id последнего будет 10
Да, я это тоже заметил.



Цитата Сообщение от ТабуретY Посмотреть сообщение
Если нужны все посты, то с помощью этой функции
Как их получить - уже разобрался с вашей помощью. Теперь пытаюсь понять КАК КАЖДЫЙ СОХРАНИТЬ функцией в main.py https://github.com/IRIP/postov/blob/master/main.py

так, чтобы сразу проверять
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
07.10.2018, 22:42  [ТС]
ТабуретY, пробую

получаю ошибку return tools.get_all_slow_iter('wall.get', 100, {'owner_id': -self.id},
AttributeError: 'vk_parser' object has no attribute 'id'

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
            if to_dos == 1:
                bases = sqlite_base(name_db)
                getcount = count
                while getcount >= 0:
                    print('осталось', getcount)
                    post = vk.get_posts(id)
                    print(post['id'])
                    # data = [
                    #     post[i]['id'],
                    #     post[i]['date'],
                    #     post[i]['text']
                    # ]
                    # print(data)
 
                    getcount -= int(1)
 
                    # data = [(post[i]['id'], post[i]['date'], post[i]['text']) for
                    #  i in                         range(len(post))]
 
                    # bases.save(data)

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    def __get_group(self):
        tools = vk_api.VkTools(self.vk_session)
        return tools.get_all_slow_iter('wall.get', 100, {'owner_id': -self.id},
                                       'items')
 
 
    def get_posts(self, id):
        wall = self.__get_group()
        return [post['id'] for post in wall]
 
 
 
    def get_info(self, id):
        """
            Получаем полную информацию из поста. Ссылки на фото, текст и т.п.
            одним пакетом.
        """
        tools = vk_api.VkTools(self.vk_session)
        wall = tools.get_all('wall.get', 1, {'owner_id': id})
        return wall['items']
 
 
    def get_posts_count(self, id):
        """
            Получаем цифру - количество постов в источнике
        :param id:
        :return:
        """
        tools = vk_api.VkTools(self.vk_session)
        wall = tools.get_all('wall.get', 1, {'owner_id': id})
        return wall['count']
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
07.10.2018, 22:58
Так надо изменить

Python
1
2
3
4
5
6
7
8
9
def __get_group(self,id):
        tools = vk_api.VkTools(self.vk_session)
        return tools.get_all_slow_iter('wall.get', 100, {'owner_id': -id},
                                       'items')
 
 
    def get_posts(self, id):
        wall = self.__get_group(id)
        return [post['id'] for post in wall]
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
07.10.2018, 23:32  [ТС]
ТабуретY, а как ее потом вызывать сюда?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            if to_dos == 1:
                bases = sqlite_base(name_db)
                getcount = count
                while getcount >= 0:
                    print('осталось', getcount)
                    post = vk.get_posts(id)
                    print(post['id'])
                    data = [
                        post[i]['id'],
                        post[i]['date'],
                        post[i]['text']
                    ]
                    bases.save(data)
 
                    getcount -= int(1)
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
08.10.2018, 00:04
get_posts возвращает список id постов

Python
1
2
3
4
5
6
7
if to_dos == 1:
                bases = sqlite_base(name_db)
                getcount = count
                while getcount >= 0:
                    print('осталось', getcount)
                    post = vk.get_posts(id)
                    print(post)
а чтобы получить посты со стены надо использовать def get_info(self, id)
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
08.10.2018, 11:32  [ТС]
ТабуретY, все собрал в кучу, отсек лишнее. Выгрузил сюда https://github.com/IRIP/postov

Запустил, ввел id группы

выводит:

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Привет! Давай поработаем!
1. Импорт источников
2. Экспорт источников
3. Вывести список источников
4. Запустить кросс-постинг.
 
 >>> (0-выход): 1
Выбран вариант № 1 
 
Введите id VK (впереди минус, если группа): 
-108964054
Всего найдено: 7
Сохранить данные? Да(y)/Нет(n): 1
осталось 7
[{'id': 26, 'from_id': -108964054, 'owner_id': -108964054, 'date': 1498774651, 'marked_as_ads':}}]
осталось 6
[{'id': 26, 'from_id': -108964054, 'owner_id': -108964054, 'date': 1498774651, 'marked_as_ads':}}]
осталось 5
[{'id': 26, 'from_id': -108964054, 'owner_id': -108964054, 'date': 1498774651, 'marked_as_ads':}}]
осталось 4
[{'id': 26, 'from_id': -108964054, 'owner_id': -108964054, 'date': 1498774651, 'marked_as_ads':}}]
осталось 3
,,,
 >>> (0-выход):
Добавлено через 1 минуту
не запрашивает следующий id

Добавлено через 6 часов 17 минут
видимо потому, что в строке

post = vk.get_info(id)

нужно менять id

Добавлено через 3 часа 22 минуты
Удалось получить list c id постов на стене =)

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Привет! Давай поработаем!
1. Импорт источников
2. Экспорт источников
3. Вывести список источников
4. Запустить кросс-постинг.
 
 >>> (0-выход): 1
Выбран вариант № 1 
 
Введите id VK (впереди минус, если группа): 
-108964054
Всего найдено: 7
Сохранить данные? Да(y)/Нет(n): 1
[[26, 25, 24, 22, 20, 19, 18]]
теперь нужно по нему пройтись
и записать в базу данных, КАЖДЫЙ отдельно
с проверкой на дубли

Добавлено через 1 минуту
* * *

это делается, как пишут, командой wall.getById
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
08.10.2018, 13:54
Цитата Сообщение от IRIP Посмотреть сообщение
это делается, как пишут, командой wall.getById
Да, wall.getById параметр posts, можно задать несколько постов
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
08.10.2018, 21:51
Не работал с VK API, и никак не пойму какая задача решается в данном топике и почему проблема.

Если правильно понял, то для заданной стены (по id), нужно получить посты с этой стены (включая текст, вложения и т.п.)
И судя по документации, метод wall.get делает все что нужно. Этот метод по id стены вытаскивает все посты с текстами и вложениями, возвращает структуру, описанную в https://vk.com/dev/objects/post. Зачем снова получать каждый пост отдельно, если они уже получены?
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
08.10.2018, 21:55
Цитата Сообщение от vrm2 Посмотреть сообщение
Если правильно понял, то для заданной стены (по id), нужно получить посты с этой стены (включая текст, вложения и т.п.)
Потому что постов может быть тысячи и десятки тысяч, а vk api так устроено, то за один запрос больше 100 постов не отдаст
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
08.10.2018, 21:59
Цитата Сообщение от ТабуретY Посмотреть сообщение
Потому что постов может быть тысячи и десятки тысяч, а vk api так устроено, то за один запрос больше 100 постов не отдаст
Ок, но для этого в wall.get есть параметр offset, который позволяет получать все записи стены блоками, один за другим.
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
08.10.2018, 22:09
Цитата Сообщение от vrm2 Посмотреть сообщение
для этого в wall.get есть параметр offset
Проблема в том, что id идут не по порядку и придется много запросов делать, чтобы попасть куда надо, но вообще, это просто разговор об эффективности, так-то получить пост очень просто


Python
1
2
3
4
5
6
7
8
 def __get_group(self):
       tools = vk_api.VkTools(self.vk_session)
       return tools.get_all_slow_iter('wall.get', 100, {'owner_id': -self.id}, 'items')
 
 
    def post(self, i):
        wall = self.__get_group()
        return [x for x in wall if x['id'] == i][0]
1
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
08.10.2018, 22:26
Цитата Сообщение от ТабуретY Посмотреть сообщение
Проблема в том, что id идут не по порядку и придется много запросов делать, чтобы попасть куда надо
1. Не пойму, зачем id поста вообще использовать, если и так вся информация о посте уже получена. Только отличать один пост от другого.

2. Зачем куда-то попадать? Разве не нужно скачать все посты на стене друг за другом?
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
08.10.2018, 22:31  [ТС]
vrm2, вот и я не пойму логики работы
как найти точку привязки, чтобы избежать дублей?

грубый метод наваливает пачку постов с дублями, грубо.

1. Скачивать все посты - не имеет смысла, по ряду причин, включая невозможность обработки больших объемов. В слушчае с id поста
можно включать метод execute и рекурсивно вытягивать объемы (любые)

Добавлено через 1 минуту
vrm2, даже 500 постов могут занять в памяти до 500 мегабайт
а если их дампить в json - то файлы от 50 мб. и выше
+ нагрузка на сам vk
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
08.10.2018, 22:45
Цитата Сообщение от IRIP Посмотреть сообщение
как найти точку привязки, чтобы избежать дублей?
Я говорю про другую проблему "дублей". Зачем скачивать полные посты с помощью wall.get, брать из них только id, и затем по этому id с помощью wall.getById снова получать опять же полные посты.

Вы же, наверное, имеете ввиду дубли, которые возникают при повторном скачивании постов со стены, т.е. если хочется обновить данные в БД, добавив в нее новые появившиеся посты. Т.е. если на стене было 5 постов и мы их скачали, а потом добавилось еще два, то в следующий раз мы получим семь постов, из которых пять являются дублями.

Тогда нужно запоминать смещение последнего скачанного поста, и передавать его в wall.get в параметр offset. Т.е. в нашем случае - при первом запросе мы задаем offset=0, получаем пять постов, а в следующем пишем offset=5 - скачаются только два новых поста.

P.S. Я не знаю, нумерация offset начинается с нуля или с единицы. Если с единицы, то соответственно offset должен быть 1 и 6.
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
08.10.2018, 22:51  [ТС]
Цитата Сообщение от vrm2 Посмотреть сообщение
Я говорю про другую проблему "дублей". Зачем скачивать полные посты с помощью wall.get, брать из них только id, и затем по этому id с помощью wall.getById снова получать опять же полные посты.
это тоже проблема оптимизации, но пока не критичная, так как пока и так работает =)


Цитата Сообщение от vrm2 Посмотреть сообщение
Вы же, наверное, имеете ввиду дубли, которые возникают при повторном скачивании постов со стены, т.е. если хочется обновить данные в БД, добавив в нее новые появившиеся посты. Т.е. если на стене было 5 постов и мы их скачали, а потом добавилось еще два, то в следующий раз мы получим семь постов, из которых пять являются дублями.
да, но бывает и так, что при первом (единственном) запросе в базу льется сотня другая дублей


Цитата Сообщение от vrm2 Посмотреть сообщение
P.S. Я не знаю, нумерация offset начинается с нуля или с единицы. Если с единицы, то соответственно offset должен быть 1 и 6.
Нужно понятЬ, как с помощью vk_api сделать

$records_json=file_get_contents("https://api.vk.com/method/wall.getById?posts=-108964054_25"); # ссылка для примера, не рабочая...
где 25 - post_id
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
08.10.2018, 22:57
Цитата Сообщение от IRIP Посмотреть сообщение
как найти точку привязки, чтобы избежать дублей?
грубый метод наваливает пачку постов с дублями, грубо.
то есть имеется 2 задачи, набить базу всеми постами группы и добавить только новые посты?

Если нужно просто добавить все посты, то можно так

Python
1
2
3
4
5
6
7
8
9
def __get_group(self, ids):
       tools = vk_api.VkTools(self.vk_session)
       return tools.get_all_slow_iter('wall.get', 100, {'owner_id': -ids}, 'items')
 
.....
 
wall = __get_group(1111111)
for post in wall:
    add_to_base(post)
если нужно добавить только новые

Python
1
2
3
4
5
6
7
8
9
10
11
wall = get_group(1111111)
 
last_id = get_last_id_from_base()
new_posts = []
 
while True:
    post = next(wall)
    if post['id'] == last_id:
         break
    else:
         new_posts.append(post)
Добавлено через 3 минуты
Цитата Сообщение от vrm2 Посмотреть сообщение
мы задаем offset=0, получаем пять постов, а в следующем пишем offset=5 - скачаются только два новых поста
Новые посты идут в начале при offset=5 Получим 2 самых старых поста
1
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
08.10.2018, 23:02  [ТС]
Цитата Сообщение от ТабуретY Посмотреть сообщение
то есть имеется 2 задачи, набить базу всеми постами группы и добавить только новые посты?
на первом этапе - набить.
на втором этапе - запускать процесс в фоне, кроном и дополнять ...
0
431 / 302 / 90
Регистрация: 03.12.2015
Сообщений: 741
08.10.2018, 23:12
Цитата Сообщение от ТабуретY Посмотреть сообщение
Новые посты идут в начале при offset=5 Получим 2 самых старых поста
Ну тогда еще проще. Скачиваем несколько раз по 100 постов, пока не наткнемся на уже скачанный пост (на самый последний скачанный).

Добавлено через 3 минуты
Цитата Сообщение от IRIP Посмотреть сообщение
на первом этапе - набить.
на втором этапе - запускать процесс в фоне, кроном и дополнять ...
ТабуретY в предыдущем посте написал решение обеих задач. Не нужен Вам getById
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.10.2018, 23:12

Виджеты социальных сетей
Доброе время, суток! Прошу помощи в следующем вопросе. Захотелось мне изменить виджеты своих групп в социальных сетях, а именно...

Кнопки социальных сетей
Здравствуйте! Подскажите пожалуйста, где можно почитать о том как создать динамические кнопки социальных сетей, в стиле картинки...

Иконки социальных сетей
Подскажите, как поменять иконки социальных сетей в компоненте авторизации битрикса? я нашел файл где прописывает bg-image, для каждой...

Шаринг социальных сетей
Здравствуйте. Помогите пожалуйста с шарингом соц сетей (ВК, FaceBook, Twitter). Киньте ссылки на примеры, или на самые алгоритмы...

Плагин социальных сетей
Всем привет! Расписывать не стану, вообщем скажите, есть что то подобное? Знаю что есть vk api но это не то.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
140
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru