本文介绍了Exel VBA使用Telegram bot API发送图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写一个Exel宏,该宏在运行另一个宏后发送结果的屏幕截图。所拍摄的屏幕截图以jpg格式保存在目录C:DocumentsSCREENSHOT中。我想将图片1.jpg";C:DocumentsSCREENSHOTPicture1.jpg";发送给一个电报组uSiga机器人。

我可以使用以下代码轻松发送文本消息。

Private Sub telegram_pruebas() 'Solicita un mensaje esta función del mensaje y el ID del chat

    Dim objRequest As Object 'Con lo que se crea la solicitud de internet
    Dim datos_posteo As String 'Lo que enviará por mensaje

    Dim token, ChatID, mensaje As String

    token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    ChatID = -xxxxxxxxxxxx
    mensaje = "xxxxxxxx"

    datos_posteo = "chat_id=" & ChatID & "&text=" & mensaje 'Se 'Se le muestra al robot que enviar y a que chat


    Set objRequest = CreateObject("MSXML2.XMLHTTP") 'Crea un request como archivo XHLM

    With objRequest
        .Open "POST", "https://api.telegram.org/bot" & token & "/sendMessage?", False 'Aqui esta la dirección del sitio web con el api del robot
        .setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 'No se que sea
        .send (datos_posteo) 'La indicación de enviar el texto al chat
    End With

End Sub
问题是我找不到发送存储在我计算机中的图像的方法,我看到了文档,它说有必要使用多部分/Form-Data方法但我不知道如何更改我的Sub Telegram_pruebas()要使用该方法,我已经看过堆栈溢出和其他页面中的所有示例,并尝试了一些类似的

Private Sub telegram_pruebas_photo() 'Solicita un mensaje esta función del mensaje y el ID del chat

    Dim objRequest As Object 'Con lo que se crea la solicitud de internet
    Dim datos_posteo As String 'Lo que enviará por mensaje

    Dim token, ChatID, photo As String

    token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    ChatID = -xxxxxxxxxxx
    photo = "C:documentsSCREENSHOTpicture1.jpg"

    datos_posteo = "chat_id=" & ChatID & "&photo=" & photo 'Se 'Se le muestra al robot que enviar y a que chat


    Set objRequest = CreateObject("MSXML2.XMLHTTP") 'Crea un request como archivo XHLM

    With objRequest
        .Open "POST", "https://api.telegram.org/bot" & token & "/sendPhoto?", False 'Aqui esta la dirección del sitio web con el api del robot
        .setRequestHeader "Content-Type", "multipart/form-data" 'No se que sea
        .send (datos_posteo) 'La indicación de enviar el texto al chat
        response = .responseText
    End With
    MsgBox response
End Sub


这不起作用,我得到空响应。

是否有人可以修改我的代码以解决问题,或者至少可以帮助我理解我的错误..

我已经尝试了这些页面,试图了解:

How to send a desktop photo to telegram using Excel VBASending local storage photo into Telegram with VBA

Sending locally hosted photo on telegram bot

Sending Photo to Telegram (API / Bot)

和许多其他人也是如此。

谢谢

推荐答案

尝试

Sub telegram_pruebas_photo()

    Const URL = "https://api.telegram.org/bot"
    Const TOKEN = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    Const METHOD_NAME = "/sendPhoto?"
    Const CHAT_ID = "-xxxxxxxxxxx"

    Const FOLDER = "C:documentsSCREENSHOT"
    Const JPG_FILE = "picture1.jpg"

    Dim data As Object, key
    Set data = CreateObject("Scripting.Dictionary")
    data.Add "chat_id", CHAT_ID

    ' generate boundary
    Dim BOUNDARY, s As String, n As Integer
    For n = 1 To 16: s = s & Chr(65 + Int(Rnd * 25)): Next
    BOUNDARY = s & CDbl(Now)

    Dim part As String, ado As Object
    For Each key In data.keys
        part = part & "--" & BOUNDARY & vbCrLf
        part = part & "Content-Disposition: form-data; name=""" & key & """" & vbCrLf & vbCrLf
        part = part & data(key) & vbCrLf
    Next
    ' filename
    part = part & "--" & BOUNDARY & vbCrLf
    part = part & "Content-Disposition: form-data; name=""photo""; filename=""" & JPG_FILE & """" & vbCrLf & vbCrLf

    ' read jpg file as binary
    Dim jpg
    Set ado = CreateObject("ADODB.Stream")
    ado.Type = 1 'binary
    ado.Open
    ado.LoadFromFile FOLDER & JPG_FILE
    ado.Position = 0
    jpg = ado.read
    ado.Close

    ' combine part, jpg , end
    ado.Open
    ado.Position = 0
    ado.Type = 1 ' binary
    ado.Write ToBytes(part)
    ado.Write jpg
    ado.Write ToBytes(vbCrLf & "--" & BOUNDARY & "--")
    ado.Position = 0

    Dim req As Object, reqURL As String
    Set req = CreateObject("MSXML2.XMLHTTP")
    reqURL = URL & TOKEN & METHOD_NAME
    With req
        .Open "POST", reqURL, False
        .setRequestHeader "Content-Type", "multipart/form-data; boundary=" & BOUNDARY
        .send ado.read
        MsgBox .responseText
    End With

End Sub

Function ToBytes(str As String) As Variant

    Dim ado As Object
    Set ado = CreateObject("ADODB.Stream")
    ado.Open
    ado.Type = 2 ' text
    ado.Charset = "_autodetect"
    ado.WriteText str
    ado.Position = 0
    ado.Type = 1
    ToBytes = ado.read
    ado.Close

End Function

这篇关于Exel VBA使用Telegram bot API发送图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-13 20:51