python273 / vk_api

Модуль для создания скриптов для ВКонтакте | vk.com API wrapper
https://pypi.org/project/vk-api/
Apache License 2.0
1.33k stars 321 forks source link

Запрет messages #219

Open Andreuno opened 5 years ago

Andreuno commented 5 years ago

В связи с планируемыми событиями у ВК, в феврале, хочу задать соответствующий вопрос: Будут ли разработчики библиотеки бороться с этим? Как раньше боролись с методом audio...

python273 commented 5 years ago

У меня все меньше времени и желания этим заниматься, так что скорее всего не будет. В принципе это можно реализовать отедльным модулем и залить в pypi, так что делайте кому нужно. Не объязательно даже на vk_api завязываться, можно просто куки от vk_api брать или requests сессию

Ну и возможно это обходится использованием ключей от официальных приложений

Andreuno commented 5 years ago

У меня все меньше времени и желания этим заниматься, так что скорее всего не будет. В принципе это можно реализовать отедльным модулем и залить в pypi, так что делайте кому нужно. Не объязательно даже на vk_api завязываться, можно просто куки от vk_api брать или requests сессию

Ну и возможно это обходится использованием ключей от официальных приложений

Спасибо за ответ!) Релаьно годная либа, пользуесь только ей. Спасибо тебе за такое)

TheDeaX-Lab commented 5 years ago

@Andreuno Короче, я создам у себя в репозитории обход messages, будет основан на selenium. Удобство этой штуки будет в том что каптча у вас будет простая нежели каждый раз текстово вводить

Andreuno commented 5 years ago

@Andreuno Короче, я создам у себя в репозитории обход messages, будет основан на selenium. Удобство этой штуки будет в том что каптча у вас будет простая нежели каждый раз текстово вводить

Он на питоне или на java? И в чем суть удобства с капчей, ну что ты придумал то-есть?)

steeldimon commented 5 years ago

@Andreuno Короче, я создам у себя в репозитории обход messages, будет основан на selenium. Удобство этой штуки будет в том что каптча у вас будет простая нежели каждый раз текстово вводить

То есть, нельзя будет использовать API с selenium нормально без браузера? А как же сервера? На сколько я помню, selenium нормально только в связке с графическим браузером работает, не консольным.

steeldimon commented 5 years ago

@Andreuno Короче, я создам у себя в репозитории обход messages, будет основан на selenium. Удобство этой штуки будет в том что каптча у вас будет простая нежели каждый раз текстово вводить

То есть, нельзя будет использовать API с selenium нормально без браузера? А как же сервера? На сколько я помню, selenium нормально только в связке с графическим браузером работает, не консольным.

Я посмотрел вариант использования requests, на сколько я понимаю, cookies и так есть в сессии, и через эту сессию работать с сообщениями через парсер типа beautifulsoup и post/get requests

steeldimon commented 5 years ago

@Andreuno Короче, я создам у себя в репозитории обход messages, будет основан на selenium. Удобство этой штуки будет в том что каптча у вас будет простая нежели каждый раз текстово вводить

То есть, нельзя будет использовать API с selenium нормально без браузера? А как же сервера? На сколько я помню, selenium нормально только в связке с графическим браузером работает, не консольным.

Я посмотрел вариант использования requests, на сколько я понимаю, cookies и так есть в сессии, и через эту сессию работать с сообщениями через парсер типа beautifulsoup и post/get requests

В общем работать через lxml или beautyfulsoup можно прекрасно парсить сообщения, получать их и отправлять. Важный момент что requests сессию можно взять прямо из библиотеки (на практике не пробовал еще). Фактически можно реализовать метод messages через requests к web версии и обернуть их в привычную часть библиотеки в привычном виде. Если у кого есть время и желание сделать, будет супер. Дойдут руки постараюсь сделать сам.

xkord commented 5 years ago

@Andreuno Короче, я создам у себя в репозитории обход messages, будет основан на selenium. Удобство этой штуки будет в том что каптча у вас будет простая нежели каждый раз текстово вводить

То есть, нельзя будет использовать API с selenium нормально без браузера? А как же сервера? На сколько я помню, selenium нормально только в связке с графическим браузером работает, не консольным.

Я посмотрел вариант использования requests, на сколько я понимаю, cookies и так есть в сессии, и через эту сессию работать с сообщениями через парсер типа beautifulsoup и post/get requests

В общем работать через lxml или beautyfulsoup можно прекрасно парсить сообщения, получать их и отправлять. Важный момент что requests сессию можно взять прямо из библиотеки (на практике не пробовал еще). Фактически можно реализовать метод messages через requests к web версии и обернуть их в привычную часть библиотеки в привычном виде. Если у кого есть время и желание сделать, будет супер. Дойдут руки постараюсь сделать сам.

Если будешь делать, то примерно через какой промежуток времени? И дойдут ли руки в целом? Если где-то за горизонтом и не факт, что дойдут, то буду разбираться как делать.

xkord commented 5 years ago

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

Собственно вопрос, кто-нибудь знает это означает, что при получении токена пользователя (vk_token) через мобильное приложение и отправки этого токена на сервер и запуске на сервере примерно следующего кода:

vk_session = vk_api.VkApi(token=self.vk_token, app_id=self.app_id, 
                          client_secret=self.vk_client_secret)
self.vk = vk_session.get_api()

то такому приложению доступ к messages выдан не будет? Или я что-то не так понял..

MrSmitix commented 5 years ago

Скорее всего они имели в виду приложения, авторизация в которых проходит через implicit flow. В документаций кстати об этом написано.

Меня интересует вопрос обхода ограничений по использованию методов message. Сейчас ещё можно выполнять message.send юзеру через vk.com/dev. А вот если отсылать что-то в беседу то "Permission to perform this action is denied". Кто как обходит? Авторизация под офф. приложением? Пытался косить под Kate, но получил "Access denied: no access to call this method".

MrSmitix commented 5 years ago

Поправочка. Через vk.com/dev пока ещё работает. Но я думаю что не на долго. Возможно чуть позже залью код для обхода к себе.

hikiko4ern commented 5 years ago

@MrSmitix, не советую проходить авторизацию с данными офф. приложений - техподдержка подтвердила, что за это скоро начнуть банить аккаунты. Тем не менее, при закосе под оф приложение под ведроид, методы сообщений работают.

MrSmitix commented 5 years ago

@hikiko4ern, не можешь подсказать app_id и app_secret для авторизации?

hikiko4ern commented 5 years ago

@MrSmitix, *тык*

xkord commented 5 years ago

Скорее всего они имели в виду приложения, авторизация в которых проходит через implicit flow. В документаций кстати об этом написано.

Меня интересует вопрос обхода ограничений по использованию методов message. Сейчас ещё можно выполнять message.send юзеру через vk.com/dev. А вот если отсылать что-то в беседу то "Permission to perform this action is denied". Кто как обходит? Авторизация под офф. приложением? Пытался косить под Kate, но получил "Access denied: no access to call this method".

Получается получение токена через Android SDK и работа с этим токеном на сервере - остается разрешенной фичей?

TheDeaX-Lab commented 5 years ago

https://github.com/python273/vk_api/issues/219#issuecomment-455252508 есть уязвимость данной системы. Смысл таков что кто прошёл модерацию, то даётся не токен который работает на одного человека, а разрешается app_id! Что мы в итоге имеем, забираем app_id у KateMobile и дело решено! Хз как у вас, но у меня всё отлично

steeldimon commented 5 years ago

@Andreuno Короче, я создам у себя в репозитории обход messages, будет основан на selenium. Удобство этой штуки будет в том что каптча у вас будет простая нежели каждый раз текстово вводить

То есть, нельзя будет использовать API с selenium нормально без браузера? А как же сервера? На сколько я помню, selenium нормально только в связке с графическим браузером работает, не консольным.

Я посмотрел вариант использования requests, на сколько я понимаю, cookies и так есть в сессии, и через эту сессию работать с сообщениями через парсер типа beautifulsoup и post/get requests

В общем работать через lxml или beautyfulsoup можно прекрасно парсить сообщения, получать их и отправлять. Важный момент что requests сессию можно взять прямо из библиотеки (на практике не пробовал еще). Фактически можно реализовать метод messages через requests к web версии и обернуть их в привычную часть библиотеки в привычном виде. Если у кого есть время и желание сделать, будет супер. Дойдут руки постараюсь сделать сам.

Если будешь делать, то примерно через какой промежуток времени? И дойдут ли руки в целом? Если где-то за горизонтом и не факт, что дойдут, то буду разбираться как делать.

Сейчас закончу основную часть бота с celery и прочими вещами, после отладки займусь сообщениями через requests

xkord commented 5 years ago

#219 (comment) есть уязвимость данной системы. Смысл таков что кто прошёл модерацию, то даётся не токен который работает на одного человека, а разрешается app_id! Что мы в итоге имеем, забираем app_id у KateMobile и дело решено! Хз как у вас, но у меня всё отлично

Не совсем понятно, достаточно забрать только app_id? А CLIENT_SECRET брать какой и токен пользователя?

hikiko4ern commented 5 years ago

@xkord, всегда можно декомплировать и посмотреть, как это делает приложение; токен через Implicit Flow получать.

...
public static String getUrl(String paramString1, String paramString2)
  {
    StringBuilder localStringBuilder = new StringBuilder();
    localStringBuilder.append("https://oauth.vk.com/authorize?client_id=");
    localStringBuilder.append(paramString1);
    localStringBuilder.append("&display=mobile&scope=");
    localStringBuilder.append(paramString2);
    localStringBuilder.append("&redirect_uri=");
    localStringBuilder.append(URLEncoder.encode(redirect_url));
    localStringBuilder.append("&response_type=token&v=");
    localStringBuilder.append(URLEncoder.encode("5.78"));
    return localStringBuilder.toString();
  }
...
...
String str = Auth.getUrl(KateConstants.API_ID, paramBundle);
...
...
public class KateConstants
{
  public static String API_ID = "2685278";
  public static String tmp = "hHbJug59sKJie78wjrH8";
}
...
xkord commented 5 years ago

@xkord, всегда можно декомплировать и посмотреть, как это делает приложение; токен через Implicit Flow получать.

...
public static String getUrl(String paramString1, String paramString2)
  {
    StringBuilder localStringBuilder = new StringBuilder();
    localStringBuilder.append("https://oauth.vk.com/authorize?client_id=");
    localStringBuilder.append(paramString1);
    localStringBuilder.append("&display=mobile&scope=");
    localStringBuilder.append(paramString2);
    localStringBuilder.append("&redirect_uri=");
    localStringBuilder.append(URLEncoder.encode(redirect_url));
    localStringBuilder.append("&response_type=token&v=");
    localStringBuilder.append(URLEncoder.encode("5.78"));
    return localStringBuilder.toString();
  }
...
...
String str = Auth.getUrl(KateConstants.API_ID, paramBundle);
...
...
public class KateConstants
{
  public static String API_ID = "2685278";
  public static String tmp = "hHbJug59sKJie78wjrH8";
}
...

Спасибо, помогло! Интересно, как долго это будет работать. Пока разработчики Kate Mobile не перегенерят client_secret и не сделают нормальную защиту от декомпилирования...

Интересно, а можно как-то провернуть подобную схему через получение токена с помощью sdk?

hikiko4ern commented 5 years ago

пока для доступа к сообщениям не сделают какую-нибудь хитрую систему, как для доступа к аудио

client_secret не используется при авторизации даже если и сделают какую-то защиту, app_id останется

Интересно, а можно как-то провернуть подобную схему через получение токена с помощью sdk?

какую "подобную схему"?

xkord commented 5 years ago

пока для доступа к сообщениям не сделают какую-нибудь хитрую систему, как для доступа к аудио

client_secret не используется при авторизации даже если и сделают какую-то защиту, app_id останется

Интересно, а можно как-то провернуть подобную схему через получение токена с помощью sdk?

какую "подобную схему"?

У меня сервис устроен следующим образом, получаю токен пользователя через sdk, далее токен отправляю на сервер и работаю с messages с сервера:

vk_session = vk_api.VkApi(token=self.vk_token, app_id=self.app_id, 
                          client_secret=self.vk_client_secret)
self.vk = vk_session.get_api()

У меня есть CLIENT_SECRET и APP_ID от Kate Mobile, а токен через SDK я уже не смогу получить, только Implicit Flow. Вот я и подумал, может можно все таки как-то получить его через API SDK.

Andreuno commented 5 years ago

Серьезно? У меня все прекрасно работает на Kate APP_ID... Странно

hikiko4ern commented 5 years ago

и работаю с messages с сервера

@xkord, вроде где-то было написано, что теперь нельзя использовать апи сообщений с сервера - только клиентский.

xkord commented 5 years ago

и работаю с messages с сервера

@xkord, вроде где-то было написано, что теперь нельзя использовать апи сообщений с сервера - только клиентский.

Если быть точнее, то "работал". В том то и дело, что теперь нельзя. Придется всю логику работы переносить на клиента. Потому что как я понял Implicit flow для браузера, а мне надо получить токен с помощью SDK для уже залогиненного пользователя в оффициальном приложении вк на телефоне.

RSupreme10x commented 5 years ago

Здравствуйте, мне нужно чтобы бот ловил событие вступления человека в беседу вконатакте, бот должен что-то написать в ответ на это событие. Не знаете как называется событие???

Noop1 commented 4 years ago

Здравствуйте, мне нужно чтобы бот ловил событие вступления человека в беседу вконатакте, бот должен что-то написать в ответ на это событие. Не знаете как называется событие???

group_join / https://vk.com/dev/groups_events

Neqit commented 4 years ago

Hi, ещё актуальны CLIENT_SECRET и APP_ID от Kate Mobile? У выдает ошибку при попытки исользования message.get Если нет, то есть ли способы без модерации приложения получить доступ к сообщениям?

TheDeaX-Lab commented 4 years ago

@Neqit вообще должно быть актуально

Neqit commented 4 years ago

@TheDeaX-Lab Хмм.. А какие аргументы используются для vk_api.VkApi? токен, клиент_сикрет и апп_айди?

TheDeaX-Lab commented 4 years ago

@Neqit только app_id https://github.com/TheDeaX-Lab/fast_start_vk

yungdev777 commented 4 years ago

есть решение! vk_session = vk_api.VkApi('логин', 'пароль', app_id=2685278)

hikiko4ern commented 4 years ago

@yungdev777 про использование IDшника от Kate Mobile уже не раз говорили - 1 2 3

ТП ещё при вводе этого запрета отвечала, что за использование данных офф приложений будут банить, а вот не начнут ли банить за использование данных чужих приложений - неизвестно, т.ч. все обходы - на свой страх и риск

EvGid commented 6 months ago

Есть актуальный фак, как чат бота сделать новичку?