Вконтакте: Отправка личных сообщений сервисом VK задним числом.

Добрый день. Давайте разберем два способа, как можно отправить личное сообщение ВКонтакте задним числом.

Причем первый способ является обязательным дополнением второго способа. Если не получиться первой методом, то обязательно получиться вторым. Если Вы не программист – не переживайте. Вам не нужно быть им, чтобы все сделать правильно. Поверьте, за Вас уже все давно сделано.

Однако, возникает вопрос, а зачем и кому это вообще нужно? Все очень просто. Ситуации в жизни бывают разные. Например, кто-то от Вас ждет важного документа, а Вы забыли его отправить… Данная статья поможет Вам исправить такого рода ситуации.

Но если ВКонтакте это защищенная сеть, то как такое возможно? Да, это правда, что взломать аккаунт ВКонтакте сложно. Но никто о взломе и не говорит. Мы говорим о небольшом лайфхаке, при условии, полного доступа к двум аккаунтам ВК.

Метод #1. Изменение временного пояса на сервере.

Перед тем как мы приступим, создадим два аккаунта ВКонтакте. Нам нужно иметь полный доступ к ним. А так же нужно получить доступ к API.

После того, как мы создали два аккаунта — авторизуемся. Процесс авторизации приложения состоит из 3-х шагов (https://vk.com/dev/auth_mobile):
1. Открытие окна браузера для аутентификации пользователя на сайте ВКонтакте.
2. Разрешение пользователем доступа к своим данным.
3. Передача в приложение ключа access_token для доступа к API.

Для авторизации нужно послать запрос на адрес https://oauth.vk.com/token, передав следующие обязательные GET параметры: grant_type, client_id, client_secret, username,password.

Пример запроса:
https://oauth.vk.com/token?grant_type=password&client_id=1914441&…=***&username=***&password=***

Пример ответа:
{«access_token»:»9d77c727986d7668986d7668049870402D1986d986d76684bbc9b1bf8488de9″, «expires_in»:0,»user_id»:85635407}

Получили token. Отлично.
Далее, нам нужно заказать качественный и абузоустойчивый VPS на CentOS. Думаю, с этим справиться каждый.

Теперь нам нужно изменить время на нашем сервере. Настройка самого сервера описывается здесь:
http://habrahabr.ru/post/246223/

Не забываем про серверные данные ВКонтакте:
• ip: 87.240.182.185
• browser: Mozilla/5.0 (vkShare; +http://vk.com/dev/Share)
• host: srv185-182-240-87.vk.com
• port: 36035

Изменение времени можно найти здесь:
http://moonback.ru/page/centos-time

После того как мы изменили время на сервере, можно начать отправлять сообщения через message.send().
Дело в том, что в документации к объекту message поля “date” говориться следующее: объект message возвращает поле “date” — дату отправки сообщения в формате unixtime. (https://vk.com/dev/message)
Поэтому мы отправляем сообщение просто с другим unixtime. Здесь главное, чтобы сервер ВКонтакте “узнал” Ваш VPS как свой. CentOS позволяет это сделать.
Все очень просто, не правда ли?

Метод #2. Отправка сообщений в качестве пересылаемого сообщения.

Если первый метод у Вас не сработал – ничего страшного. Он все равно необходим для второго способа.
И так, у нас есть настроенный VPS сервер. Заходим в социальную сеть ВКонтакте. Создаем переписку обычным способом между двумя аккаунтами. Теперь наша задача — обратиться к этим сообщениям и изменить их unixtime.

Приступим. Для того чтобы получить личные сообщения, мы можем использовать данный исходный код:
https://github.com/coldmind/vk-dialogue-export.py/blob/master/vk-dialogue-export.py

Но, если он для Вас выглядит слишком сложным, можно попробовать сделать только при помощи VK API:
https://vk.com/dev/messages.getHistory

Здесь все просто. Самое важное для нас это то, что мы должны правильно обратиться к полю “date” объекта message:

Берем за основу данный исходный код:
https://github.com/mrDoctorWho/VK-Exporter/blob/master/exporter.py

Из него нам нужно взять следующее:

getMessageHistory(self, count, uid, rev=0, start=0):
«»»
Gets messages history
«»»
values = {«count»: count, «user_id»: uid, «rev»: rev, «start»: start}
return self.method(«messages.getHistory», values)

Либо просто пользуемся php:
[php] global $array;
$vk = new VK;
$vk->Start(’email’, ‘pass’);
$res = $vk->Send(‘messages.getHistory’, ‘count=1&user_id=12345&v=4.100’);
$x = 1;
$ofX = 0;
$count = $res[‘response’][0] / 200;
$floor = $count + 1;
pre(‘Time of work ‘.floor($floor*1).’ sec.’);
while($x < floor($floor))
{
$y = 1;
$offset = 200 * $ofX;
$res = $vk->Send(‘messages.getHistory’, ‘count=200&offset=’.$offset.’&user_id=12345&v=4.100′);
sleep(1);
while($y < count($res[‘response’]))
{
if(trim($res[‘response’][$y][‘date’][‘type’]) != false)
{
$array[] = $res[‘response’][$y][‘date’];
}
$y++;
}
$ofX++;
$x++;
}
file_put_contents(‘date.txt’, serialize($array));
echo ‘Done.’;
[/php] Это просто, так как таких методов очень много в интернете.
Получили файл, где хранятся данные про unixtime. Меняем их на свою дату. И возвращаем назад на сервер аналогичным способом как и в первом случае, только в виде пересылки.
В данном случае, успех гарантирован.

Хочу заметить, что я не писал полностью все исходные коды, а только самые важные и необходимые. Все остальное написать очень легко. В итоге, как видите, отослать личные сообщение задним числом ВКонтакте очень просто. Всем спасибо.

Метки: нет меток

14 комментариев

Add a Comment

Your email address will not be published. Required fields are marked *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.