PDA

View Full Version : ربات تلگرام و درخواست راهنمائی در خصوص multipart/form-data



RealDream
شنبه 31 مرداد 1394, 11:45 صبح
درود دوستان،
یه تکه کد از تابعی رو براتون قرار میدم که کارش ارسال عکس به کمک متد SendPhoto (https://core.telegram.org/bots/api#sendphoto) تلگرام هست :



public function send_photo($bot_token,$chat_id,$photo_id)
{
$url="https://api.telegram.org/bot".$bot_token."/sendphoto?chat_id=".$chat_id."&photo=".urlencode(trim($photo_id));
$json = download_url($url);
$result=json_decode($json);
if($result)
if($result->ok)
if($result->ok==true)
return true;

return false;
}//end of send_img function


توی مستندات API گفته شده که باید photo_id یا از تصاویر موجود روی سرور تلگرام باشه و یا به وسیله multipart/form-data آپلود شده باشه :



Photo to send. You can either pass a file_id as String to resend a photo that is already on the Telegram servers, or upload a new photo using multipart/form-data.


من میخوام یه فایل رو از یه آدرس خاص (http://mysite.ir/logo.png) پلود کنم به سرور تلگرام . سورس‌های مختلفی رو دیدم مثل روبی یا پایتون که بی دردسر آدرس رو دادن و کار انجام شده اما گویا اینجا توی PHP داستان متفاوته و البته من خیلی آشنائی با PHP هم ندارم ولی نه توی Stack Overflow و نه جای دیگه نتونستم مشکل رو با اطلاعات موجود توی نت حل کنم .
از دوستان خواهش میکنم یه بررسی فرمایند و هر راهنمائی که فکر می‌کنن مفید رو اینجا اعلام کنن.
در ضمن من با همین مجموعه کد مشکلی با ارسال تکست ندارم و با این قالب ارسال رو انجام میدم :‌



$result= $message_op->send_message($bot_token,$group_chat_id,$reply_msg) ;


اینم سایر توابع از همون فایل :‌



<?php
//eastweb information structures
class TgMessage{


public function send_message($bot_token,$chat_id,$text,$disable_li nk_preview=0,$reply_to_msg=0,$reply_markup="0",$hide_keyboard=false)
{
$url="https://api.telegram.org/bot".$bot_token."/sendmessage?chat_id=".$chat_id."&text=".urlencode($text)."&disable_web_page_preview=".$disable_link_preview.($reply_to_msg!=0?'&reply_to_message_id='.$reply_to_msg:'').($reply_ma rkup!="0"?'&reply_markup='.$reply_markup:'').($hide_keyboard!= false?'&hide_keyboard='.$hide_keyboard:'');
$json = download_url($url);
$result=json_decode($json);
if($result)
if($result->ok)
return true;

return false;
}//end of send message function

public function forward_message($bot_token,$chat_id,$from_chat_id, $message_id)
{
$url="https://api.telegram.org/bot".$bot_token."/forwardmessage?chat_id=".$chat_id."&from_chat_id=".$from_chat_id."&message_id=".$message_id;
$json = download_url($url);
$result=json_decode($json);
if($result)
if($result->ok)
return true;

return false;
}//end of forward message function

public function send_photo($bot_token,$chat_id,$photo_id)
{
$url="https://api.telegram.org/bot".$bot_token."/sendphoto?chat_id=".$chat_id."&photo=".urlencode(trim($photo_id));
$json = download_url($url);
$result=json_decode($json);
if($result)
if($result->ok)
if($result->ok==true)
return true;

return false;
}//end of send_img function

public function chat_action($bot_token,$chat_id,$chat_action)
{
$url="https://api.telegram.org/bot".$bot_token."/sendchataction?chat_id=".$chat_id."&chat_action=".$chat_action;
$json = download_url($url);
$result=json_decode($json);
if($result)
if($result->ok)
return true;

return false;
}//end of chat action function

public function replymarkup_hide($bot_token,$chat_id,$chat_action)
{
$url="https://api.telegram.org/bot".$bot_token."/sendchataction?chat_id=".$chat_id."&chat_action=".$chat_action;
$json = download_url($url);
$result=json_decode($json);
if($result)
if($result->ok)
return true;

return false;
}//end of chat action function
}


?>

z.sarir
پنج شنبه 12 شهریور 1394, 13:11 عصر
سلام منم بدجور تو این گیر کردم
اگر فهمیدی به منم بگو بی زحمت
مرسی

amin1softco
پنج شنبه 12 شهریور 1394, 16:49 عصر
دقت نکردی


$bot_url = "https://api.telegram.org/bot<bot_id>/";
$url = $bot_url . "sendPhoto?chat_id=" . $chat_id ;

$post_fields = array('chat_id' => $chat_id,
'photo' => new CURLFile(realpath("/path/to/image.png"))
);

$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);


http://stackoverflow.com/questions/12667797/using-curl-to-upload-post-data-with-files
http://stackoverflow.com/questions/32296272/telegram-bot-api-how-to-send-a-photo-using-php

RealDream
دوشنبه 23 شهریور 1394, 12:41 عصر
ممنون.
جواب نمیده متاسفانه


{"ok":false,"error_code":404,"description":"Error: Method not found"}