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
  • 18 198
  • 28
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

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

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

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

          Сергей Котов@Сергей Котов 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

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

    Sergey Гость 3 апреля 2021 22:29

    Сергей можно ли узнать будет ли статья?
    1. Сергей Котов

      Сергей Котов@Сергей Котов 4 апреля 2021 11:40

      Будет, ориентировочно апрель - май
      1. Fruit

        Fruit 20 апреля 2021 12:10

        Ждём. 
  8. Гость ALFRED

    Гость ALFRED Гость 21 апреля 2021 21:59

    Видимо сменился API в ВК, скрипт вообще перестал запускаться, смена токена тоже не помогает. О новой версии новость радует.
  9. Lomeris

    Lomeris Гость 4 августа 2021 13:37

    dynamic_cap Файл повреждён или имеет неверный формат
  10. Dwizhok

    Dwizhok Гость 20 августа 2021 13:43

    Сергей, пожалуйста обнови скрипт. Очень ждём. Не работает он ((
    1. Сергей Котов

      Сергей Котов@Сергей Котов 20 августа 2021 20:43

      будет новая статья по этому поводу, нужно подождать
  11. Гость ALFRED

    Гость ALFRED Гость 29 сентября 2021 00:02

    в середине апреля обложка ломалась из-за изменения высоты рисунка и нужно было добавить для правильной работы скрипта дополнительную строку   'crop_y2' => '530' определяющий высоту и полностью выглядело таким образом:
    $getUrl = getApiMethod('photos.getOwnerCoverPhotoUploadServer', array(
       'group_id' => $group_id,
        'crop_x2' => '1590',
        'crop_y2' => '530'
    ));
    в сентябре вновь поломка, теперь посыпались ошибки с получением юзеров. Вот такая картинка. Если у кого-то есть решение отпишитесь плиз.
    Warning: Invalid argument supplied for foreach() in D:\OpenServer\domains\..........\index.php on line 123
    Warning: Invalid argument supplied for foreach() in D:\OpenServer\domains\..........\index.php on line 127
    в файле index.php отрывок кода с этими строками:
    120    if($last_subscriber) {
    121        $last_subscriber = json_decode($last_subscriber, true);
    122        
    123        foreach($last_subscriber['response']['items'] as $user ) {
    124            $last_users[] = $user; // добавляем юзера к юзерам
    125        }
    126        
    127        foreach ($last_users as $k => $last_user){
    128            // Скачиваем фото
    129            copy ($last_user['photo_200'], BASEPATH.'cover/last_subscriber_'.($k+1).'.jpg');
    130        }
  12. Гость ALFRED

    Гость ALFRED Гость 2 октября 2021 10:48

    Ошибка нашлась совершенно в другом месте.
    после проверки строками после 121 строки:
    echo '<pre>';
    var_dump($last_subscriber);
    echo '</pre>';die();
    как выяснилось надо было лишь поменять версию используемого API   было $api_version = '5.65';смотрим и ставим актуальный на сегодняшний день $api_version = '5.81';  Все заработало.
  13. Гость Александр

    Гость Александр Гость 4 декабря 2021 05:23

    Спасибо Сергею Котову!
    Скрипт работает отлично.

  14. Гость ALFRED

    Гость ALFRED Гость 1 марта 2022 09:35

    снова поломка 25 февраля

    Warning: Invalid argument supplied for foreach() in D:\OpenServer\domains\..........\index.php on line 123
    Warning: Invalid argument supplied for foreach() in D:\OpenServer\domains\..........\index.php on line 127

    как и ранее проверил таким методом как и выше, в файле index.php после 121 строки вставил:

    echo '<pre>';
    var_dump($last_subscriber);
    echo '</pre>';die();

    вот результат:

     Показать / Скрыть текст
    array(1) {
      ["error"]=>
      array(3) {
        ["error_code"]=>
        int(5)
        ["error_msg"]=>
        string(72) "User authorization failed: access_token was given to another ip address."
        ["request_params"]=>
        array(7) {
          [0]=>
          array(2) {
            ["key"]=>
            string(6) "method"
            ["value"]=>
            string(17) "groups.getMembers"
          }
          [1]=>
          array(2) {
            ["key"]=>
            string(5) "oauth"
            ["value"]=>
            string(1) "1"
          }
          [2]=>
          array(2) {
            ["key"]=>
            string(5) "count"
            ["value"]=>
            string(1) "1"
          }
          [3]=>
          array(2) {
            ["key"]=>
            string(6) "fields"
            ["value"]=>
            string(9) "photo_200"
          }
          [4]=>
          array(2) {
            ["key"]=>
            string(8) "group_id"
            ["value"]=>
            string(9) "12121212121"
          }
          [5]=>
          array(2) {
            ["key"]=>
            string(4) "sort"
            ["value"]=>
            string(9) "time_desc"
          }
          [6]=>
          array(2) {
            ["key"]=>
            string(1) "v"
            ["value"]=>
            string(5) "5.131"
          }
        }
      }
    }

    Сменил токен и версию API, безрезультатно.

    Какие есть соображения по данной проблеме?

  15. Гость ALFRED

    Гость ALFRED Гость 4 марта 2022 19:02

    Сергей Котов,

    Скажите пожалуйста, в будущем обновленную динамическую обложку планируете?

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

    Сергей Котов@Сергей Котов 12 марта 2022 13:07

    Гость ALFRED, Да
  17. Гость ALFRED

    Гость ALFRED Гость 25 марта 2023 21:27

    Здравствуйте, будет ли обновленная или расширенная версия обложки? 

  18. Гость ALFRED

    Гость ALFRED Гость 10 апреля 2025 10:01

    Планируете ли вернуться к динамической обложке?

  19. Гость ALFRED

    Гость ALFRED Гость 15 апреля 2025 20:01

    Как отключить вывод результата cron в папку modules/cron в Open Server?
    Крон запускает несколько запросов в минуту и результаты записываются в файл в папке modules/cron. За пару дней там скапливается порядочное количество файлов.

{login}

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

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

Рекламный блок
  • Новости
  • Платная категория
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
    • JS
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
    • Модули
    • Хаки
  • Магазин
    • Скрипты
Комментарии
Генерация всевозможных комбинаций из набора символов — комбинаторика в Python (itertools)
Qwertyuiopasdfghjklzxcvbnm 1234567890
Система комментариев на PHP
Полезная статья
Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]
Класс, хорошая тема
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Как отключить вывод результата cron в папку modules/cron в Open Server? Крон запускает несколько
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Планируете ли вернуться к динамической обложке?
Все комментарии..
Полный список последних комментариев
Лучшие новости
Всего публикаций: 115
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 937
Добавлено за сутки: +0
Пользователей: 4124
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

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

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

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

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

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

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