- Статус
- Offline
- Регистрация
- 27 Июн 2021
- Сообщения
- 20
- Лайки
- 251
Извиняюсь, накипело.
Чисто для визуального сравнения:
Вот так выглядит функция отправки сообщения с картинкой в Telegram чат
А теперь функция которая делает АБСОЛЮТНО ТО ЖЕ САМОЕ, но уже в вк.
Единственное - она не реплаит сообщение с командой.
Вы меня извините, но что сука за инвалид писал вкапи? Почему апи самой крупной российской соц-сети ничего не умеет делать сама?
Для тех кто не понял.
Для того, чтоб отправить сообщение с картинкой в тг мне нужно:
Для того, чтоб отправить сообщение с картинкой в вк, мне нужно:
Кстати, отправку сообщения в тг можно вообще уместить в 1 строку:
Другой пример:
При получении изоображения вк дает ссылки на разные размеры (где-то ужато сильнее, где-то слабее). Сами размеры у каждой картинки свои, + они выдаются не в порядке возрастания/спадания, а вперемешку.
В итоге, чтоб просто получить ссылку на картинку в максимальном разрешении, приходится удалять все лишнее из ответа оставляя только ссылки на картинку, и сортировать их самостоятельно чтоб забрать самое большое значение. Спасибо вк.
Я в своём пхпшном говнокоде решал эту проблему так. ($arr - массив из ответа vkapi)
тем временем с тг апи одна строка:
Короче, я так долго могу бомбить. У вк вообще всё работает через жопу и костыли. Будь то мобильное приложение, мобильный сайт, пк версия сайта, апи или любой другой продукт. Гарантирую, без костылей в его работе не обойдётся.
Извиняюсь за бомбёжку, просто в очередной раз при надобности что-то сделать с вк, появляется непреодолимое желание кричать.
Попрошу не бить за говнокод. Мне пофиг, честно. Главное что работает.
Чисто для визуального сравнения:
Вот так выглядит функция отправки сообщения с картинкой в 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"]);
Короче, я так долго могу бомбить. У вк вообще всё работает через жопу и костыли. Будь то мобильное приложение, мобильный сайт, пк версия сайта, апи или любой другой продукт. Гарантирую, без костылей в его работе не обойдётся.
Извиняюсь за бомбёжку, просто в очередной раз при надобности что-то сделать с вк, появляется непреодолимое желание кричать.
Попрошу не бить за говнокод. Мне пофиг, честно. Главное что работает.
Последнее редактирование: