Целью этой статьи является показать возможности автоматизации аккаунта Вконтакте в рамках интересного рассказа.
Мысли альтер эго
И так я начал появляться на свет — постепенно, но верно обретая силы, как всякое мифическое создание — твое личное альтер эго. Пока ты будешь спать, я буду жить. Помоги же мне обрести сознание.И понадейся, что я не стану твоим мистером Хайдом.
И так я начал появляться на свет — постепенно, но верно обретая силы, как всякое мифическое создание — твое личное альтер эго. Пока ты будешь спать, я буду жить. Помоги же мне обрести сознание.
Многие из нас проводят львиную долю дня ВКонтакте, но и нам же нужно находиться офлайн — хотя бы во время сна. Но было бы интересно, если бы в то время, пока нас нет в сети, наш Контакт продолжал бы существовать — отвечать на сообщения, публиковать посты и даже добавлять интересных нам друзей.
Начнем же.
Для того, чтобы положить начало, создадим standalone-приложение.
Для этого нам нужно создать приложение в ВК. Переходим сюда, создаем. Во вновь созданном приложении во вкладке «Настройки» нам нужен ID приложения.
Далее мы используем его, чтобы получить долгоиграющий токен. Переходим по подобной ссылке: получить токен, где меняем client_id в адресной строке на id созданного приложения.
Далее, дело за кодом — используем библиотеку vk.api.php:
require_once "vk.api.php";
$config['token'] = "#наш_токен#";
define('VK_TOKEN', $config['token']);
$vk = new VK(VK_TOKEN);
Теперь нам доступны нужные методы будущего альтер эго, с помощью которых он и будет жить.
Создадим для начала простой автоматический ответ (пока в любое время, вы живете совместно, он словно отделяется из вас же).
/**
* Получаем список последних 20 сообщений
*/
$messages = $vk->request('messages.getDialogs', array(
'count' => '10',
));
/**
* Получаем сообщения, на которые мы еще не отвечали
*/
if ($message == 'привет') {
$reading = $vk->request('messages.markAsRead', array(
'peer_id' => $uid,
));
$typing = $vk->request('messages.setActivity', array(
'type' => 'typing',
'user_id' => $uid,
));
sleep(1);
$send = $vk->request('messages.send', array(
'message' => "и тебе привет х)",
'uid' => $value['uid'],
));
Теперь он будет отвечать при запущенном скрипте на сообщение «привет».
Мысли альтер эго
Медленно, но верно я начинаю жить.
Медленно, но верно я начинаю жить.
Идем дальше. Но почему пост называется именно «Цифровое бессмертие ВК»?
Создадим еще один файл, которым наполним базу данных с двумя полями — входящими сообщениями и ответами того самого нас и заполним его — внимание — всеми сообщениями, которые были в наших переписках с друзьями за все время существования акка (при желании этот список можно будет подкорректировать в любой момент, удалив ненужные сообщения).
adding_brains.php:
<?php
/**
* Автоматическое создание копии
*/
$config['token'] = "#наш_токен#";
define('VK_TOKEN', $config['token']);
$vk = new VK(VK_TOKEN);
$link = mysqli_connect("localhost","root","","digital_immortality") or die("Ошибка " . mysqli_error($link));
/**
* Получаем id всех наших друзей
*/
$friendsGet = $vk->request('friends.get', array(
'order' => hints,
));
/**
* Сортируем, делая последних - первыми, чтобы повторяющиеся вхождения затерлись более важными для нас людьми.
*/
$friends = array_reverse($friendsGet['response']);
foreach($friends as $friend_id) {
/**
* Получаем общее количество сообщений друга
*/
$forOffset = $vk->request('messages.getHistory', array(
'count' => '0',
'user_id' => $friend_id,
));
$offset = 0;
/**
* И проходимся по всем сообщениям
*/
while ($offset <= $forOffset['response'][0]) {
$messages = $vk->request('messages.getHistory', array(
'offset' => $offset,
'count' => '200',
'user_id' => $friend_id,
'rev' => 1,
));
foreach ((array)$messages['response'] as $key => $value) {
if ($value['out'] == 0) {
$out[] = $value['body'];
}
if ($value['out'] == 1 && !empty($out)) {
$input = array_pop($out);
$output = $value['body'];
$out = '';
}
if (!empty($question) && !empty($question)) {
/**
* Занося их в базу
*/
$insert = $link->query("INSERT INTO `basis` SET `input` = '".mysqli_real_escape_string($link, $input)."', `output` = '".mysqli_real_escape_string($link, $output)."' ON DUPLICATE KEY UPDATE output=output") or die("Возникла проблемка... " . mysqli_error($link));
}
}
$offset += 200;
}
}
После этого запускаем скрипт один раз, и он заполняется сообщениями. В том же скрипте, что выше, меняем часть с ответом на следующую:
$result = $link->query("SELECT * FROM basis");
while ($row = mysqli_fetch_assoc($result)) {
if ($row['question'] == $message) {
$send = $vk->request('messages.send', array(
message' => $row['answer'],
uid' => $value['uid'],
));
}
}
И вешаем на крон. Все, наша цифровая копия будет вместе с нами, когда мы онлайн :) Ставим одну простую проверку на выражение выше:
Мысли альтер эго
Я отделяюсь!
Я отделяюсь!
$online = $vk->request('users.get', array(
fields' => 'online',
));
if ($online == 0) {
$vk->request('account.setOnline');
$result = $link->query("SELECT * FROM basis");
while ($row = mysqli_fetch_assoc($result)) {
if ($row['question'] == $message) {
$send = $vk->request('messages.send', array(
message' => $row['answer'],
uid' => $value['uid'],
));
}
}
Мысли альтер эго
А теперь повеселимся.
А теперь повеселимся.