Спасибо за ссылки, я обязательно ознакомлюсь. Дело в том что мне попадалась только статья об анализе дружеских связей, а поскольку я два месяца назад еще не знал что такое Python и вообще программирование в целом, то и этот результат считаю достижением для себя.
Не стоит превращать хабр в «Опубликуй свой Hello World!». Добавьте чего-нибудь научного, какой-нибудь статистический анализ с гугл картами и графиками для визуализации
Если объективно, то ни одна из приведенных выше ссылок не дублирует мой материал. Не стоит думать, что вся статья — это «Hello World», не вникнув в контекст, а прочитав только мой комментарий о том, что у меня нет опыта в разработке. Это не оправдание, а факт.
Каждому бы писать такой Hello world с визуализацией и многопоточностью) для первой задачи на python впечатляет. Идея визуализации тоже очень понравилась.
Вот моя попытка сделать что-то похожее. У меня получилось диаметр сетки вк если память не изменяет 4.3, так что 6 рукопожатий для социалок это очень завышенная планка.
Когда контакт только появился, ради интереса создал группу, которая для увеличения числа пользователей типа исследовала эту теорию.
Мы не были первыми, у кого количество членов группы перевалило 10к, но 20к были наши. =)
Сейчас для того, чтобы найти кратчайший путь до другого человека достаточно у любого рандомного человека открыть список друзей, пройти по первой ссылке, на другой странице то же самое — список друзей, первая ссылка.
Метод users.get доступен без авторизации. Когда я делал что-то схожее, грузил данные в 64 потока. Ответ на запрос приходит с задержкой в доли секунды, а время передачи файлика, имхо, намного меньше. Получалось, если меньше 64 потоков — медленнее, больше — упирался в скорость интернета (или мне так казалось).
Да, вы правы. На такие запросы как users.get, friedns.get, где в параметры не передаются списки значений, ответ от сервера приходит очень быстро. Все изменяется, когда начинаешь использовать execute, в котором 25 методов с комплексными параметрами. Более 10 секунд может быть.
Делал нечто подобное, но хотел построить граф групп френдов для целого города.
Список френдов получал get-запросом на api.vk.com/method/friends.get, там не требуется токен. Дальше просто в цикле делал запросы, ну и складывал в базу.
В принципе работало, но получилось слишком долго и медленно — небольшой город на 200тыс «сливался» около 15 часов. На Москву замахиваться с такой скоростью обработки я не рискнул :)
Вопрос как максимально быстро скачать всех юзеров города для меня пока открытый. Может действительно стоит тупо распараллелить.
Мне кажется, что самый оптимальный вариант — это использование execute в комплексе с мультипоточностью. Сделайте ботов, получите для них токены и вперед. Можно с одного IP, по крайней мере до каких-то пор.
Кстати, кроме метода execute, возможно еще использовать хранимые процедуры. Это тот же VKscript, но который хранится на сервере. Прироста в производительно я так понимаю никакой не будет, а просто экономия трафика. Поправьте, если я не прав.
Кажется, все кому не лень с появлением соц. сетей стали проверять эту теорию. И, надо же, все сходятся во мнении, что она «в общем то работает».
А по теме, было бы неплохо вытаскивать только людей с количеством связей < 100 (в своей реализации: https://github.com/Sild/vk_chain_friends я использовал ограничение в 300), а ещё лучше брать только топ 30-50 активных друзей.
Да и надежность этого всего… Добавить в друзяшки человека !== Иметь связь с человеком.
Хочу поддержать — статья очень понравилась, не смотря на то, что раньше уже писали на эту тему.
Особенно впечатлила визуализация — не думаю, что она информативна, зато очень красивая.
Идея для улучшения:
Поставить фильтр на друзей — считать друзьями только тех, кто достаточно часто взаимно лайкает посты друг друга.
Спасибо, интересно. Хотя думаю логику «кого считать друзьями» нужно сделать более гибкой. И об ограничении на количество друзей из предыдущего поста — тоже согласен.
Проверка теории шести рукопожатий