|
| |||
|
|
VKAnalyzer Подумал, что хорошо бы повыкладывать в открытый доступ ряд утилит, написанных мной под себя. Таких проектов довольно много, но я никогда не доводил проекты до конца: обычно они возникали для решения сиюминутной задачи, задача решалась, а проект забрасывался. По этой причине у меня накопилась определенная база говнокода, которая совершенна не пригодна для среднего пользователя, но тем не менее вероятно могущая для кого-то представлять интерес. Сейчас вот залил на GitHub первый образчик: VKAnalyzer на Python3. Писал я эту программу, когда мне требовалось прижать одного мудака, и я искал до него аккуратные подходы. Программа делает три вещи: 1. Выводит список общих друзей для любой пары пользователей ВКонтатке. 2. Позволяет оценить реальный круг общения пользователя. 3. Отслеживает удалённых и добавленных друзей. Первая функция работает очень просто: программа просматривает список друзей одного пользователя, затем второго и выводит общих друзей в списке. Вторая функция анализирует списки друзей всех друзей пользователя, и сортирует их по количеству общих друзей. Например, если пользователь A дружит с пользователями B и C, при этом пользователь B дружит c A и Е, а общих друзей между A и С нет, то логично предположить, что A и B вероятно связывает что-то большее, нежели чем просто случайное знакомство. Программа выведет тогда B как более приоритетного друга, чем C. Тут есть много оговорок. Например, если у пользователя B всего три друга, и все они общие с A, то это довольно значительный друг. Если у пользователя C при этом 15 общих друзей с A, но при этом у него всего 50000 друзей, то вероятно на самом деле они не такие уж и друзья. Это соображение наводит на мысль, что анализировать надо не количество, а долю общих друзей от числа друзей всего. Если развивать мысль дальше, то критерием сортировки станет даже не непосредственно доля, а количество друзей всего относительно корня квадратного общих друзей. Конкретный алгоритм можно выбирать. Программа ведет внутренний кеш данных пользователей. Если вы проведете анализ сегодня, а затем еще через месяц, то результаты будут такими же, так как программа запомнит все данные. Чтобы обновить информацию на человека, надо ввести соответствующую команду update(), в этом случае будет выведен список изменений в друзьях. Вот, например, найдём общих друзей между небезызвестным Энтео (Православный фанатик Дмитрий Цорионов), и картавым нацистом Дёмушкиным (можно кликнуть и увеличить, в скобках выводится количество друзей у персоны всего): Операция вывода круга общения занимает гораздо больше времени. Скажем, у Энтео более восьми тысяч друзей, это значит, что надо запросить информацию о восьми тысячах пользователей у vk.com. Это долго, плюс регулярно будут происходить ошибки связи и простые тормоза. Утилита умеет кешировать уже полученные данные, так что если с первого раза анализ не проходит из-за ошибок связи, то он может пройти со второго или третьего раза. Это может занимать довольно много времени, но если очень надо, то время найдётся. Для того же Энтео программа может работать до часу (включая перезапуски в случае проблем связи). Круг общения Энтео получается таким: В скобках — количество друзей всего и общее количество друзей. Но в общем-то как я уже говорил, программу я писал под себя, под конкретную цель, поэтому во многих местах она неюзабельна, интерфейс не продуман, архитектура нерасширяема, алгоритмы не самые быстрые, оптимизацию не проводил и прочее и прочее. Энтео тут в общем-то фигурирует лишь для примера — на ком-то надо ставить эксперимент, поэтому, как это принято в науках, я выбрал первое попавшееся животное. Не на людях же ставить опыты. Если кому-то интересно — заливайте свои обновления, расширяйте и прочее. Здесь простор для фантазии весьма большой. Например, я писал алгоритм, который разбивал всех друзей на кластеры — в один кластер при этом попадали друзья по интересам (опять же подобием метрики выступало общее количество друзей). Этот алгоритм позволял разбить друзей, например, на группы сокурсников, коллег, клубных друзей и группу мутных и очень интересных типов. Он не входит в эту утилиту, так как написан был изначально отдельным скриптом, работающим с тем же файлом кеша. Возможно, если руки доберутся, я добавлю кластеризацию и сюда. Алгоритм сам по себе очень простой (простейший алгоритм Крускала с ранней остановкой). Дополнительно были идеи анализировать фейсбук, твиттер, ЖЖ и подобное, но руки не дошли. Руки вообще очень до многого не дошли, так как того что реализовано в своё время мне вполне хватило. Берите, пользуйтесь. Подробных комментариев по использованию я не оставляю, так как предполагаю, что использовать это всё равно смогут только программисты. P.S. По непонятной мне причине urllib в Python3 отказывается работать с vk.com под Линуксом. Такое чувство, что из-за отличия в заголовках vk.com отшивает urllib. Наверняка с этим можно разобраться, но, опять же, мне это было не нужно, если кому-то надо — тот доделает. |
|||||||||||||