Обьективно: Почему VK API говно (бомбит)

ItsOlegDm

Average Plastic Memories fan
Модератор

ItsOlegDm

Average Plastic Memories fan
Модератор
Статус
Offline
Регистрация
27 Июн 2021
Сообщения
20
Лайки
250
Извиняюсь, накипело.
Чисто для визуального сравнения:

Вот так выглядит функция отправки сообщения с картинкой в Telegram чат
PHP:
    public function tgBotMessage($image, $message, $id, $mid) {
          
        $bot_url    = 'https://api.telegram.org/bot' . $this->token . '/';
        $url        = $bot_url . 'sendPhoto?chat_id=' . $id ;
        $post_fields = array('chat_id'   => $chat_id,
            'photo'     => new CURLFile($image),
            'reply_to_message_id' => $mid
        );
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            "Content-Type:multipart/form-data"
        ));
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
        $output = curl_exec($ch);
    }
А теперь функция которая делает АБСОЛЮТНО ТО ЖЕ САМОЕ, но уже в вк.
Единственное - она не реплаит сообщение с командой.

PHP:
function sendphoto($group_id, $access_token, $image) {
    // Получение сервера vk для загрузки изображения.
    $server = file_get_contents('https://api.vk.com/method/photos.getWallUploadServer?group_id=' . $group_id . '&access_token=' . $access_token . '&v=5.131');
    $server = json_decode($server);
  
    if (!empty($server->response->upload_url)) {
        // Отправка изображения на сервер.
        if (function_exists('curl_file_create')) {
            $curl_file = curl_file_create($image);
        } else {
            $curl_file = '@' . $image;
        }
  
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $server->response->upload_url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, array('photo' => $curl_file));
        $upload = curl_exec($ch);
        curl_close($ch);
  
        $upload = json_decode($upload);
  
        if (!empty($upload->server)) {
            $save = file_get_contents('https://api.vk.com/method/photos.saveWallPhoto?group_id=' . $group_id . '&server=' . $upload->server . '&photo=' . stripslashes($upload->photo) . '&hash=' . $upload->hash . '&access_token=' . $access_token . '&v=5.131');
            $save = json_decode($save);


Вы меня извините, но что сука за инвалид писал вкапи? Почему апи самой крупной российской соц-сети ничего не умеет делать сама?

Для тех кто не понял.
Для того, чтоб отправить сообщение с картинкой в тг мне нужно:
  • Отправить один запрос на тгапи указав айди чата, токен и ссылку на картинку которая лежит на моём сервере.

Для того, чтоб отправить сообщение с картинкой в вк, мне нужно:
  • Отправить запрос на вкапи для получения сенрвера загрузки изоображения/
  • Отправить запрос на этот сервер чтоб загрузить картинку
  • Сложить из ответа апишки ссылку в формате vk.com/photo123_123
  • Отправить запрос на вкапи указав айди чата и ссылку на картинку на сервере вк.
  • В каждом из запросов на вкапи должны быть указаны: Токен, и ВЕРСИЯ СУКА АПИ которую я юзаю


Кстати, отправку сообщения в тг можно вообще уместить в 1 строку:
PHP:
    file_get_contents('https://api.telegram.org/bot' . $token . '/sendPhoto?chat_id=' . $chat_id . '&photo=' . $photo_url . '&reply_to_message_id=' . $mid);

Другой пример:

При получении изоображения вк дает ссылки на разные размеры (где-то ужато сильнее, где-то слабее). Сами размеры у каждой картинки свои, + они выдаются не в порядке возрастания/спадания, а вперемешку.
В итоге, чтоб просто получить ссылку на картинку в максимальном разрешении, приходится удалять все лишнее из ответа оставляя только ссылки на картинку, и сортировать их самостоятельно чтоб забрать самое большое значение. Спасибо вк.

Я в своём пхпшном говнокоде решал эту проблему так. ($arr - массив из ответа vkapi)
PHP:
$delete_keys = array('album_id', 'date', 'id', 'owner_id', 'has_tags', 'height', 'text', 'user_id', 'width');
$arr = array_diff_key($arr['response']['items'][$rand_keys], array_flip($delete_keys));
sort($arr,SORT_NATURAL);
$img = array_pop($arr);

тем временем с тг апи одна строка:
PHP:
        $linkarr = array_pop($arr["message"]["photo"]);

Короче, я так долго могу бомбить. У вк вообще всё работает через жопу и костыли. Будь то мобильное приложение, мобильный сайт, пк версия сайта, апи или любой другой продукт. Гарантирую, без костылей в его работе не обойдётся.

Извиняюсь за бомбёжку, просто в очередной раз при надобности что-то сделать с вк, появляется непреодолимое желание кричать.

Попрошу не бить за говнокод. Мне пофиг, честно. Главное что работает.
 
Последнее редактирование:

DontWorry

По всем вопросам.
Администратор

DontWorry

По всем вопросам.
Администратор
Статус
Online
Регистрация
14 Мар 2021
Сообщения
288
Лайки
2,533
Извиняюсь, накипело.
Чисто для визуального сравнения:

Вот так выглядит функция отправки сообщения с картинкой в Telegram чат
PHP:
    public function tgBotMessage($image, $message, $id, $mid) {
         
        $bot_url    = 'https://api.telegram.org/bot' . $this->token . '/';
        $url        = $bot_url . 'sendPhoto?chat_id=' . $id ;
        $post_fields = array('chat_id'   => $chat_id,
            'photo'     => new CURLFile($image),
            'reply_to_message_id' => $mid
        );
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            "Content-Type:multipart/form-data"
        ));
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
        $output = curl_exec($ch);
    }
А теперь функция которая делает АБСОЛЮТНО ТО ЖЕ САМОЕ, но уже в вк.
Единственное - она не реплаит сообщение с командой.

PHP:
function sendphoto($group_id, $access_token, $image) {
    // Получение сервера vk для загрузки изображения.
    $server = file_get_contents('https://api.vk.com/method/photos.getWallUploadServer?group_id=' . $group_id . '&access_token=' . $access_token . '&v=5.131');
    $server = json_decode($server);
 
    if (!empty($server->response->upload_url)) {
        // Отправка изображения на сервер.
        if (function_exists('curl_file_create')) {
            $curl_file = curl_file_create($image);
        } else {
            $curl_file = '@' . $image;
        }
 
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $server->response->upload_url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, array('photo' => $curl_file));
        $upload = curl_exec($ch);
        curl_close($ch);
 
        $upload = json_decode($upload);
 
        if (!empty($upload->server)) {
            $save = file_get_contents('https://api.vk.com/method/photos.saveWallPhoto?group_id=' . $group_id . '&server=' . $upload->server . '&photo=' . stripslashes($upload->photo) . '&hash=' . $upload->hash . '&access_token=' . $access_token . '&v=5.131');
            $save = json_decode($save);


Вы меня извините, но что сука за инвалид писал вкапи? Почему апи самой крупной российской соц-сети ничего не умеет делать сама?

Для тех кто не понял.
Для того, чтоб отправить сообщение с картинкой в тг мне нужно:
  • Отправить один запрос на тгапи указав айди чата, токен и ссылку на картинку которая лежит на моём сервере.

Для того, чтоб отправить сообщение с картинкой в вк, мне нужно:
  • Отправить запрос на вкапи для получения сенрвера загрузки изоображения/
  • Отправить запрос на этот сервер чтоб загрузить картинку
  • Сложить из ответа апишки ссылку в формате vk.com/photo123_123
  • Отправить запрос на вкапи указав айди чата и ссылку на картинку на сервере вк.
  • В каждом из запросов на вкапи должны быть указаны: Токен, и ВЕРСИЯ СУКА АПИ которую я юзаю


Кстати, отправку сообщения в тг можно вообще уместить в 1 строку:
PHP:
    file_get_contents('https://api.telegram.org/bot' . $token . '/sendPhoto?chat_id=' . $chat_id . '&photo=' . $photo_url . '&reply_to_message_id=' . $mid);

Другой пример:

При получении изоображения вк дает ссылки на разные размеры (где-то ужато сильнее, где-то слабее). Сами размеры у каждой картинки свои, + они выдаются не в порядке возрастания/спадания, а вперемешку.
В итоге, чтоб просто получить ссылку на картинку в максимальном разрешении, приходится удалять все лишнее из ответа оставляя только ссылки на картинку, и сортировать их самостоятельно чтоб забрать самое большое значение. Спасибо вк.

Я в своём пхпшном говнокоде решал эту проблему так. ($arr - массив из ответа vkapi)
PHP:
$delete_keys = array('album_id', 'date', 'id', 'owner_id', 'has_tags', 'height', 'text', 'user_id', 'width');
$arr = array_diff_key($arr['response']['items'][$rand_keys], array_flip($delete_keys));
sort($arr,SORT_NATURAL);
$img = array_pop($arr);

тем временем с тг апи одна строка:
PHP:
        $linkarr = array_pop($arr["message"]["photo"]);

Короче, я так долго могу бомбить. У вк вообще всё работает через жопу и костыли. Будь то мобильное приложение, мобильный сайт, пк версия сайта, апи или любой другой продукт. Гарантирую, без костылей в его работе не обойдётся.

Извиняюсь за бомбёжку, просто в очередной раз при надобности что-то сделать с вк, появляется непреодолимое желание кричать.

Попрошу не бить за говнокод. Мне пофиг, честно. Главное что работает.
Дуров красавчик на самом деле.
 

DontWorry

По всем вопросам.
Администратор

DontWorry

По всем вопросам.
Администратор
Статус
Online
Регистрация
14 Мар 2021
Сообщения
288
Лайки
2,533

ItsOlegDm

Average Plastic Memories fan
Модератор

ItsOlegDm

Average Plastic Memories fan
Модератор
Статус
Offline
Регистрация
27 Июн 2021
Сообщения
20
Лайки
250
Так, я ни одного проекта их нормального не знаю. Так что лично я - не удивляюсь :)
достаточно знать, что в руках маилру вк потихоньку начал превращатся в черт пойми что с кучей платного контента.
 

Talomir

Местный
Местный

Talomir

Местный
Местный
Статус
Offline
Регистрация
20 Мар 2021
Сообщения
17
Лайки
333
vk mail.ru - отстой, сама идея и реализация - отстой, просто посмотрите как движок этого форума профессионально сделан, зачем ещё VK?
 

Slider

Пользователь

Slider

Пользователь
Статус
Offline
Регистрация
10 Июн 2021
Сообщения
24
Лайки
29
У меня дилетантский вопрос (я реально в подобном коде плохо понимаю), а не связана ли разница в первом примере с тем, что ТГ хранит картинку условно локально, замусоривая память устройства, а вк всегда на своих серверах. И не все проекты мейла плохи, беда в том что всё хорошее они закрввают, а всё что развивают говно. Тот-же Молоток был норм мне нравился, но инвесторы сказали убыточен, под нож, мейл диск был нормальным, убыточен под нож со всей инфой пользователей... Ну и так далее... Зато Амиго до последнего тянули...
 

ItsOlegDm

Average Plastic Memories fan
Модератор

ItsOlegDm

Average Plastic Memories fan
Модератор
Статус
Offline
Регистрация
27 Июн 2021
Сообщения
20
Лайки
250
У меня дилетантский вопрос (я реально в подобном коде плохо понимаю), а не связана ли разница в первом примере с тем, что ТГ хранит картинку условно локально, замусоривая память устройства, а вк всегда на своих серверах. И не все проекты мейла плохи, беда в том что всё хорошее они закрввают, а всё что развивают говно. Тот-же Молоток был норм мне нравился, но инвесторы сказали убыточен, под нож, мейл диск был нормальным, убыточен под нож со всей инфой пользователей... Ну и так далее... Зато Амиго до последнего тянули...
Ну вообще меил диск жив, а Амиго закрыли давно...

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

Akilla

На моих руках тысяча порезов
Местный

Akilla

На моих руках тысяча порезов
Местный
Статус
Offline
Регистрация
19 Мар 2021
Сообщения
13
Лайки
130
достаточно знать, что в руках маилру вк потихоньку начал превращатся в черт пойми что с кучей платного контента.
Да давно уже это началось... Помню как все возмущались что музыка платная стала, а теперь на видеоролике длинною 10 секунд вставляют рекламу на 5 секунд. Лучше бы вместо рекламы пофиксили проблемы в плеере, включаешь 1080 а ему еще одуплить надо что реально ли ты захотел посмотреть видео в 1080 и потратить целых N мб трафика на это?
 

ItsOlegDm

Average Plastic Memories fan
Модератор

ItsOlegDm

Average Plastic Memories fan
Модератор
Статус
Offline
Регистрация
27 Июн 2021
Сообщения
20
Лайки
250
Да давно уже это началось... Помню как все возмущались что музыка платная стала, а теперь на видеоролике длинною 10 секунд вставляют рекламу на 5 секунд. Лучше бы вместо рекламы пофиксили проблемы в плеере, включаешь 1080 а ему еще одуплить надо что реально ли ты захотел посмотреть видео в 1080 и потратить целых N мб трафика на это?
хах, ну, рекламу я не вижу (спасибо адблоку и тостеру), а вот про качество видео жизненно.
 

Slider

Пользователь

Slider

Пользователь
Статус
Offline
Регистрация
10 Июн 2021
Сообщения
24
Лайки
29
Ну вообще меил диск жив, а Амиго закрыли давно...

По поводу хранения данных телеграмом ,речь шла о удобстве выгрузки файла на их сервер, а уж будет ли он потом этот файл сохранять на телефоне юзера - другой разговор
Понял вас, спасибо за ответ. А Мейл диск который существует сейчас это новый, изначальный созданный в противовес Яндекс диску в энному году они потом прибили.
 
Сверху