VK API на Python часть 2, узнаем, что лайкал пользователь


Оглавление (нажмите, чтобы открыть):

API всему голова: ВКонтакте — от начала до отправки сообщения другу

Работа с API сервисов это всегда история по типу «Ожидание. реальность». Ибо даже простое API может скушать день, а то и 2 дня рабочего времени.

API Вконтакте не исключение. Уже есть очень много материалов на тему использования этого интерфейса:

Много практических задач решили с помощью API:

И даже уже есть несколько готовых реализаций-библиотек для работы с Вконтакте:

И из раз в раз гугл мучается от запросов «Vk.com api». Пользователи ищут примеры авторизация, документацию, примеры использования. Поэтому я приведу один из вариантов старта в API Вконтакте, а именно. Мы отправим hello world другу.

Начнем — получим APP_ID и SECRET_KEY

Стоит отметить, что API Вконтакте неплохо описано — включив мозг можно понять что и куда тыкать. В этом можно убедится самостоятельно — https://vk.com/dev/main

Для того чтобы начать делать запросы в API необходимо получить APP_ >

Создаем свое приложение:

Выбираем «Standalone-приложение» — для нашего сайта это в самый раз

В итоге получаем приложение:

На странице «настройки» видим ID приложения и Защищенный ключ :

Запишите их, они нам понадобятся. А также не забудьте включить приложение. А еще в Права доступа укажите необходимые доступы — можно указать все, пока не разобрались что к чему.

В результате мы получили ID приложения и Защищенный ключ , которые называются часто APP_ID и SECRET_KEY .

Получим ACCESS_TOKEN

Получили какие-то APP_ID и SECRET_KEY , а везде в документации просят ACCESS_TOKEN . Давай-те научимся его получать.

В качестве обертки над API возьмем vk (почему? без причины, понравилась эта обертка), установим:

А затем возьмем готовый код ( все написано за нас ). Для примера возьмем возьмем готовый кусок кода и немного преобразуем по Python3:

Что же делает этот код? Сначала мы читаем файл AUTH_FILE , если такой файл есть, то выгребаем от туда токен и проверяем — протух ли он или еще нет.

Если же токена нет или протух, то скрипт генерирует ссылку для авторизации и открывает ее в браузере. Браузер откроется, vk api попросит доступ к вашим данным.

После авторизации необходимо скопировать ссылку страницы в консоль и нажать Enter — скрипт сам достанет нужные параметры и сохранит в файл.

Ссылка, которая будет в браузере примерно такая:

Теперь у нас есть ACCESS_TOKEN , осталось малое дело — написать другу сообщение

Пишем другу сообщение с помощью API

Модифицируем функцию main, а также добавим функцию send_message (угадайте что она делает):

Объедините эти два исходника и сможете отправить другу сообщение с помощью VK API

VK API на Python: часть 2, узнаем, что лайкал пользователь

vk_api – Python модуль для написания скриптов для социальной сети Вконтакте (vk.com) (API wrapper)

  • © 2020 GitHub , Inc.
  • Terms
  • Privacy
  • Security
  • Status
  • Help

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

vk-api 11.6.0

pip install vk-api Copy PIP instructions

Last released: Oct 30, 2020


Python модуль для написания скриптов для социальной сети Вконтакте (vk.com) (API wrapper)

Navigation

Project links

Statistics

View statistics for this project via Libraries.io, or by using Google BigQuery

License: Apache Software License (Apache License, Version 2.0, see LICENSE file)

Author: python273

Maintainers

Classifiers

  • License
    • OSI Approved :: Apache Software License
  • Operating System
    • OS Independent
  • Programming Language
    • Python
    • Python :: 2
    • Python :: 2.7
    • Python :: 3
    • Python :: 3.4
    • Python :: 3.5
    • Python :: 3.6
    • Python :: 3.7
    • Python :: Implementation :: CPython
    • Python :: Implementation :: PyPy

Project description

vk_api

vk_api – Python модуль для написания скриптов для социальной сети Вконтакте (vk.com) (API wrapper)

Установка

Project details

Project links

Statistics

View statistics for this project via Libraries.io, or by using Google BigQuery

License: Apache Software License (Apache License, Version 2.0, see LICENSE file)

Author: python273

Maintainers

Classifiers

  • License
    • OSI Approved :: Apache Software License
  • Operating System
    • OS Independent
  • Programming Language
    • Python
    • Python :: 2
    • Python :: 2.7
    • Python :: 3
    • Python :: 3.4
    • Python :: 3.5
    • Python :: 3.6
    • Python :: 3.7
    • Python :: Implementation :: CPython
    • Python :: Implementation :: PyPy

Release history Release notifications

Download files

Download the file for your platform. If you’re not sure which to choose, learn more about installing packages.

Files for vk-api, version 11.6.0

Filename, size File type Python version Upload date Hashes
Filename, size vk_api-11.6.0.tar.gz (32.2 kB) File type Source Python version None Upload date Oct 30, 2020 Hashes View hashes


Hashes for vk_api-11.6.0.tar.gz

Hashes for vk_api-11.6.0.tar.gz

Algorithm Hash digest
SHA256 d58e2489577904c87fac514282a7354878dc969f9545024a96d7f3b88e07f507 Copy
MD5 84b3db341f6b56fd6708f61dac09a0b8 Copy
BLAKE2-256 9a8b8860ad541337af43ece726dfcd8032933872cf167b9e6c2521999d167616 Copy

About PyPI

Contributing to PyPI

Using PyPI

Developed and maintained by the Python community, for the Python community.
Donate today!

Python и ВКонтакте API: автоматизация работы

В рунете найти новую статью по Python 3 практически невозможно. Поэтому этот вебинар уже обладает некоторой ценностью. Мы научимся работать с API ВКонтакте с помощью Python 3. В первой части мы изучим примеры API в браузере, кратко обсудим формат JSON, узнаем, как найти свой идентификатор пользователя и научимся использовать Request для отправки Get-запроса.

В основной части затронем темы:

Установка библиотеки VK;

Создание объекта VkAPI без авторизации;

Некоторые методы API без авторизации;

Создание приложения ВКонтакте;

Создание объекта VkAPI (авторизация в приложении вконтакте);

Некоторые способы авторизации.

В заключении мы исследуем примеры реальных приложений. Настроим постинг по расписанию, научимся искать друзей (подруг) по интересам и самых активных участников групп по определённой тематике.

Для эффективного участия в вебинаре требуются начальные знания Python, знание ООП приветствуются, но не обязательны. Технические требования: Python 3 установлен, есть аккаунт вконтакте.

Лайкнул ли пользователь пост?

Python3.6, Django2.0, Postgres.

У меня есть страница, где отображаются статьи из базы данных. Эти статьи можно лайкать аутентифицированному пользователю.

Чего я хочу: чтобы при отображении этой страницы, под каждой статьей было написано, что пользователь эту статью лайкнул или нет.

Модель Like у меня описана так:

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

И на первый взгляд все показалось рабочим, однако при тестировании на лайках от нескольких пользователей получился баг: статьи отдаются из базы данных столько раз (дублируются), сколько и лайков на этой статье. И это ужасно. И distinct() здесь не поможет, потому что одна статья отдается с is_liked=True, а остальные нет.И 1 дубль всегда будет жить.

VK API на Python: часть 2, узнаем, что лайкал пользователь

Чтобы быстро создать автостатус с возможностью круглосуточной работы, от пользователя потребуется совершить ряд несложных манипуляций.

#1 — Установка ПО Python и vk_api

Сначала необходимо скачать Python не ниже третьей версии. Он нужен в качестве языка программирования. Чтобы установить ЯП на ПК, потребуется загрузить установочный файл, пройдя по этой ссылке .

В процессе инсталляции поставить отметку напротив пункта «Add Python to PATH»:

При установленном ЯП все равно потребуются библиотеки vk_api, чтобы обеспечить работу скрипта в социальной сети. Добавить из проект можно через командную строку или терминал. Запускаем командную строку через команду cmd (пропишите её в меню пуск), далее в командной строке пропишите:

#2 – Создание Git и Heroku

Нужно зарегистрироваться на ресурсе Heroku по этой ссылке , чтобы создать хостинг для скрипта. Когда аккаунт будет активным, необходимо инсталлировать на ПК Heroku CLI .

Также понадобиться Git, который можно скачать отсюда . Он потребуется, чтобы установить скрипт на Heroku.

#3 – Создание скрипта

Теперь потребуется вставить функциональные модули:

Прописать повторяющийся цикл:

Дальше необходима авторизация в соц. сети:

Пройдя по этой ссылке откроется инструкция для получения токена:

Теперь потребуется настроить дату и московское время:

И, разумеется, количество друзей онлайн:

Что находится в поле «Статус», обозначено в значении text. Пример предоставлен выше, но точно копировать данные не обязательно.


Чтобы обойти капчу в ВК:

Исходный код обязан выглядеть, как в нижеприведенном примере:

Написание скрипта завершено!

#4 – Интегрирование скрипта в Heroku

Чтобы пройти авторизацию на Heroku, необходимо открыть терминал или командную строку:

Найти директорию скрипта (использование отдельной папки в этом случае отличное решение):

Теперь в Heroku потребуется создать приложение ( app_name необходимо заменить другим обозначением):

Три указанных ниже файла необходимы для корректной работы скрипта в Heroku. Создать:

  • runtime.txt
  • Procfile (без расширения)
  • requirements.txt

Теперь он готов к инсталляции:

Дальше потребуется заменить значение app_name на название приложения, а first_deploy переименовать на произвольные символы.

Теперь загрузка скрипта гарантирована. Чтобы продолжить работу, необходимо дождаться окончания процесса.

Посещать сайт Heroku, чтобы войти в приложение нужно после завершения процесса. Здесь необходимо открыть вкладку Resources.

Задействовать поочередно «карандаш» и «ползунок» Confirm.

Визуально найти вкладку More > View logs (она находится в верхнем углу справа), активировать и выждать паузу приблизительно 10 секунд.

Если ошибки отсутствуют, значит, работа проделана отлично.

Информационный портал по безопасности

Информационный портал по безопасности » Программирование » Анализ дружеских связей VK с помощью Python. Продолжение

Анализ дружеских связей VK с помощью Python. Продолжение

Автор: admin от 14-11-2014, 13:41, посмотрело: 1566

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

Начнем с того, что просто скачать все id пользователей достаточно легко, список валидных id можно найти в Каталоге пользователей Вконтакте . Наша же задача — получить список друзей выбранного нами id пользователя, их друзей и рекурсивно сколь угодно глубоко, в зависимости от указанной глубины.

Код, опубликованный в статье, будет меняться с течением времени, поэтому более свежую версию можно найти в том же проекте на Github .

Как будем реализовывать:

  • Задаем нужную нам глубину
  • Отправляем исходные данные либо те id, которые надо исследовать на данной глубине
  • Получаем ответ

Что будем использовать:

  • Python 3.4
  • Хранимые процедуры в ВКонтакте

Задаем нужную нам глубину

Что нам потребуется в начале — это указать глубину (deep), с которой мы хотим работать. Сделать это можно сразу в settings.py:

deep равное 1 — это наши друзья, 2 — это друзья наших друзей и так далее. В итоге мы получим словарь, ключами которого будут id пользователей, а значениями — их список друзей.

Не спешите выставлять большие значения глубины. При 14 моих исходных друзьях и глубине равной 2, количество ключей в словаре составило 2427, а при глубине, равной 3, у меня не хватило терпения дождаться завершения работы скрипта, на тот момент словарь насчитывал 223 908 ключей. По этой причине мы не будем визуализировать такой огромный граф, ведь вершинами будут ключи, а ребрами — значения.

Отправление данных

Добиться нужного нам результата поможет уже известный метод friends.get , который будет расположен в хранимой процедуре, имеющей следующий вид:

Напоминаю, что хранимую процедуру можно создать в настройках приложения , пишется она на VkScript, как и execute, документацию можно прочесть здесь и здесь .

Теперь о том, как она работает. Мы принимаем строку из 25 id, разделенных запятыми, вынимаем по одному id, делаем запрос к friends.get, а нужная нам информация будет приходить в словаре, где ключи — это id, а значения — список друзей данного id.

При первом запуске мы отправим хранимой процедуре список друзей текущего пользователя, id которого указан в настройках. Список будет разбит на несколько частей (N/25 — это и число запросов), связано это с ограничением количества обращений к API ВКонтакте.

Получение ответа

Всю полученную информацию мы сохраняем в словаре, например:

Ключи 1, 2 и 3 были получены при глубине, равной 1. Предположим, что это и были все друзья указанного пользователя (0).

Если глубина больше 1, то далее воспользуемся разностью множеств, первое из которых — значения словаря, а второе — его ключи. Таким образом, мы получим те id (в данном случае 0 и 4), которых нет в ключах, разобьем их опять на 25 частей и отправим хранимой процедуре.

Тогда в нашем словаре появятся 2 новых ключа:

Сам же метод deep_friends() выглядит следующим образом:


Конечно, это быстрее, чем кидать по одному id в friends.get без использования хранимой процедуры, но времени все равно занимает порядочно много.

Если бы friends.get был похож на users.get, а именно мог принимать в качестве параметра user_ids, то есть перечисленные через запятую id, для которых нужно вернуть список друзей, а не по одному id, то код был бы намного проще, да и количество запросов было в разы меньше.

Слишком медленно

Возвращаясь к началу статьи, могу снова повторить — очень медленно. Хранимые процедуры не спасают, решение alxpy с многопоточностью (спасибо ему за вклад и участие хоть кому-то было интересно, кроме меня) ускоряло на несколько секунд работу программы, но хотелось большего.

Мудрый совет получил от igrishaev — нужен какой-то мап-редьюс.

Дело в том, что ВКонтакте разрешает 25 запросов к API через execute, из этого следует, что если делать запросы с разных клиентов, то мы можем увеличить количество допустимых запросов. 5 тачек — это уже 125 запросов в секунду. Но и это далеко не так. Забегая вперед, скажу, что можно и еще быстрее, примерно будет выглядеть следующим образом (на каждой машине):

Если нам приходит сообщение об ошибке, то мы делаем запрос снова, спустя заданное количество секунд. Такой прием работает какое-то время, но затем ВКонтакте начинает присылать во всех ответах None, поэтому после каждого запроса честно будем ждать 1 секунду. Пока что.

Далее нам надо выбрать новые инструменты или же написать свои, чтобы реализовать задуманное. В итоге у нас должна получиться горизонтально масштабируемая система, принцип работы видится мне следующим образом:

  • Главный сервер получает от клиента его id ВКонтакте и код операции: либо вытащить всех общих друзей, либо рекурсивно прогуляться по списку друзей с указанной глубиной.
  • Далее в обоих случаях сервер делает запрос к API ВКонтакте — нам нужен список всех друзей пользователя.
  • Поскольку все сделано для того, чтобы мы пользовались по-максимуму возможностями хранимых процедур — здесь надо будет разделить список друзей на части, по 25 контактов в каждой. На самом деле по 75. Об этом чуть ниже.
  • У нас получится много частей, используя брокер сообщений будем доставлять каждую часть определенному получателю (producer-consumer).
  • Получатели будут принимать контакты, сразу делать запросы, возвращать результат поставщику. Да, вы правильно подумали про RPC.

А если вы видели эту картинку, то понимаете, на какой брокер сообщений я намекаю.

Как только все ответы приняты, объединяем их в один. Далее результат можно будет вывести на экран или вовсе сохранить, об этом позже.

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

В качестве брокера сообщений будем использовать RabbitMQ, асинхронной распределенной очереди заданий — Celery.

Для тех, кто никогда с ними не сталкивался, вот несколько полезных ссылок на материалы, которые советую вам прочитать:

Не надо бояться понять, хоть и говорят, что можно конкретно повернуть свою голову, когда начинаешь «думать не одним компьютером, а несколькими», но это вовсе не так.

Если у вас Mac, как и у автора, то RabbitMQ шикарно ставится через Homebrew:

Celery же ставится еще легче, используем третью ветку Python:

У меня Celery установлен на Linux Mint, а RabbitMQ — на Mac. С виндой, как обычно, проблемы — тяжело найти, легко потерять она почему-то все время не хотела возвращать response моему Mac.

Далее создадим virtual host, пользователя и дадим ему права:

В конфигурации RabbitMQ надо указать ip хоста, на котором он установлен:

Вот несколько возможных конфигураций, какую выбрать — решать вам.

Если у вас роутер или еще что-то, полезно будет знать, что RabbitMQ использует 5672 порт, ну и сделать переадресацию в настройках вашего устройства. Скорее всего, если будете тестировать, то воркеров раскидаете по разным машинам, а им нужно будет использовать брокер, и, если не правильно настроите сеть, Celery до RabbitMQ так и не достучится.

Очень хорошей новостью является то, что ВКонтакте разрешает делать по 3 запроса в секунду с одного id. Умножим эти запросы на количество возможных обращений к API ВКонтакте (25), получим максимальное число обрабатываемых контактов в секунду (75).

Если у нас будет много воркеров, то настанет момент, когда начнем переходить за дозволенный лимит. Поэтому переменная tokensettings.py) теперь будет кортежем, содержащим в себе несколько токенов с разных id. Скрипт же будет при каждом запросе к ВКонтакте API выбирать один из них рандомным образом:

В этом плане у вас не должно возникнуть сложностей, если есть несколько аккаунтов в ВКонтакте (можно напрячь друзей, родных), у меня не было проблем с 4 токенами и 3 воркерами.

Нет, вам никто не мешает использовать time.sleep(), или пример выше с while, но тогда готовьтесь получать сообщения об ошибках (возможны вообще пустые ответы — id:None), или подольше ждать.

Самое интересное из файла call.py:

Как видите, в 2 функциях мы используем groups() , который параллельно запускает несколько заданий, после чего мы «склеиваем» ответ. Помните, как deep_friends() выглядел вначале (там уж очень старый пример — даже без многопоточности)? Смысл остался тем же — мы используем разность множеств.

И, наконец, tasks.py. Когда-нибудь эти замечательные функции объединятся в одну:

Когда все настроено, запускаем RabbitMQ командой:

Затем переходим в папку проекта и активируем воркера:

Теперь, чтобы получить и сохранить список общих или «глубинных» друзей, достаточно скомандовать в консоли:

О результатах измерений

Напомню, что у автора статьи , которая вдохновила меня на первую часть , 343 друга (запрос на общих друзей) «обрабатывались» за 119 секунд.

Мой вариант из предыдущей статьи делал то же самое за 9 секунд.

Сейчас у того автора другое число друзей — 308. Что же, придется сделать один лишний запрос для последних восьми id, потратить на него драгоценную секунду, хотя за ту же секунду можно обработать 75 id.

С одним воркером работа скрипта заняла 4.2 секунды, с двумя воркерами — 2.2 секунды.

Если 119 округлим до 120, а 2.2 до 2, то мой вариант работает в 60 раз быстрее.

Что касается «глубинных друзей» (друзья моих друзей и так далее + тестируем на другом id, чтобы ждать меньше) — при глубине, равной 2, количество ключей в словаре составило 1 251.

Время выполнение кода, приведенного в самом начале статьи, — 17.9 секунды.

Одним воркером время выполнения скрипта — 15.1 секунды, с двумя воркерами — 8.2 секунды.


Таким образом, deep_friends() стал быстрее примерно в 2.18 раза.

Да, не всегда результат такой радужный, иногда ответа на один запрос в ВКонтакте приходится ждать и по 10, и по 20 секунд (хотя частое время выполнения одного задания 1.2 — 1.6 секунд), скорее всего, это связано с нагрузкой на сервис, ведь мы не одни во вселенной.

В итоге, чем больше воркеров сделать, тем быстрее будет обрабатываться результат. Не забудьте про мощность своего железа, дополнительные токены, сеть (например, у автора резко возрастало время выполнения скрипта, когда он юзал свой айфон в качестве точки доступа) и иные факторы.

Сохранение результата

Да, есть много графо-ориентированных БД. Если в дальнейшем (а оно так и будет), мы захотим анализировать полученные результаты, то все равно их надо будет где-то хранить до самого анализа, потом эти же результаты выгружать в память и производить с ними какие-нибудь действия. Не вижу смысла использовать какую-нибудь субд, если проект был бы коммерческим и нас интересовало, например, что происходит с графом конкретного пользователя на протяжении времени — то да, тут обязательна графо-ориентированная бд, но, поскольку заниматься анализом будем в «домашних условиях», pickle нам хватит вполне.

Перед сохранением словарей логично будет удалять из них ключи, значения которых None. Это заблокированные или удаленные аккаунты. Проще говоря, эти id будут присутствовать в графе, потому что они есть у кого-то в друзьях, ну а мы сэкономим на количестве ключей в словаре:

Как видно, если мы где-то сохранили результат, то где-то и должны его загрузить, дабы заново не собирать id.

Анализ графа

Чтобы не писать свой велосипед, воспользуемся довольно известным networkx, который сделает за нас всю грязную работу. Больше узнать про networkx вы можете из этой статьи .

Прежде чем начнем анализировать граф, нарисуем его. networkx для этого понадобится matplotlib:

Далее нам надо создать сам граф. Вообще, есть 2 пути.

Первый сожрет много оперативной памяти и вашего времени:

И это не автор выжил из ума, нет. Подобный пример приводится на странице университета Райса (Rice University), под заголовком Convert Dictionary Graph Representation into networkx Graph Representation:

Можете поверить мне на слово, граф строился целый вечер, когда в нем было уже более 300 000 вершин, мое терпение лопнуло. Если вы прошли курс на Сoursera по Python от этого университета, то понимаете, о чем я. А я всем на курсе говорил, что не так людей учат, ну да ладно.

Да, приводится пример для ориентированного графа, но суть остается той же — сначала добавляем ключи, делая их вершинами, потом делаем вершинами значения, и то если их еще нет в графе, а потом соединяем их ребрами (в моем варианте).

А второй способ сделает все за секунды:

Код лежит в файле graph.py, чтобы нарисовать граф общих друзей достаточно запустить этот скрипт или же где-нибудь создать экземпляр класса VkGraph(), а затем вызвать его метод draw_graph().

Это граф общих друзей, всего 306 вершин и 2096 ребер. К сожалению, я ни разу не дизайнер (практически все настройки стандартные), но вы всегда сможете стилизовать граф «под себя». Вот пара ссылок:

В итоге вы получаете картинку date graph.png в папке проекта. Не советую рисовать граф для глубинных друзей. При 308 друзьях и глубиной равной 2, в словаре оказалось более 145 000 ключей. А есть ведь еще и значения — кортежи с id, которых вряд ли будет мало.

Долго искал самый малосодержащий друзей профиль в ВКонтакте, хотя тут важнее — друзья-друзей. 10 начальных друзей (1 из них заблокированный и автоматически удалится), при нашей стандартной глубине (2), в словаре насчитывалось 1234 ключа и 517 174 id (из значений). Примерно 419 друзей у одного id. Да, там есть и общие друзья, когда построим граф, мы это поймем:

С такими большими данными было бы неплохо поиграться. У networkx очень большой список алгоритмов , которые можно применять к графам. Разберем некоторые из них.

Связный граф

Для начала определим, связный ли у нас граф:

Связный граф — это такой граф, в котором любая пара вершин соединена маршрутом.

Кстати, у того же самого id при глубине, равной 1, вот такой красивый граф, содержащий 1268 вершин и 1329 ребер:

Вопрос знатокам. Раз у нас получается граф друзья-друзей, он по-любому должен быть связным. Не может быть такого, чтобы из ниоткуда появлялась вершина, которая не связана ни с одной из существующих. Однако мы видим справа одну вершину, которая не соединена ни с одной. Почему? Призываю сначала подумать, интереснее будет узнать истину.

Давайте разберемся. Сначала берется список друзей, и получается так, что есть у нас id X. Из-за которого граф несвязный. Далее мы делаем запрос на друзей этого X (в глубину ведь). Так вот если у X все друзья скрытые, то будет запись в словаре:

Когда будет строится граф, мы честно добавим вершину X, но никаких ребер у нее не будет. Да, чисто теоретически у вершины X должно быть ребро с вершиной, id которой указан в settings.py, но вы же внимательно читали — мы добавляем только то, что находится в словаре. Следовательно, при глубине, равной 2, мы получим в словаре id, указанный в настройках. И тогда у вершины X появятся ребра.

Будем считать, что у вас не будет такой ситуации, то есть скорее всего вы увидите True.

Диаметр, центр и радиус

Вспомним, что диаметром графа называется максимальное расстояние между двумя его вершинами.

Центр графа — это любая вершина, такая, что расстояние от нее до наиболее отдаленной вершины минимально. Центром графа может быть одна вершина или несколько вершин. Или проще. Центр графа — вершина, эксцентриситет (расстояние от этой вершины до самой удаленной от нее) которой равен радиусу.

Вернет список вершин, которые являются центром графа. Не удивляйтесь, если центром окажется id, указанный в settings.py.

Радиус графа — это наименьший из эксцентриситетов всех вершин.

Авторитетность или Page Rank
Коэффициент кластеризации

Как видите, нет ничего сложного, и networkx предлагает еще много алгоритмов (автор насчитал 148), которые можно применять к графам. Вам остается лишь выбрать нужный вам алгоритм и вызвать соответствующий метод в файле graph.py.

Мы сделали распределенную систему, позволяющую собирать и строить граф общих друзей в ВКонтакте, которая работает в 60 раз быстрее (в зависимости от количества воркеров), чем предложенный вариант от Himura , также реализовали новую функцию — запрос всех «глубинных друзей», добавили возможность анализа построенных графов.

Если вы не хотите ставить дополнительное ПО и вам надо построить красивый граф общих друзей из предыдущей статьи , то старый релиз к вашим услугам. В нем вы также найдете старую версию получения списка друзей пользователя рекурсивно сколь угодно глубоко.

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

По-прежнему жду от вас вкусных пулл-реквестов, особенно если вы занимаетесь визуализированием данных. Спасибо за внимание!


Python и LongPoll VK, или как запустить скрипт ВК и настроить Python, для новичков

Это новый вид статьи, в котором мы не будем говорить про PHP, многим python превосходит php, а для начинающих он покажется проще. Данная статья будет содержать в себе следующие шаги:

1. Установка Python 3.7.3 на Windows.

Установка не занимает много времени и умений. Переходим на официальный сайт https://www.python.org/downloads/ и скачиваем установщик себе на ПК.

Запускаем установщик, обязательно поставьте галочку возле надписи Add Python 3.7 to PATH, так у вас не возникнет проблем при работе с командной строкой Windows.

После установки запускаем командую строку:

И пишем команду:

Если Вы сделали все правильно, то увидите список команд и опций

На этом установка Python успешно завершена. Переходим к установке IDE PyCharm

2. Установка PyCharm и его настройка.

Переходим на сайт jetbrains.com/pycharm и скачиваем среду PyCharm Community, она бесплатная.

После чего устаналвиваем и запускаем PyCharm

Забегая вперед, у меня по умолчанию в настройках программы стоял Python 2.7

Нам нужна последняя версия, открываем File -> Settings. -> Project interpreter и из выпадающего меню выбираем последнюю версию, или добавляем ее туда нажав на Show All…

Теперь можно создавать новый проект.

3. Создание проекта и установка библиотеки VK_API

В Pycharm выбираем: File -> New Project и создаем новый проект, выбрав необходимые настройки:

Теперь создаем новый файл, назовем его new.py, так как Python использует расширение .py (английскими буквами, не путайте) расширение указывать не обязательно.

Пишем наш первый самый простой код:
И нажав правой кнопкой мыши по файлу, выбираем: Run ‘new’

Все работает. Теперь нам нужно установить библиотеку vk_api, для этого открываем терминал прямо в PyCharm и пишем команду:

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

Это код из примера, благодаря нему мы убедимся что сделали все правильно. Вставить его нужно в файл new.py предварительно удалив все оттуда, что мы написали ранее.

4. Запуск скрипта используя LongPoll VK.

Для начала настроим наше сообщество.
Создаем ключ

Копируем ключ и вставляем его в наш скрипт:
Вместо ‘your_group_token‘ указываем ключ сообщества
Вместо ‘your_group_id‘ указываем ID нашего сообщества

Теперь переходим во вкладку Long Poll APIи включаем его

Далее, обязательно включаем тип событий, это частая ошибка при создании ботов, забыв включить события, бот не будет работать! Выбираем все что есть.

Вернемся к нашему коду. Давайте запустим наш скрипт и проверим как он будем обрабатывать события, запускаем скрипт:

Давайте покинем сообщество и снова вступим в него:

В консоли мы сразу увидели последние события. Немного добавим строк в наш код, и научим отвечать наше сообщество сообщением в ЛС на одно из событий:

Импортируем:
После:
Добавляем:
И отправляем сообщение самому пользователю:

Полный код:
напишем любое сообщение нашему боту и получим ответ:

Как узнать названия других событий? Они будут выводится в консоли, так как в коде используется:

Тут мы получили 2 события:

VkBotEventType.WALL_POST_NEW — Новый пост
VkBotEventType.GROUP_OFFICERS_EDIT — Выдача админ прав в самой группе

Документация и больше примеров можно посмотреть на GitHub . Если Вам интересен этот язык и вы хотите видеть больше статей по Python, пишите в комментарии об этом!

5. Разница между CallBack API и LongPoll

И все же в чем разница между CallBack API и Long Poll API? А разница есть и она большая.
Когда Вы используете CallBack API, ВК сам отправляет Вам происходящее событие на сервер, нам остается только получить его и обработать, у Long Poll API все наоборот, ВК ничего не отправляет, а хранит все события у себя на серверах, Вам нужно самому их получать и обрабатывать, Long Poll API подходит для высоко нагруженных проектов, в идеале советуем использовать оба типа получения событий. На этом наша статья подходит к концу, в следующий раз мы напишем как запустить Long Poll используя PHP, всем хорошего кодинга и настроения

VK API на Python: часть 2, узнаем, что лайкал пользователь. #[email protected]

Представляем вашему вниманию вторую часть нашего туториала по VK API. В этой части мы рассмотрим возможность следить за пользователем, а точнее, узнаем как определить что лайкал владелец профиля вконтакте.

Часть первая: https://proglib.io/p/python-vk-api-1/
Часть вторая: https://proglib.io/p/python-vk-api-2/

VK API на Python: часть 2, узнаем, что лайкал пользователь — Библиотека программиста

В этой части туториала по VK API мы рассмотрим возможность следить за пользователем, а точнее, узнаем как определить что лайкал владелец профиля вконтакте.

Python-сообщество

Уведомления

#1 Фев. 22, 2020 14:26:31

Conky + vk api + python

Доброго всем времени суток уважаемые.
Хотелось бы пообщаться со знающими людьми.
Если кратко. То хотелось бы научить системный монитор в linux под названием Conky отображать 1 пост определенной группы из вк. Т.к. с python я только начал знакомиться, пробежался немного по синтаксису, и пытаюсь вникнуть в него. Собственно что уже сделано

  • Нагуглен скрипт вот с таким содержанием
    Установлен vk_api

Если я правильно понимаю, то мне нужно менять только одну часть кода, Не хочется изобретать велосипед хочется разобраться, все вплоть до авторизации мне понятно. Но

/.scripts$ ./vk.py
/usr/local/lib/python2.7/dist-packages/requests-2.9.1-py2.7.egg/requests/packages/urllib3/util/ssl_.py:315: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning.
SNIMissingWarning
/usr/local/lib/python2.7/dist-packages/requests-2.9.1-py2.7.egg/requests/packages/urllib3/util/ssl_.py:120: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning
/usr/local/lib/python2.7/dist-packages/requests-2.9.1-py2.7.egg/requests/packages/urllib3/util/ssl_.py:120: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning
, u’post_type’: u’post’, u’likes’: , u’reposts’: , u’date’: 1455399415, u’from_id’: 107677774, u’id’: 3129, u’post_source’: , u’owner_id’: 489>

Как понимаю скрипт сработал без ошибок.
То что видим в коньках:

Мастер Йода рекомендует:  Краткое введение в tmux для программистов
Добавить комментарий