Как отправить локальное фото через telegram api
Подскажите пожалуйста формат ссылки для отправки локального фото в telegram. Разобрался как отправить фото с сервера.
https://api.telegram.org/bot...../sendPhoto?chat_id=....&photo=https://d3i6fh83elv35t.cloudfront.net/static/2022/07/spacealternative-1024x593.jpg
Но вот, как выбрать туда фото с пк не понимаю
Пробовал указать в ссылке file:\\\C:\file.png
Пробовал просто C:\file.png
Выдаёт ошибку
{"ok":false,
"error_code":400,
"description":"Bad Request: invalid file HTTP URL specified: Unsupported URL protocol"}
Ответы (3 шт):
Автор решения: DiMithras
→ Ссылка
Отправлять надо не ссылку на файл, а сам файл, т.е. бинарник.
Посмотрите здесь пример для python.
import requests
import json
bot_token = 'BOT TOKEN'
chat_id = "CHAT ID"
file = r"C:\Users\name\OneDrive\Desktop\Capture.PNG"
files = {
'photo': open(file, 'rb')
}
message = ('https://api.telegram.org/bot'+ bot_token + '/sendPhoto?chat_id='
+ chat_id)
send = requests.post(message, files = files)
Или здесь через Stream для javascript:
const fetch = require("node-fetch");
const fs = require("fs");
const FormData = require("form-data");
let readStream = fs.createReadStream("./image.png");
let form = new FormData();
form.append("photo", readStream);
fetch(
`https://api.telegram.org/bot<token>/sendPhoto?chat_id=-<chat id>`,
{
method: "POST",
body: form,
}
)
.then((res) => res.json())
.then((response) => {
console.log(response);
})
.catch((error) => {
console.log(error);
});
У вас какой язык? По вопросу непонятно.
Автор решения: Pogodin Artem
→ Ссылка
Столкнулся с приколом, что что-то deprecated. Поэтому вот мой адаптированный вариант через axios. Уверен, поможет кому-то.
import axios from 'axios';
let form = new FormData();
form.append("chat_id", chatId);
form.append("photo", fs.createReadStream("./img/ya-coords.jpg"));
axios.post(`https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendPhoto`, form, {
headers: form.getHeaders(),
})
.then((response) => {
bot.answerCallbackQuery(callbackQuery.id, { text: "Держи для Яндекса" });
})
.catch((error) => {
console.error(`Ошибка при отправке изображения "ya-coords.jpg" у пользователя ${userId} \nERROR: `, error);
bot.answerCallbackQuery(callbackQuery.id, { text: "Произошла ошибка при получении картинки." });
});
Автор решения: Алибек Бакибаев
→ Ссылка
Я имел подобный опыт но с отправкой видео на телеграм бот https://github.com/YaArmesha/Armen/blob/main/index.html
Вот:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Запись и отправка видео</title>
</head>
<body>
<video autoplay muted></video>
<button onclick="toggleRecording()">Старт запись</button>
<script>
let mediaRecorder;
let recordedChunks = [];
let isRecording = false;
const videoElement = document.querySelector("video");
navigator.mediaDevices
.getUserMedia({ video: true, audio: true })
.then((localMediaStream) => {
mediaRecorder = new MediaRecorder(localMediaStream);
mediaRecorder.ondataavailable = function(event) {
if (event.data.size > 0) {
recordedChunks.push(event.data);
}
};
mediaRecorder.onstop = function() {
const blob = new Blob(recordedChunks, { type: 'video/webm' });
sendVideo(blob);
};
})
.catch((error) => {
console.log("Отказано в доступе к камере или микрофону:", error);
});
function toggleRecording() {
if (isRecording) {
stopRecording();
isRecording = false;
document.querySelector("button").innerText = "Старт запись";
} else {
startRecording();
isRecording = true;
document.querySelector("button").innerText = "Скажи что то и жто видео будет у меня :)";
}
}
function startRecording() {
recordedChunks = [];
mediaRecorder.start();
}
function stopRecording() {
mediaRecorder.stop();
}
function sendVideo(videoBlob) {
const formData = new FormData();
formData.append('video', videoBlob, 'recorded_video.webm');
fetch('https://api.telegram.org/botTOKEN/sendVideo?chat_id=chat_id', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Ошибка при отправке видео:', error));
}
</script>
</body>
</html>