Хабр как выкачать данные анкет вк
Перейти к содержимому

Хабр как выкачать данные анкет вк

  • автор:

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

Совсем недавно на Хабре появилась статья о реализации дружеских связей в ВКонтакте с помощью Wolfram Mathematica. Идея мне понравилась, и, естественно, захотелось сделать такой же граф, используя Python и d3. Вот, что из этого получилось.

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

  • Создание и авторизация приложения.
  • Получение данных.
  • Визуализация графа.
  • Python 3.4
  • requests
  • d3
  • Mozilla FireFox, так как в Chrome нельзя использовать XMLHttpRequest для загрузки локальных файлов (никто не мешает сделать python -m http.server 8000)
Создание и авторизация приложения

Чтобы получить доступ к API ВКонтакте, нам необходимо создать Standalone-приложение, после чего мы сможем использовать нужные нам методы API, которые будут описаны далее. Приложение создается здесь — выберем Standalone-приложение. Нас попросят ввести код-подтверждения, высланный на мобильный, после чего мы попадем на страницу управления приложением. На вкладке Настройки нам пригодится ID приложения для получения access_token.
Далее нам надо авторизовать наше приложение. Этот процесс состоит из 3х этапов.

Аутентификации пользователя на сайте ВКонтакте

Для этого сформируем url, как показано ниже:

https://oauth.vk.com/authorize?client_id=IDприложения&scope=friends,offline&redirect_uri=https://oauth.vk.com/blank.html&display=page&v=5.21&response_type=token 

APP_ID – идентификатор Вашего приложения;
PERMISSIONS – запрашиваемые права доступа приложения;
DISPLAY – внешний вид окна авторизации, поддерживаются: page, popup и mobile.
REDIRECT_URI – адрес, на который будет передан access_token.
API_VERSION – версия API, которую Вы используете.

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

Разрешение доступа к своим данным

Далее разрешаем приложению доступ к необходимой информации:

Получение access_token

После авторизации приложения клиент будет перенаправлен на REDIRECT_URI. Нужная нам информация будет заключена в ссылке.

https://oauth.vk.com/blank.html#access_token=ACCESS_TOKEN&expires_in=0&user_id=USER_ID 

Редактируем файл settings.py, вставляя туда полученные access_token и user_id. Теперь мы можем осуществлять запросы к API ВКонтакте.

Получение данных

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

Поскольку нужна хоть какая-то информация об id пользователя, по которому будет строиться граф, нам пригодиться users.get. Он принимает как один id, так и несколько, список полей, информация из которых нам необходима, а также падеж, в котором будет склоняться фамилия и имя. Мой метод base_info() получает список id и возвращает информацию о пользователе с фотографией.

def base_info(self, ids): """read https://vk.com/dev/users.get""" r = requests.get(self.request_url('users.get', 'user_ids=%s&fields=photo' % (','.join(map(str, ids))))).json() if 'error' in r.keys(): raise VkException('Error message: %s. Error code: %s' % (r['error']['error_msg'], r['error']['error_code'])) r = r['response'] # Проверяем, если id из settings.py не деактивирован if 'deactivated' in r[0].keys(): raise VkException("User deactivated") return r 

Это может быть важно для тех, кто захочет отправлять в него id из friends.getMutual, таким образом произведя на свет огромное число запросов. Об этом позже.
Теперь нам надо получить информацию о друзьях пользователя, в чем нам и поможет метод friends.get. Из всех его параметров, перечисленных в документации, используем user_id, который находится в нашем setting.py и fields. Дополнительными полями будут id друзей, их имена, фамилии и фотографии. Ведь хочется, чтобы в узлах были миниатюры их фотографий.

def friends(self, id): """ read https://vk.com/dev/friends.get Принимает идентификатор пользователя """ r = requests.get(self.request_url('friends.get', 'user_id=%s&fields=uid,first_name,last_name,photo' % id)).json()['response'] #self.count_friends = r['count'] return

Далее наступает самое интересное.
Список id общих друзей между двумя пользователями возвращает метод friends.getMutual. Это хорошо, потому что мы получаем только id, а более расширенная информация у нас уже есть, благодаря friends.get. Но никто не запрещает сделать вам лишнюю сотню-другую запросов, используя users.get. Схемы расположены чуть-чуть пониже.
Теперь определимся, как будем использовать friends.getMutual. Если у пользователя N-друзей, то надо сделать N-запросов, чтобы по каждому другу мы получили список общих друзей. К тому же нам надо будет делать задержки, чтобы у нас было допустимое количество запросов в секунду.
Предположим, что у сканируемого нами id есть 25 друзей.

Всего 52 запроса — это слишком многовато, поэтому вспомним, что users.get может принимать список id:

25 друзей — 28 запросов, но как писалось выше, информация у нас уже имеется, благодаря friends.get.

И тут нам пригодится execute, который позволит запустить последовательность методов. У него есть единственный параметр code, он может содержать до 25 обращений к методам API.
То есть в итоге код в VKScript будет примерно таким:

return < “id": API.friends.getMutual(), // * 25 . >; 

Найдитесь те, кто напишет, как сократить данный код, не используя все время API.friends.getMutual.
Теперь нам надо всего лишь отправлять партиями id друзей по 25 в каждой. На нашем примере схема будет выглядеть так:

А ведь мы могли с помощью for отправлять каждого друга в friends.getMutual, а потом еще узнавать более детальную информацию через users.get.
Далее составим человеко понятную структуру, где уже вместо id друга и списка id ваших общих друзей, будет информация из friends.get. В итоге получим нечто вроде:

[(, [, ]),(, None)] 

В словарях находится id, имя, фамилия, фото, в списках — словари общих друзей, если общих друзей нет, то None. Кортежами все это разделяется.

def common_friends(self): """ read https://vk.com/dev/friends.getMutual and read https://vk.com/dev/execute Возвращает в словаре кортежи с инфой о цели и списком общих друзей с инфой """ def parts(lst, n=25): """ разбиваем список на части - по 25 в каждой """ return [lst[i:i + n] for i in iter(range(0, len(lst), n))] result = [] for i in parts(list(self.all_friends.keys())): # Формируем code (параметр execute) code = 'return ),' % (id, self.my_id, id)) code = '%s%s' % (code, '>;') for key, val in requests.get(self.request_url('execute', 'code=%s' % code)).json()['response'].items(): if int(key) in list(self.all_friends.keys()): # берем инфу из уже полного списка result.append((self.all_friends[int(key)], [self.all_friends[int(i)] for i in val] if val else None)) return result 

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

python main.py 
Визуализация графа

Выбор пал на d3, а именно на Curved Links. Для этого надо сгенерировать json, который будет примерно такого содержания:

< "nodes": [ , , ], "links":[ , ] > 

Немного видоизменяя index.html, узлами становятся фотографии друзей.

Если хочется сразу визуализировать граф:

python 2d3.py 

В папке web появится файл miserables.json. Не забываем открывать index.html в Mozilla FireFox или используем python -m http.server 8000 и открываем в Chrome.

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

Так выглядит граф дружеских связей одного из моих друзей. Связи — это все.

Конечно, мне было интересно, у кого работает быстрее.

В статье, которая меня вдохновила, написано:

На моих 333 друзьях это заняло 119 секунд.

На момент написания этой статьи, у Himura в ВКонтакте был 321 друг. У меня это заняло 9 секунд (работа всей программы, а не одного friends.getMutual).

В заключение

Всю необходимую информацию об использованных методах можно найти в щедро написанной документации ВКонтакте, однако мной была обнаружена пара ошибок: не была описана ошибка с кодом 15 (‘error_msg’: ‘Access denied: user deactivated’, ‘error_code’: 15), догадаться можно, что она значит, и uid вместо user_id в документации к методу friends.get. Спустя 2 дня:

Как говорилось вначале, проект можно найти на GitHub, буду рад, если он понравится ещё кому-то и я получу много вкусных пулл реквестов…

UPD (27.05.2014):
Как мне подсказал WTFRU7, я добавил возможность использования хранимых процедур. Для этого нужно перейти по ссылке.
Создаем хранимую процедуру getMutual. Копируем содержимое execute_getMutual.js в форму и сохраняем. Не забываем скачать более новую версию. Финальный вид нашей схемы будет таким:

UPD (16.06.2014):
Получаем бессрочный токен.
UPD (11.07.2014):
Добавлены схемы-пояснения.
UPD (14.11.2014):
Продолжение

  • Python
  • Программирование

Новости

Постановление Совета судей Российской Федерации

О Типовых правилах пребывания посетителей в судах

Повышение квалификации

Программы и формы регистрации для участия в февральских семинарах.

Повышение квалификации

Курс для подготовки к сдаче квалификационного экзамена на присвоение статуса адвоката

Дополнительная профессиональная программа (повышение квалификации)«Актуальные вопросы правоприменения в деятельности адвоката» (144 часа). Курс для подготовки к сдаче квалификационного экзамена на присвоение статуса адвоката.

Анкета адвокатского образования

Приложение №4 к Положению о порядке ведения реестра адвокатских образований и их филиалов субъекта Российской Федерации.

О присуждаемых в 2023 году судами размерах компенсаций морального вреда по гражданским делам

Комиссией по вопросам определения размеров компенсации морального вреда Ассоциации юристов России проводится аналитическая работа на предмет выявления изменений в правоприменительной практике в 2023 году и исследования взыскиваемых размеров компенсации морального вреда в регионах РФ.

Вебинар 14 декабря

Приглашаем адвокатов, стажёров и помощников адвокатов Ваших адвокатских палат на очередной вебинар Федеральной палаты адвокатов Российской Федерации, который состоится 14 декабря 2023 года.

О разделе сайта ФПА РФ «Оправдательные приговоры»

На сайте Федеральной палаты адвокатов РФ создан специальный раздел «Оправдательные приговоры», где будут публиковаться сведения о делах, по которым вынесены вступившие в законную силу оправдательные приговоры; об адвокатах, которые их вели; а также тексты соответствующих судебных решений.

Учеба в Университете правосудия

Проходит с 11.12.23г. по 15.12.23г. с 10 часов утра. Запись на учебу проводится через координационный центр 30-24-30 и 30-24-39. Для молодых адвокатов учеба обязательна. Тематический план прилагается.

Конференция «Профессиональные риски в адвокатской деятельности»

В рамках совместной XXIV Международной научно-практической конференции «Кутафинские чтения» кафедра адвокатуры Университета имени О. Е. Кутафина (МГЮА) совместно с Федеральной палатой адвокатов Российской Федерации проводит 23 ноября 2023 года конференцию на тему «Профессиональные риски в адвокатской деятельности».

Очередной вебинар Федеральной палаты адвокатов РФ 15 ноября

Приглашаем Вас, адвокатов, стажёров и помощников адвокатов Ваших адвокатских палат на очередной вебинар Федеральной палаты адвокатов Российской Федерации, который состоится 15 ноября 2023 года.

Хабр как выкачать данные анкет вк

Выгодно и удобно

Карта деловых поездок АТЭС (APEC)

Оформить с туроператором АКВАМАРИН

Аквамарин — единственное аккредитованное агентство

Виза в Южную Корею

Экскурсии и сертификаты

180000 руб

160000 руб

750000 руб

Онлайн табло рейсов

Новости

12 февраля 2024

29 декабря 2023

Наши партнёры

coral

tez

anex

Вопросы-ответы

Нужно ли мне заполнять анкету самостоятельно?

Вам не нужно заполнять Анкету на оформление визы самостоятельно. Менеджеры Туроператора, Визового центра «Аквамарин» профессионально заполнят Анкеты, согласно всем нюансам, которые есть по конкретной стране.

Туроператор, Визовый центр «Аквамарин» 2023-12-11

Можно ли оформить у вас срочную визу в КИТАЙ?

Стандартный срок оформления китайской визы составляет 10-12 рабочих дней, не включая день подачи заявки. Уменьшение сроков возможно. Подробности можете уточнить у менеджеров визового центра «Аквамарин».

Туроператор, Визовый центр «Аквамарин» 2023-12-11

Если я не могу улететь или по каким-либо причинам передумал, а тур уже подтверждён, что делать?

Вам нужно написать письмо на эл. почту visa-khv@mail.ru, после этого мы сообщим Вам размер штрафных санкций за отмену бронирования. Если Вы соглашаетесь — мы аннулируем Ваш договор и возвращаем Вам деньги за минусом штрафа.

Туроператор, Визовый центр «Аквамарин» 2023-12-11

Обязательно ли нужна страховка? Можно ли сделать страховку у вас в офисе?

Медицинская страховка — обязательный документ для подачи на туристическую визу, оформить ее можно у нас в офисе. Наши менеджеры знают все нюансы относительно каждой из стран. Туроператор, визовый центр «Аквамарин» сотрудничает с компанией «ДальЖАСО» и «ВСК».

Туроператор, Визовый центр «Аквамарин» 2023-12-11

Что такое “Шенгенская виза” и в какие страны я смогу попасть?

В страны шенгенского соглашения входят: Бельгия, Германия, Франция, Нидерланды и Люксембург, Австрия, Венгрия, Греция, Дания, Италия, Испания, Исландия, Латвия, Литва, Мальта, Норвегия, Португалия, Словакия, Словения, Финляндия, Швеция, Швейцария, Чехия, Эстония. Кроме того, Шенгенская виза открывает въезд (и вход) на территории государств, которые договорились о свободном перемещении со странами-участницами соглашения. Это государства: Хорватия, Андорра, Монако, Ватикан, Лихтенштейн и Сан-Марино, а также —Гренландия и Фарерские острова. Данное соглашение имело большое значение не только для граждан стран-участниц, но и для всех остальных, т. к. после вступления его в силу отпала необходимость в оформлении множества виз при поездках в Европу. Например, если у Вас есть шенгенская виза, выданная консульством Испании, то для поездки из Испании во Францию, или Португалию вам не надо обращаться за визой в консульства Франции и Португалии.

По испанской визе вы можете свободно пересекать границы стран-участниц шенгенского соглашения. Подробности можете уточнить у менеджеров визового центра «Аквамарин».

Туроператор, Визовый центр «Аквамарин» 2023-12-11

В каком случае нужно оформлять разрешение на выезд ребёнка за границу?

— если собираетесь посетить страны Шенгенского соглашения, США или другую.

– если ребенок собрался путешествовать с третьими лицами, без сопровождения родителей (бабушки, тети, братья, и т. д.).

Туроператор, Визовый центр «Аквамарин» 2023-12-11

Есть у Вас рассрочка на туры?

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

Туроператор, Визовый центр «Аквамарин» 2023-12-11

Что такое система «Фортуна»?

Отели по системе «Фортуна» — это отличный шанс сэкономить на отдыхе! Отели по системе «Фортуна» могут быть двухзвездные, трех-, четырех- и пятизвездные. Как они появляются? Как правило, в двух случаях: в сезон и в несезон.

В сезон они появляются из-за нехватки мест в гостиницах.

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

Отдых по системе «Фортуна» больше всего подойдет непритязательным туристам, которые изыскивают любую возможность сэкономить. Иногда удешевление стоимости поездки может достигать и 50-60% от обычного отеля. Также на такой отдых стоит обратить внимание людям, которые любят неопределенность, сюрпризы. Вполне возможно оказаться в действительно хороших отелях и раскрыть новые горизонты отдыха.

Туроператор, Визовый центр «Аквамарин» 2023-12-11

За сколько дней нужно подавать документы на визу?

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

Китай — за 10 дней

Шенген — не менее чем за 30 дней

Япония – за 10 дней, не менее 5

Корея, Тайланд — не менее 14 дней.

Какие документы нужны для оформления тура?

Для оформления тура Вам необходимо подъехать к нам в офис или связаться с менеджером туроператора, визового центра «Аквамарин». При себе необходимо иметь внутренний российский паспорт для оформления договора, заграничные паспорта (оригинал или ксерокопии) всех участников поездки, а также предоплату или полную оплату, в зависимости от того, сколько времени осталось до начала тура.

Туроператор, Визовый центр «Аквамарин» 2022-12-11

Не нашли ответ на свой вопрос? Звоните: +7 (4212)24-92-64, WhatsApp: 8-914-159-92-64

Горячая линия: 8-800-600-52-07 (бесплатный звонок для всех регионов).

Туроператор, Визовый центр «Аквамарин» 2023-12-11

вКонтакте и персональные данные!

Возможно у меня паранойя, но я всегда старался оставлять на разного рода интернет-ресурсах как можно меньше персональных данных. Так было и с популярной «социалкой» вКонтакте. Все, что я оставил о себе, это пол, ник и политические взгляды. Страничка активно наполнялась фотографиями, встречами, персональным аудио контентом (я — музыкант). Велась активная переписка с многочисленными пользователями этого сайта.

Спустя год, а именно вчера, я увидел на своей страничке надпись от «создателей»: «Iнформацiя на цiй сторiнцi може не вiдповiдати дiйсностi.«.

От меня требуют заполнения полей «имя» и «фамилия» согласно паспортным данным.

Пройдя по ссылке, я увидел надпись: «Частина iнформацiї на данiй сторiнцi може бути несправжньою. Деякi користувачi вважають, що у нiй є несправжнє iм’я або фото«, а также ссылку на политику ВКонтакте в области достоверности введённых пользователем данных. Кто из пользователей считает, что мои данные неправильные — я не знаю. Все мои друзья вКонтакте это или личные знакомые, или люди, которые сами отправили мне заявку.

На странице «политики в области достоверности. » (http://vkontakte.ru/topic1562682) рассказывается, что мой аккаунт может быть фейковым (поддельным), что я могу быть школьником (процент которых увеличился), которые просто не понимают, зачем создавался сайт (а распространен он был сначала ТОЛЬКО в элитных ВУЗах страны). И вообще, вся тема написано в негативных и неприятных красках, я бы сказал даже оскорбительных.

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

Но в то же время, согласно нынешнему пользовательскому соглашению, я нарушаю правила.

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

Может дойдет до того, что надо будет оставлять скан своего паспорта и свой ИИН?

P.S. Сейчас я исправил свою страничку (вписал имя и отчество). Отправил заявку. Жду ответа. Но осадок, как говорится, остался. И я уже на грани того, чтобы просто удалить свой аккаунт.

Кстати, много из моих знакомых, которые пользуются соцсетью Faсebook, никогда о таких проблемах не слышали. Они могут оставить только имя, а в поле «фамилия» написать, например, «К.«.

P.S. №2 Походу тему заминусовали. На Хабре любят минусовать 🙂

  • vkontakte
  • персональные данные
  • паранойя

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *