صفحه 2 از 2 اولاول 12
نمایش نتایج 41 تا 49 از 49

نام تاپیک: کار با API ربات تلگرام در دلفی 7

  1. #41
    کاربر دائمی آواتار mjdeveloper
    تاریخ عضویت
    بهمن 1385
    محل زندگی
    تهران
    پست
    124

    Cool نقل قول: کار با API ربات تلگرام در دلفی 7

    با درود و احترام خدمت دوستان گل

    دریافت فایل توسط ربات تلگرام رو به درخواست دوستان براتون آماده کردم . این کد برای دریافت تصویر و فایل در قالب های photo و document هست فرصت نکردم فرمت های دیگه رو بررسی کنم ببینم نام قالبش چیه . دیگه این و بعهده خودتون میذارم

    Recieve And Download File From bot with delphi


    const
    BotFileUrl = 'https://api.telegram.org/file/bot';

    مرحله بعد افزودن دو متد به botThread هست:

    TBotThread = class(TThread)
    private
    Function GetFile_Path(file_id: string) : String;
    procedure DownloadFile(FilePath , OrginalFileName: String );


    بدنه این دو متد بشرح زیر هست:
    function TBotThread.GetFile_Path(file_id: string): String;Var
    Stream: TStringStream;
    Params: TIdMultipartFormDataStream;
    msg : WideString;
    Src : string;
    LHandler: TIdSSLIOHandlerSocketOpenSSL;
    json , ResultNode , OKNode:TlkJSONbase;
    begin
    Result := '';
    try
    try
    msg := '/getfile';
    LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    FidHttpSend.ReadTimeout := 30000;
    FidHttpSend.IOHandler:=LHandler;
    LHandler.SSLOptions.Method := sslvTLSv1;
    LHandler.SSLOptions.Mode := sslmClient;
    FidHttpSend.HandleRedirects := true;
    Src := FidHttpGet.Get(BotUrl + API + msg + '?file_id=' + file_id);
    json:= TlkJSON.ParseText(Src);
    OKNode := TlkJSONboolean(json).Field['ok'];
    ResultNode := TlkJSONlist(json).Field['result'];
    if ResultNode <> nil then
    Begin
    Result := VarToStr(ResultNode.Field['file_path'].Value);
    End;
    finally
    LHandler.Free;
    ENd;
    except
    on E: EIdHTTPProtocolException do
    begin
    if E.ErrorCode = 403 then
    begin
    WriteToLog('Bot was blocked by the user');
    end;
    end;
    end;
    end;


    procedure TBotThread.DownloadFile(FilePath , OrginalFileName: String );
    var
    Stream: TMemoryStream;
    Url, Filename: String;
    LHandler: TIdSSLIOHandlerSocketOpenSSL;
    tmpFilePath : String;
    Begin
    if OrginalFileName = '' then
    Begin
    tmpFilePath := AnsiReplaceStr(FilePath,'/','\');
    OrginalFileName := ExtractFileName(tmpFilePath);
    End;
    LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    FidHttpSend.ReadTimeout := 0;
    FidHttpSend.IOHandler := LHandler;
    LHandler.SSLOptions.Method := sslvTLSv1;
    LHandler.SSLOptions.Mode := sslmClient;
    FidHttpSend.HandleRedirects := true;
    URL := BotFileUrl+ API + '/' + FilePath;
    Stream := TMemoryStream.Create;
    try
    FidHttpSend.Get(URL, Stream);
    Stream.SaveToFile(OrginalFileName);
    finally
    Stream.Free;
    end;
    end;


    حالا باید متد اصلی ترد یعنی Execute رو یه تغییری بدیم:


    procedure TBotThread.Execute;
    var
    ....
    file_id , file_path , FileName: string;


    فسمت دریافت پیام رو هم بخش های زیر رو بهش اضافه کنید

    if TlkJSONObject(item).Field['message'] <> nil then
    Begin
    msgNode := TlkJSONObject(item).Field['message'];
    .
    .
    .
    .
    //Download file


    if (msgNode.Field['document'] <> nil) then
    Begin
    file_id := VarToStr(msgNode.Field['document'].Field['file_id'].Value);
    FileName := VarToStr(msgNode.Field['document'].Field['file_name'].Value);
    file_path := GetFile_Path(file_id);
    if file_path <> '' then
    DownloadFile(file_path,FileName);
    End;


    //Download file
    if (msgNode.Field['photo'] <> nil) then
    Begin
    file_id := VarToStr(msgNode.Field['photo'].Child[msgNode.Field['photo'].Count-1].Field['file_id'].Value);
    FileName := '';
    file_path := GetFile_Path(file_id);
    if file_path <> '' then
    DownloadFile(file_path,FileName);
    End;
    End


    تصاویر و فایل ها کنار فایل برنامه شما دانلود میشه
    توجه داشته باشید کد با indy 10 نوشته شده شاید روی 9 هم کار کنه البته . تست نکردم .

    یا علی
    ایام بکام
    آخرین ویرایش به وسیله mjdeveloper : پنج شنبه 06 مهر 1396 در 15:18 عصر

  2. #42
    کاربر دائمی آواتار SayeyeZohor
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    ا-ص-ف-ه-ا-ن
    پست
    631

    نقل قول: کار با API ربات تلگرام در دلفی 7

    نقل قول نوشته شده توسط mjdeveloper مشاهده تاپیک
    من روی ارسال تصویر در تلگرام کار میکنم

    کد زیر رو برای post کردن عکس زدم ولی جواب نمیده . خطای read timeout یا unsupported media type میده . اساتید لطفا کمک کنید


    varIDUser : String;
    Stream: TStringStream;
    Params: TIdMultipartFormDataStream;
    msg : WideString;
    LHandler: TIdSSLIOHandlerSocket;
    Src , boundry : string;
    begin
    API := edtAPI.Text;
    IDUser := Edit1.Text;
    Stream := TStringStream.Create('');
    try
    Params := TIdMultipartFormDataStream.Create;
    try
    //Params.AddFile('File1', 'C:\test.txt','image/png');
    Params.AddFormField('chat_id',IDUser);
    Params.AddFile('File1', 'E:\image.png','image/png');
    //Data.CopyFrom(Params,0);
    //Params.AddFormField(' test',',');
    try
    msg := '/sendPhoto';
    LHandler := TIdSSLIOHandlerSocket.Create(nil);
    //IdHTTP1.Request.ContentType := 'multipart/form-data';
    IdHTTP1.ReadTimeout := 30000;
    IdHTTP1.IOHandler:=LHandler;
    LHandler.SSLOptions.Method := sslvTLSv1;
    LHandler.SSLOptions.Mode := sslmUnassigned;
    IdHTTP1.HandleRedirects := true;
    IdHTTP1.Request.ContentType := 'multipart/form-data';

    idhttp1.Request.SetHeaders;
    memoResponse.Text :=idhttp1.Request.RawHeaders.Text;
    memoRequest.Text := BaseUrl + API + msg;
    IdHTTP1.Post(BaseUrl + API + msg, Params,Stream);
    except
    on E: Exception do
    showmessage('Error encountered during POST: ' + E.Message+ ': '
    + intToStr(IdHTTP1.Response.ResponseCode))
    end;
    ShowMessage(Stream.DataString);
    finally
    Params.Free;
    end;
    finally
    Stream.Free;
    end;

    کدتون غیر قابل فهمه

  3. #43

    نقل قول: کار با API ربات تلگرام در دلفی 7

    خیلی خیلی ممنونم دست شما دردنکنه

  4. #44
    کاربر دائمی آواتار mjdeveloper
    تاریخ عضویت
    بهمن 1385
    محل زندگی
    تهران
    پست
    124

    نقل قول: کار با API ربات تلگرام در دلفی 7

    نقل قول نوشته شده توسط SayeyeZohor مشاهده تاپیک
    کدتون غیر قابل فهمه
    این مشکل برای اوایل کار روی بات بود و حلش کردم.

  5. #45

    نقل قول: کار با API ربات تلگرام در دلفی 7

    با سلام و تشکر از آموزش بسیار کاربردی شما
    فقط در حال حاضر که تلگرام فیل تر شده دسترسی به API ربات فقط از طریق چیز پی ان امکان پذیره، آیا راهی وجود داره که بشه توسط خود IdHTTP محدودیت رو رفع کرد؟؟

  6. #46

    نقل قول: کار با API ربات تلگرام در دلفی 7

    نقل قول نوشته شده توسط Amir Lajevardi مشاهده تاپیک
    با سلام و تشکر از آموزش بسیار کاربردی شما
    فقط در حال حاضر که تلگرام فیل تر شده دسترسی به API ربات فقط از طریق چیز پی ان امکان پذیره، آیا راهی وجود داره که بشه توسط خود IdHTTP محدودیت رو رفع کرد؟؟
    میتونین از پروکسی استفاده کنین.


  7. #47

    نقل قول: کار با API ربات تلگرام در دلفی 7

    نقل قول نوشته شده توسط Mask مشاهده تاپیک
    میتونین از پروکسی استفاده کنین.
    ممنون میشم راهنمایی کنید از چه پروتکل پروکسی میشه در IdHTTP استفاده کرد؟
    MTProto رو پشتیبانی میکنه؟
    حالا مهم نیست سرویس رایگان هم باشه هر سرویسی که بشه استفاده کرد اگر معرفی کنید سپاسگزارم...
    آخرین ویرایش به وسیله Mask : دوشنبه 21 آبان 1397 در 12:49 عصر

  8. #48

    نقل قول: کار با API ربات تلگرام در دلفی 7

    پروکسی خودش یک پروتکله. از همون استفاده کنین.
    https


  9. #49
    کاربر دائمی آواتار mjdeveloper
    تاریخ عضویت
    بهمن 1385
    محل زندگی
    تهران
    پست
    124

    نقل قول: کار با API ربات تلگرام در دلفی 7

    جهت گنجاندن Proxy داخلی برای سرویس می تواند مانند زیر عمل کنید

    ProxyEnable: Boolean; 
    ProxyAuth: Boolean;
    ProxyServer: String;
    ProxyPort: String;
    ProxyUsername: String;
    ProxyPassword: String;


    procedure TfmMain.FormCreate(Sender: TObject);begin
    lblVersion.Caption := 'Version ' + Version;
    LoadSetting;


    if ProxyEnable Then
    Begin
    if ProxyPort = '' then ProxyPort := '0';


    IdHTTP1.ProxyParams.BasicAuthentication := ProxyAuth;
    IdHTTP1.ProxyParams.ProxyServer := ProxyServer;
    IdHTTP1.ProxyParams.ProxyPort := StrToInt(ProxyPort);
    IdHTTP1.ProxyParams.ProxyUsername := ProxyUsername;
    IdHTTP1.ProxyParams.ProxyPassword := ProxyPassword;


    IdHTTP2.ProxyParams.BasicAuthentication := ProxyAuth;
    IdHTTP2.ProxyParams.ProxyServer := ProxyServer;
    IdHTTP2.ProxyParams.ProxyPort := StrToInt(ProxyPort);
    IdHTTP2.ProxyParams.ProxyUsername := ProxyUsername;
    IdHTTP2.ProxyParams.ProxyPassword := ProxyPassword;


    IdHTTP3.ProxyParams.BasicAuthentication := ProxyAuth;
    IdHTTP3.ProxyParams.ProxyServer := ProxyServer;
    IdHTTP3.ProxyParams.ProxyPort := StrToInt(ProxyPort);
    IdHTTP3.ProxyParams.ProxyUsername := ProxyUsername;
    IdHTTP3.ProxyParams.ProxyPassword := ProxyPassword;


    End;

صفحه 2 از 2 اولاول 12

تاپیک های مشابه

  1. سوال: کار با api‌ های تلگرام در دلفی
    نوشته شده توسط hadisalahi2 در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 16
    آخرین پست: پنج شنبه 24 تیر 1395, 17:43 عصر
  2. سوال: کار با فایل های متنی در دلفی txt-text
    نوشته شده توسط hassan p.b در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 20
    آخرین پست: یک شنبه 09 شهریور 1393, 00:38 صبح
  3. کار با Windows Agent ها در دلفی
    نوشته شده توسط alidehban در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 2
    آخرین پست: یک شنبه 15 فروردین 1389, 08:59 صبح
  4. کار با کامپوننت fast report در دلفی
    نوشته شده توسط nasim_leila در بخش کامپوننت های سایر شرکت ها، و توسعه کامپوننت
    پاسخ: 4
    آخرین پست: چهارشنبه 02 خرداد 1386, 11:26 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •