[Gambas-user] Request for advice
T Lee Davidson
t.lee.davidson at gmail.com
Mon Jul 12 20:22:14 CEST 2021
On 7/12/21 1:25 PM, John Dovey wrote:
> I am working on wrapping theTelegram bot API in Gambas (as recommended
> here before) but I'm not sure of a few things in the best approach.
>
[snip]
>
> Some of the questions I have include:
> - does this make sense as a way to do this?
It looks sensible to me. There are a couple things I might do a bit differently, but what you have obviously works (though I
don't see where 'botMe' was declared).
One thing I would do is, since you've defined hClient globally, set it's unchanging parameters once and reuse it. Second, I'd
define one universal function to retrieve the response and return a collection. See the code further down below.
> - What is the best way to store the returned collection?
As a collection? Do you see something wrong with that? For whatever state data needs to be maintained, you can declare as many
collections as you need to store response data from the only 50-some respective methods. And, the values are very easy to access.
[code]
Public Token as string = "xxx"
Public apiURL As String = "https://api.telegram.org/bot" & Token & "/"
Public hClient As HttpClient
'Public cmdResponse As String
'Public cmdJSON As Collection
Public MyBot, ImaginaryData as Collection
Public Sub Main()
hClient = New HttpClient As "hClient"
hClient.Async = False
hClient.Timeout = 60
' Get my bot's ID
MyBot = getResponse("getMe")
If MyBot Then ' May need to use "If Not IsNull(MyBot) Then" here. My recall is sometimes faulty.
Print MyBot["id"]
Else
Print "ERROR"
End If
' Get data from imaginary method
ImaginaryData = getResponse("virtData")
If ImaginaryData Then Print ImaginaryData["ether"]
End
Public Sub getResponse(sMethod) as Variant
Dim sBuffer as String
Dim respJSON as Collection
hClient.URL = apiURL & sMethod
hClient.Get
Print "Begin"
If hClient.Status < 0 Then
Print "ERROR"
Else
' Success - read the data
If Lof(hClient) Then sBuffer = Read #hClient, Lof(hClient)
Print sBuffer
'cmdResponse = sBuffer
End If
Try respJSON = JSON.Decode(sBuffer)
If Error Then Return Null
Return respJSON
Print "End"
End
[/code]
One other thing: if there is the possibility for the API to return a JSON object with null values, you will want to use
JSONCollection as opposed to the Gambas native Collection.
--
Lee
More information about the User
mailing list