Pull to refresh

Comments 12

Скрипт не готовый до конца. Так что можно сделать в итоге? Выкачать все сообщения из лс?

Можно сделать абсолютно всё, что позволяет официальная документация на раздел messages.

Громкое название. Обходим запрет messages API Вконтакте через… что, простите?!… Python???
Вот они какие, рецепты для домохозяйки.

  1. Установить python;
  2. Установить пакет из pip;
  3. Включить в настройках браузера Developer tools;
  4. Открыть DevTools и найти нужную куку во вкладке Network;
  5. Создать файл, в нём создать экземпляр класса, вписать авторизационные данные;
  6. Открыть консоль, командой запустить скрипт;
  7. Извлекать профит.

Отличное решение для среднестатистического пользователя Вконтакте.

Извините что?


  1. Вы жалуетесь на то, что чтобы запустить пайтон скрипт, нужно перед этим установить интерпретатор Python. Здесь я вообще промолчу.
  2. Ээээм, написать команду: pip install <команда>, это такой сложный процесс?
    3,4. Где я сказал хоть словом о том, что нужно лишний раз сниффить трафик и создавать свои куки? Моя библиотека специально была сделана, чтобы помочь людям решить эту нудную проблемку.
  3. Ну, создать файл это вообще главная проблема. Для этого нужно посмотреть целый 10 часовой курс на ютубе. А создание экземпляра класса вообще можно скопировать из статьи. (Press F for ctrl-c and ctrl-v)
  4. Здесь тоже комментировать не хочу. Тем более у большинства людей в их среде разработки есть кнопка запуска скрипта.

P.S.
Вас послушать, так Вы вообще запросы к API пишете на листочке и отправляете почтой в офис ВК и ждёте ответ пару месяцев.

Вы намеков не понимаете… Скажу прямо. Вы неправильно выбрали средство реализации.

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

Вот есть бухгалтерша на связи, как раз хочет выкачать из группы рецепты, спрашивает как? Я то ей хоть и могу письмо написать, но общаемся сугубо по телефону, тем более не касается рабочих отношений для обсуждений по e-mail.

То есть, сама задача то нормальная. Но решение мало-воспроизводимое.

А так, на мой взгляд, я дельный совет даю. Если бы вы правильно выбрали средства реализации, то решение было бы в 2-3 строки кода. На 100% могу быть уверен, что меньше одного килобайта. А если пойти по официальному пути, — плюс килобайт файла манифеста. Надеюсь, этот намек вы поймёте.
Про какое другое «средство реализации» и про какой «официальный путь» вы мне говорите?
Ограничение Messages API
Стремясь предоставить наиболее высокий уровень защиты приватности и хранения личной переписки, с 15 февраля мы ограничиваем сторонним разработчикам доступ к API сообщений пользователей.
Я не про API. Я про userscript. А официальный способ — расширение для браузера firefox. Расширения Firefox работают как на десктопах, так и на мобильниках. — И там пользователь уже авторизован, то есть остаётся спрограммировать сами действия, и сделать какую-нибудь кнопочку для активации. Причем в руках будут все инструменты — и скролл сообщений, и автоподгрузка без каких либо запросов, — всё уже спрограммированно самим Вконтакте.

Ну на python тоже неплохо, только код раз в 5 длинее и авторизация через колено… Но, справедливости ради, это хорошая разминка на навыки python.
Наверное, не до конца объяснил, нашел свободные 10 минут, чтобы разъяснить подробнее.

Что я имею в виду?

Userscript — это тоже самое что и расширение для браузера, но неофициальное. Поставляется в виде прямой ссылки на файл extension-name.user.js. Если стоит расширение, например, Greasemonkey (самый первый) или Violentmonkey (самый простой) или проприетарный Tampermonkey (самый продвинутый), то оно подхватит ссылку и скачает и сохранит у себя автоматом. Расширение просто запускает нужный JavaScript, когда браузер переходит на страничку, URL которой удовлетворяет регулярному выражению, написанному в заголовках файла userscript.

Что из себя представляет скрипт?

По поводу трёх строчек я конечно перегнул.

Будем считать что мы находимся на странице сообщений.

Нам необходимо:
  1. проскролить тег с сообщениями;
  2. если появился прелоадер, значит конец ещё не достигнут, продолжаем цикл, в противном случае выдаём результат;
  3. через setTimeout() или setInterval() периодами по 100-200мс ожидаем пока не погаснет прелоадер;
  4. когда прелоадер погас, значит сообщения загрузились, получаем их через document.querySelectorAll() и innerHTML;
  5. переходим в начало цикла.


И там остаётся внедрить на страницу кнопочку активации.
Я бы её внедрил прямо на страницу сообщений где-нибудь рядом со смайликами.
const button = document.createElement('button');
button.innerHTML = 'получить все сообщения';
document.querySelector('селектор куда внедряем кнопку').appendChild(button);
button.addEventListener('click', () => { getMessages() } );

И остаётся вопрос — куда выводить результаты работы. Тут можно хоть в консоль, хоть в window.alert(''), можно сделать отдельный div, а можно даже открыть новое окно через window.open('about:blank','_blank');, а можно даже в виде какого-нибудь xml-файла или json-файла для скачки через ссылку в base64.

Ну как бы на словах все просто. Сколько коротеньких строчек кода? Ну может 5-7 или даже 10. Правда?

Ладно. По поводу расширения. Кстати, есть конвертеры userscript -> extension. Код там тот же самый. Ничего мудрёнее нету. Архив надо будет ещё подписать своей подписью PGP или аналогами.

Mozilla премодерирует все новые расширения. Обычно на это уходит пара часов. Чем меньше кода в расширении, тем быстрее его апрувят. На сам Вконтакте им будет пофигу, то есть главное — чтобы не было вредоносного кода.

Последнее расширение, которое я добавлял где-то год назад, (запулил его где-то в обед по московскому времени) Mozilla апрувила минут через 40.

Как расширения, так и userscript прекрасно работают на мобильных телефонах, при условии что там запускается Firefox.

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

А для публикации фото в профиль Instagram имеется какое-то решение?

У инстаграмма тоже есть свой api, но я им никогда не пользовался. Но скорее всего публикация фото реализована в этой библиотеке: Instagram-API-python
API там скудное, там нужно что-то подобное. То есть, надо авторизовываться как «обычный» браузер, с корректным User-agent и всеми признаками браузера.
Было, на php, недавно его забанили на гитхабе.
Sign up to leave a comment.

Articles