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

ItsOlegDm

Местный
Друг HARD-TM

ItsOlegDm

Местный
Друг HARD-TM
Статус
Offline
Регистрация
27 Июн 2021
Сообщения
20
Лайки
251
Извиняюсь, накипело.
Чисто для визуального сравнения:

Вот так выглядит функция отправки сообщения с картинкой в 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
Сообщения
408
Лайки
2,854
Извиняюсь, накипело.
Чисто для визуального сравнения:

Вот так выглядит функция отправки сообщения с картинкой в 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
Сообщения
408
Лайки
2,854

ItsOlegDm

Местный
Друг HARD-TM

ItsOlegDm

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

Talomir

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

Talomir

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

Slider

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

Slider

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

ItsOlegDm

Местный
Друг HARD-TM

ItsOlegDm

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

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

Akilla

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

Akilla

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

ItsOlegDm

Местный
Друг HARD-TM

ItsOlegDm

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

Slider

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

Slider

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

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