Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее » KOTOFF.net
KOTOFF.NET
  • Главная
  • Пользователи
  • Контакты
  • Статистика
  • Правила
  • О нас
  • Вход / Регистрация

Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее

Статьи / PHP

 

Для установки динамической шапки требуется совсем немного, мы будем использовать компьютер как сервер, в дальнейшем сам скрипт можете установить на купленный сервер или обратиться в нашу группу для установки вашей шапки на ваше сообщество -> В личные сообщения сообщества KotOFF

Создание шапки происходит в 4 этапа, о них по порядку 

1. Создание самой шапки.
2. Создание скрипта.
3. Установка OpenServer.
4. Настройка сервера и шапки.


1. Создание самой шапки.

Шапка должна иметь вот такой вид примерно:

На шапке заранее размещаете будущие отделы для аватарок и имен тех пользователей, который мы будем определять с помощью скрипта 

Для создания такой шапки можно обратиться в группу, которая делает очень дешево такие шапки и оформления для сообществ — > В личные сообщения сообщества Тот самый Лев

На этом с 1 пунктом закончим, переходим к созданию скрипта

2. Создание скрипта.

Этот процесс самый трудоемкий, поэтому если Вы не хотите вдаваться в подробности, то можете сразу скачать архив и перейти к 3 и 4 пункту настройки.

dynamic_cap.rar

Создаем файл с расширением api.php (Скрипт работает на версии php +5.6) и переходим в редактор Sublime Text или любой другой и вставляем туда этот код:

<?php

require_once('config.php');

function DownloadImages($url, $filename){
    $ch = curl_init($url);
    $fp = fopen($filename, 'wb');
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_exec($ch);
    curl_close($ch);
    fclose($fp);
}  

function getPOST($url, $post) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url); //урл сайта к которому обращаемся 
    curl_setopt($ch, CURLOPT_HEADER, false); //выводим заголовки
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); //теперь curl вернет нам ответ, а не выведет
    curl_setopt($ch, CURLOPT_POST, true); //передача данных методом POST
    curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post); //тут переменные которые будут переданы методом POST
    $result = curl_exec($ch);
    curl_close($ch);
    
    return $result;
}
    
function getApiMethod($method_name, $params) {
    global $access_token;
    global $api_version;

    // Сделаем проверки на токен и версию апи, если их не указали, добавим.
    if (!array_key_exists('access_token', $params) && !is_null($access_token)) {
        $params['access_token'] = $access_token;
    }

    if (!array_key_exists('v', $params) && !is_null($api_version)) {
        $params['v'] = $api_version;
    }
    
    // Сортируем массив по ключам
    ksort($params);
    
    // Отправим запрос
    return(getPOST('https://api.vk.com/method/'.$method_name, $params));
}

?>

сохраняем и создаем еще 1 файл с названием config.php и вставляем в него следующий код:

<?php

// KOTOFF.NET 
// Здесь вводим токен своего ПРОФИЛЯ а не сообщества. Получить можно здесь https://vkhost.github.io/
$access_token = 'ТОКЕН';
// ID группы
$group_id = 'ИД ГРУППЫ';
// Круглые аватарки [true - круглые false - квадратные]
$roundingOff = true;
// Шрифт текста (положить свой в папку font)
$font = "UniNeue-HeavyItalic.otf"; 

/* ----------------------- ПОСЛЕДНИЙ ПОДПИСАВШИЙСЯ ----------------------- */

// Показывать последнего подписчика [true - показывать false - нет]
$show_last_subscribe = true; 
// Размер шрифта
$last_subscribe_font_size = 20;
// Цвет текста
$last_subscribe_font_color = '255,255,255';
// Ширина аватарки
$last_subscribe_width = 137;
// Высота аватарки
$last_subscribe_height = 137;
// Координаты аватарки по оси Х
$last_subscribe_photo_pixel_x = 44;
// Координаты аватарки по оси Y
$last_subscribe_photo_pixel_y = 66;
// Координаты имени и фамилии по оси Х
$last_subscribe_text_pixel_x = 108;
// Координаты имени и фамилии по оси Y
$last_subscribe_text_pixel_y = 235;


/* ------------------------ ТОП ПО КОЛ-ВУ ЛАЙКОВ ------------------------ */

// Показывать пользователя который за сегодня набрал большее кол-во лайков к комментариям [true - показывать false - нет]
$show_top_like = true; 
// Размер шрифта
$top_like_font_size = 20;
// Цвет текста
$top_like_font_color = '255,255,255';
// Ширина аватарки
$top_like_width = 137;
// Высота аватарки
$top_like_height = 137;
// Координаты аватарки по оси Х
$top_like_photo_pixel_x = 229;
// Координаты аватарки по оси Y
$top_like_photo_pixel_y = 66;
// Координаты имени и фамилии по оси Х
$top_like_text_pixel_x = 295;
// Координаты имени и фамилии по оси Y
$top_like_text_pixel_y = 235;


/* ----------------------- ТОП ПО КОЛ-ВУ КОММЕНТОВ ----------------------- */

// Показывать пользователя который за сегодня оставил большее кол-во комментариев [true - показывать false - нет]
$show_top_comments = true;
// Размер шрифта
$top_comments_font_size = 20;
// Цвет текста
$top_comments_font_color = '255,255,255';
// Ширина аватарки
$top_comments_width = 137;
// Высота аватарки
$top_comments_height = 137;
// Координаты аватарки по оси Х
$top_comments_photo_pixel_x = 416;
// Координаты аватарки по оси Y
$top_comments_photo_pixel_y = 66;
// Координаты имени и фамилии по оси Х
$top_comments_text_pixel_x = 485;
// Координаты имени и фамилии по оси Y
$top_comments_text_pixel_y = 235;

// Домашняя директория скрипта
define('BASEPATH', str_replace('\\', '/', dirname(__FILE__)) . '/');
// Временная зона
date_default_timezone_set('Europe/Moscow');
// Путь к финальному изображению. 
// Минимальный размер обложки 795 x 200
$output_header = BASEPATH.'header/output.png';
// Путь к изображению которое будет браться за основу. 
// Минимальный размер обложки 795 x 200
$image_bg = BASEPATH.'header/bg.jpg';
// Версия API
$api_version = "5.63";

?>


В данном коде нужно указать токен и ID самой группы. Токен должен быть пользовательский
Пример: 

$access_token = 'd398d012e185e01edf145450b7899d90b49a6dfee30af063a788deb6a33219249db3463664cd4a0354a57';
$group_id = '176771278';




Теперь создаем директорию (папку) с названием header и туда загружаем нашу шапку с таким навзанием — bg.jpg

После этого нужно создать еще 1 папку, где будут хранится наши шрифты для имен пользователей, назовем ее font и загружаем туда наши шрифты, скачать можно ниже

font.rar

Возвращаемся туда, где создавали наши файлы и создаем финальный файл под названием index.php и давайте более детальнее разберем этот код

<?php

require_once('config.php');
require_once('api.php');

header('Content-type: text/html; charset=utf-8');

// Получим текущую дату
$date_today = date('Ymd');

if($show_top_like or $show_top_comments) {
    setLog('Получаю посты группы');
    // Получим посты со стены
    // больше 100 постов получать нет смысла, так как в вк ограничение
    // разрешено постить не больше 50 постов в сутки.
    $wall_get = getApiMethod('wall.get', array(
        'owner_id' => '-'.$group_id,
        'count' => '50'
    ));

    if($wall_get) {
        $wall_get = json_decode($wall_get, true);

        $countlike = array();
        $countcomments = array();
        
        foreach($wall_get['response']['items'] as $wall) {
            
            // Получим кол-во комментариев к посту
            $count = $wall['comments']['count'];
            $offset = 0;

            if($count > 0) { 
                // Получим все комментарии, так как их может быть больше 100.
                while($offset < $count){
                    setLog('Получаю кол-во комментариев к посту '.$wall['id']);
                    // Отправим запрос на получение комментариев
                    $comments_get = getApiMethod('wall.getComments', array(
                        'owner_id' => '-'.$group_id,
                        'post_id' => $wall['id'],
                        'need_likes' => '1',
                        'count' => '100',
                        'offset' => $offset
                    ));
                    
                    if($comments_get) {
                        $comments_get = json_decode($comments_get, true);

                        foreach($comments_get['response']['items'] as $comments) {
                            
                            if($date_today == date('Ymd', $comments['date'])) {
                                // В двух словах мы заносим данные в массив, суммируя их
                                if(!isset($countcomments[$comments['from_id']]) and !isset($countlike[$comments['from_id']])) {
                                    $countcomments[$comments['from_id']] = 1;
                                    $countlike[$comments['from_id']] = $comments['likes']['count'];   
                                } else {
                                    $countcomments[$comments['from_id']]++;
                                    $countlike[$comments['from_id']] += $comments['likes']['count'];
                                } 
                                var_dump($comments);
                            }
                            
                        }  
                    }

                    if($offset<$count) 
                        $offset = $offset + 100;
                }
            }

        }
    }
}



if($show_top_like) {
$day_like_top = 0;


if(count($countlike) > 0) {
    // Теперь найдем кто суммарно получил большее кол-во лайков к комментариям
    $value = max($countlike); 
    $day_like_top = array_search($value, $countlike);
    setLog('Получаю ID кто сумарно набрал большее кол-во лайков к комментариям '.$day_like_top);

    if($day_like_top > 0) {
        $user_top_like = getApiMethod('users.get', array(
            'user_ids' => $day_like_top,
            'fields' => 'photo_200'
        ));

        if($user_top_like) {
            $user_top_like = json_decode($user_top_like, true);

            $top_like_name = $user_top_like['response'][0]['first_name'];
            $top_like_lastname = $user_top_like['response'][0]['last_name'];
            $top_like_photo = $user_top_like['response'][0]['photo_200'];
            
            // Скачиваем фото
            if(!empty($top_like_name) && !empty($top_like_lastname) && !empty($top_like_photo)){
                DownloadImages($top_like_photo, 'header/top_likes.jpg');
            }
        }
    }
}

}


if($show_top_comments) {
    $day_comment_top = 0;




if(count($countcomments) > 0) {
        // Теперь найдем кто суммарно написал больше всех комментариев
        $value = max($countcomments); 
        $day_comment_top = array_search($value, $countcomments);
        setLog('Получаю ID кто суммарно написал больше всех комментариев '.$day_comment_top);

        if($day_comment_top > 0) {
            $user_top_comment = getApiMethod('users.get', array(
                'user_ids' => $day_comment_top,
                'fields' => 'photo_200'
            ));

            if($user_top_comment) {
                $user_top_comment = json_decode($user_top_comment, true);

                $top_comment_name = $user_top_comment['response'][0]['first_name'];
                $top_comment_lastname = $user_top_comment['response'][0]['last_name'];
                $top_comment_photo = $user_top_comment['response'][0]['photo_200'];
                
                // Скачиваем фото
                if(!empty($top_comment_name) && !empty($top_comment_lastname) && !empty($top_comment_photo)){
                    DownloadImages($top_comment_photo, 'header/top_comments.jpg');
                }
            }
        }
    }
}


if($show_last_subscribe) {
    // Теперь найдем последнего подписчика
    $last_subscribe = getApiMethod('groups.getMembers', array(
                'group_id' => $group_id,
                'sort' => 'time_desc',
                'count' => '1',
                'fields' => 'photo_200',
                'access_token' => $access_token
            ));

    if($last_subscribe) {
        $last_subscribe = json_decode($last_subscribe, true);

        $members_count = $last_subscribe['response']['count'];
        $last_subscribe_firstname = $last_subscribe['response']['items'][0]['first_name'];
        $last_subscribe_lastname = $last_subscribe['response']['items'][0]['last_name'];
        $last_subscribe_photo = $last_subscribe['response']['items'][0]['photo_200'];

        setLog('Получаю последнего вступившего в группу '.$last_subscribe_firstname.' '.$last_subscribe_lastname);
        
        // Скачиваем фото
        if(!empty($last_subscribe_firstname) && !empty($last_subscribe_lastname) && !empty($last_subscribe_photo)){
            DownloadImages($last_subscribe_photo, 'header/last_subscribe.jpg');
        }

    }
}
sleep(3);
if($show_weather){
    $ResultWeatherApi = getPOST('http://api.openweathermap.org/data/2.5/weather', array(
        'id' => $weather_city_id,
        'units' => 'metric',
        'CNT' => '1',
        'lang' => 'ru',
        'appid' => $weather_api_id
    ));

    $s = array(
        'id' => $weather_city_id,
        'units' => 'metric',
        'CNT' => '1',
        'lang' => 'ru',
        'appid' => $weather_api_id
    );
}

// -----------------------------------------------------------------------------
// --------------------------------- РИСОВАНИЕ ---------------------------------
// -----------------------------------------------------------------------------
setLog('Создание обложки');

$draw = new ImagickDraw(); 
$bg = new Imagick($image_bg);
$draw->setFont(BASEPATH."/font/".$font);
$draw->setTextAlignment(Imagick::ALIGN_CENTER);

// Последний подписчик
if($show_last_subscribe) {
    $file_name = BASEPATH.'header/last_subscribe.jpg';

    if(file_exists($file_name) && $show_last_subscribe) {
        $last_subscribe_photo = new Imagick($file_name);
        if($roundingOff==true) {
            RoundingOff($last_subscribe_photo, $last_subscribe_width,$last_subscribe_height);
        }

        $draw->setFontSize($last_subscribe_font_size);
        $draw->setFillColor("rgb(".$last_subscribe_font_color.")");

        $bg->compositeImage($last_subscribe_photo, Imagick::COMPOSITE_DEFAULT, $last_subscribe_photo_pixel_x, $last_subscribe_photo_pixel_y);
        $bg->annotateImage($draw, $last_subscribe_text_pixel_x, $last_subscribe_text_pixel_y, 0, mb_strtoupper($last_subscribe_firstname."\n".$last_subscribe_lastname, 'UTF-8'));
    }
}

// Топ по комментам
$file_name = BASEPATH.'header/top_comments.jpg';

if(file_exists($file_name) && $show_top_comments) {
    $top_comments_photo = new Imagick($file_name);
    if($roundingOff==true) {
        RoundingOff($top_comments_photo, $top_comments_width,$top_comments_height);
    }

    $draw->setFontSize($top_comments_font_size);
    $draw->setFillColor("rgb(".$top_comments_font_color.")");

    $bg->compositeImage($top_comments_photo, Imagick::COMPOSITE_DEFAULT, $top_comments_photo_pixel_x, $top_comments_photo_pixel_y);
    $bg->annotateImage($draw, $top_comments_text_pixel_x, $top_comments_text_pixel_y, 0, mb_strtoupper($top_comment_name."\n".$top_comment_lastname, 'UTF-8'));
}

// Топ по лайкам
$file_name = BASEPATH.'header/top_likes.jpg';

if(file_exists($file_name) && $show_top_like) {
    $top_like_photo = new Imagick($file_name);
    if($roundingOff==true) {
        RoundingOff($top_like_photo, $top_like_width,$top_like_height);
    }

    $draw->setFontSize($top_like_font_size);
    $draw->setFillColor("rgb(".$top_like_font_color.")");

    $bg->compositeImage($top_like_photo, Imagick::COMPOSITE_DEFAULT, $top_like_photo_pixel_x, $top_like_photo_pixel_y);
    $bg->annotateImage($draw, $top_like_text_pixel_x, $top_like_text_pixel_y, 0, mb_strtoupper($top_like_name."\n".$top_like_lastname, 'UTF-8'));
}

$bg->setImageFormat("png");
$bg->writeImage($output_header);

//echo '<img src="'.'header/output.png'.'">';

// -----------------------------------------------------------------------------
// --------------------------- ЗАГРУЗКА НА СЕРВЕР ------------------------------
// -----------------------------------------------------------------------------

// Получим адресс сервера
$getUrl = getApiMethod('photos.getOwnerCoverPhotoUploadServer', array(
    'group_id' => $group_id,
    'crop_x2' => '1590'
));
setLog('Получаю адресс сервера '.$getUrl);


if($getUrl) {
    $getUrl = json_decode($getUrl, true);

    $url = $getUrl['response']['upload_url'];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, array('photo' => new CURLFile($output_header, 'image/jpeg', 'image0')));
    $upload = curl_exec( $ch );
    curl_close( $ch );

    if($upload) {
        $upload = json_decode($upload, true);

        $getUrl = getApiMethod('photos.saveOwnerCoverPhoto', array(
            'hash' => $upload['hash'],
            'photo' => $upload['photo'],
        ));
        
        setLog('Загружаю обложку '.$getUrl);

        if(stripos($getUrl, 'response":{"images":[{')) {
            print_r('Успешно загрузили обложку <a href ="https://kotoff.net/ target="_blank" >kotoff.net</a></br>');
             echo '<p>*** Больше всех сегодня лайков набрал: <a href ="https://vk.com/id'.$day_like_top.'" target="_blank" >'.$top_like_name.' '.$top_like_lastname.' - '.$countlike[$day_like_top].'</a> шт.</p></br>';
            echo '<p>*** Больше всех сегодня комментариев написал: <a href ="https://vk.com/id'.$day_comment_top.'" target="_blank" >'.$top_comment_name.' '.$top_comment_lastname.' - '.$countcomments[$day_comment_top].'</a> шт.</p></br>';
              echo '<p>*** Последний подписчик <a href ="https://vk.com/id'.$day_like_top.'" target="_blank" >'.$last_subscribe_firstname.' '.$last_subscribe_lastname.'</a></p></br>';
             echo '<br><img src="'.'header/output.png'.'">';
            setLog('Загружаю обложку в '.$group_id);
        } else {
            print_r('Ошибка при загрузке обложки '.$getUrl);
            setLog('Ошибка при загрузке обложки '.$getUrl);
        }
        
    }
   
}



function RoundingOff($_imagick, $width, $height) {
    $_imagick->adaptiveResizeImage($width, $height, 100);
    $_imagick->setImageFormat('png');
        
    $_imagick->roundCornersImage(
        90, 90, 0, 0, 0
    );
}

function setLog($message) {
    $log_file_name = 'logs.txt';

    if(file_exists($log_file_name)) {
        $log = array_diff(explode("\r\n", file_get_contents($log_file_name)), array(''));
    }

    $log[] = date("m.d.Y-H:i:s").' | '.$message;

    if(file_put_contents($log_file_name, implode("\r\n", $log))) {
        return true;
    } else {
        return false;
    }
}


?>


Данный код собирает посты и с помощью циклов считает лайки, комментарии и определяет последнего вступившего. Код полностью рабочий, более детальную настройку рассмотрим в 4 пункте данной статьи. У данного скрипта есть несколько недоработок, часть из них была уже исправлена, для платных групп мы используем собственную версию скрипта. Сохраняем все файлы и переходим к 3 пункту настроек.

3. Установка OpenServer.

Для работы шапки нам потребуется сервер, а что бы не покупать и не платить деньги, мы будем использовать Open Server Panel — это портативная серверная платформа и программная среда для разработки 

Переходим на официальный сайт и скачиваем дистрибутив-> Скачать Open Server

Нам предлагают на выбор 3 версии дистрибутива (ULTIMATE PREMIUM BASIC) с различным включенным функционалом, нам подойдет самый простой — BASIC, но если есть возможность, советую скачивать ULTIMATE версию!

После скачивания, распаковываем архив в удобное для Вас место, у Вас появится папка OSPanel


Заходим в нее и запускаем наш сервер

В трее, у Вас появится красный флажок, сервер нужно запустить выбрав зеленый


После запуска, там же выбираем Папка с сайтами и открываем уже созданный каталог с сайтом localhost, удаляем все что там есть и загружаем наши созданные файлы 

Все готово, переходим к настройке и запуску. 

4. Настройка сервера и шапки.


После успешной настройки, переходим к настройке,  перейдя в браузере по адресу — http://localhost/index.php:


Если получили Warning похожий на этот:

То Вам нужно проверить правильно ли Вы указали токен профиля или ID группы, получить ID группы можно перейдя настройки сообщества

Если у Вас стоит короткое название, то просто откройте любую фотографию в группе и скопируйте ID с браузерной строки, все что после photo-ID_ЦИФРЫ (без минуса):

Если же Вы получили шапку:

Это значит что Вы сделали все правильно, давайте перейдем в группу, напишем пост, комментарий и поставим лайк:

Снова переходим на — http://localhost/index.php и смотрим что у нас получилось:


Как видим все работает, аватарки и текст можно перемещать, так как в Вашей шапке расположение может быть другое как тут например 

Для этого открываем файл config.php



И меняем координаты, это один из трудоемких процессов, так как здесь нужно будет поиграться с положением и найти те самые координаты, примерное расположение можно узнавать используя Paint, наводим курсор в верхнюю правую точку устанавливаемого аватара и ниже получаем координаты:

Это условные координаты по оси Х и Y, далее просто смещаете по несколько пикселей в одну из сторон и находите оптимальную точку.

Настройка на этом практически завершена. Осталось сделать так, что бы скрипт сам обновлял ее, допустим каждые 5 минут, заходим в настройки OpenServer из трея и выбираем вкладку планировщик задач, прописываем команду:

%progdir%\modules\wget\bin\wget.exe -q —no-cache http://localhost/index.php


И указываем тайминги, в какое время нужно запускать скрипт, мы выставили что бы скрипт запускался каждые 5 минут в любой час, день, неделю и месяц, нажимаем добавить и сохраняем, сервер сам перезагрузится и планировщик задач начнет выполнять команду в указанные временные интервалы

При желании, можете загрузить скрипт на хостинг, и использовать CRON для запуска этого скрипта в нужное время.

На этом у меня все, пишите свои комментарии, задавайте вопросы, мы постараемся ответить на них, всем динамичных шапок  smirk

dynamic_cap.rar

  • Сергей Котов
  • 19.03.2019
  • 5 294
  • 12
Python и LongPoll VK, или как запустить скрипт ВК и настроить Python, для новичков
Python и LongPoll VK, или как запустить скрипт ВК и настроить Python, для новичков
29-06-2019, 08:34, Статьи / Python
Как создать образ с Windows 7/10 USB DVD Download Tool / Media Creation Tool
Как создать образ с Windows 7/10 USB DVD Download Tool / Media Creation Tool
25-12-2018, 16:50, Статьи
Массовый взлом сообществ «ВКонтакте», что случилось на самом деле.
Массовый взлом сообществ «ВКонтакте», что случилось на самом деле.
14-02-2019, 22:07, Новости
Скрипт исключения из беседы VK и не только, написанный на PHP
Скрипт исключения из беседы VK и не только, написанный на PHP
21-02-2019, 04:04, Статьи / PHP
  1. Лев Бабаев

    Лев Бабаев@levqua 19 марта 2019 17:24

    Класс, буду использовать, спасиба Сергей Котов!

  2. AppleJack

    AppleJack@Applejack Ponyville 9 декабря 2019 21:48

    Помогите, у меня не работает бот. 

    1. Сергей Котов

      Сергей Котов@Сергей Котов 10 декабря 2019 17:28

      Как информативно, чем помогать человеку который даже не написал что не работает, какие ошибки и прочее?

    2. AppleJack

      AppleJack@Applejack Ponyville 11 декабря 2019 01:13

      Установил всё как на по инструкции. В Конфиге переименовал Токен на свой пользовательский и Вставил ид группы. Заменил bg обложку с таким же названием. Ну и менял api_version в надежде, что он заработает. К сожалению и это не помогло. 

    3. Сергей Котов

      Сергей Котов@Сергей Котов 11 декабря 2019 01:32

      Верните старую версию апи которая указана в статье, если запускаете с сервера, проверьте права на папки и выставите к ним доступ "777" на файлы "666" если не работает все равно, открыть лог ошибок сайта и посмотреть ошибку там

  3. leon985

    leon985 Гость 9 января 2020 15:21

    а как на vds поставить планировщик задач?


    1. Максим

      Максим Гость 29 апреля 2020 12:15

      Добрый день, а какая у вас используется панель для vds сервера?

  4. ALFRED

    ALFRED@ALFRED 24 ноября 2020 22:12

    в настройках index.php
    перед рисованием есть настройки для погоды с openweathermap.org
    но не нашел строк для погоды в "рисовании"
    так же нет настроек для подхвата их из config.php
    нашел скрипт один в один, что в конфиге на погоду такие строки

    // Показывать погоду [true - показывать false - нет]
    $show_weather = true; 
    // ID города - как узнать смотрите в видео  
    $weather_city_id = ' id вашего города';
    // ID приложения - как получить смотрите в видео  
    $weather_api_id = 'API полученный в openweathermap.org';
    // Размер шрифта
    $weather_font_size = 16;
    // Цвет текста
    $weather_font_color = '255,255,255';
    // Координаты аватарки по оси Х
    $weather_photo_pixel_x = 1336;
    // Координаты аватарки по оси Y
    $weather_photo_pixel_y = 280;
    // Координаты имени и фамилии по оси Х
    $weather_text_pixel_x = 1512;
    // Координаты имени и фамилии по оси Y
    $weather_text_pixel_y = 327;

    кто смог отобразить погоду на обложке ?
    поделитесь плз способом

    1. Сергей Котов

      Сергей Котов@Сергей Котов 29 ноября 2020 13:21

      Скрипт не доработан и не доведен до ума, в планах уже есть написать статью про динамическую шапку с использованием новых библиотек, вопрос времени  😊 

  5. ALFRED

    ALFRED@ALFRED 2 декабря 2020 22:30

    Спасибо, хорошая новость. Есть скрипт с использованием mysql https://vk.com/doc419902612_512160227?hash=13f1efc55af2e4f12c&dl=ec2e8bc435
    89b2681f может пригодится в работе

  6. cr1t

    cr1t Гость 28 января 2021 20:50

    Не отображает топ комментаторов и лайкеров

    1. Сергей Котов

      Сергей Котов@Сергей Котов 28 января 2021 23:04

      Скрипт сильно устарел. Будем писать новую статью с данной темой

{login}

Твой комментарий..

Заказывай!
Разработка ботов на заказ, любой сложности, обращаться:
 VK KOTOFF.net - Сообщество, в личные сообщения или по контактам указанным там 
 mail: [email protected]

  • Новости
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
  • Магазин
Комментарии
Авторизация на сайте с помощью ВК, простой и понятный способ на PHP!
В настройках приложения какой урл для редиректа указали?
Авторизация на сайте с помощью ВК, простой и понятный способ на PHP!
{"error":"invalid_request","error_description":"redirect_uri is incorrect, check application
Python и LongPoll VK, или как запустить скрипт ВК и настроить Python, для новичков
откуда наследуется peer_id - не возвращает его. Скорее всего потому, что получение peer_id идёт до
Python и LongPoll VK, или как запустить скрипт ВК и настроить Python, для новичков
Помогите, всё работает, но при отправке сообщения боту, выходит ошибка Traceback (most recent call
[VK BOT] Бот раздающий ключи Steam
keys users Но если память мне не изменяет, библиотека RB сама создает таблицы
Все комментарии..
Полный список последних комментариев
Лучшие новости
Делаем отображение статистики за день, неделю месяц и все время PHP простой и удобный способ

Делаем отображение ...

14-02-2021, 22:30
Прием авто платежей в своем боте с самым низким процентом, используем VLITO.ru

Прием авто платежей в своем ...

22-02-2021, 22:08
Всего публикаций: 47
Добавлено за сутки: +0
Записей в блоге: 0
Добавлено за сутки: +0
Комментариев: 684
Добавлено за сутки: +0
Пользователей: 3003
Добавлено за сутки: +1
Полная статистика..
Подробная статистика сайта
Loading...

Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите CTRL+Enter

Полезные ссылки
  • О проекте
  • Наши контакты
  • Администрация
  • Рекламные материалы
  • Идеи и предложения
  • Ответы на вопросы
Информация
  • Условия сделки
  • Способы оплаты
  • Поддержка / F.A.Q
  • Онлайн документация
  • Статистика сайта
  • Список пользователей
Услуги/Работа
  • Разработка ботов ВК
  • Обновление проекта
  • Консультация/поддержка
KOTOFF.net

Copyright © Footer 2019-2021. All right reserved.
KOTOFF.net - Уроки по PHP, SQL, IT новости
Быстрый вход

Используйте социальные сети для быстрой регистрации и авторизации.

Google
ВКонтакте
Яндекс
Mail.ru
Создать аккаунт / Регистрация
Авторизация

Я забыл свой пароль