Forum: PC-Programmierung Telegram-Bot: getUpdates begrenzen?


von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Mit dem Kommando:
1
https://api.telegram.org/bot123:ABC/getUpdates
Erhalte ich eine Art riesiges Syslog aller möglichen Vorgänge, nicht nur 
die Mitteilung der Gruppenmitglieder. Ich möchte jedoch inner nur die 
letzten (neuesten) 10 oder 20 Mitteilungen abholen. Laut meinen 
Recherchen im Web soll es möglich sein mit
1
https://api.telegram.org/bot123:ABC/getUpdates?limit=10
die Anzahl der ausgegeben Mitteilung zu begrenzen ... Funzt aber nicht, 
ich bekomme eine Fehlermeldung:
1
zsh: no matches found: https://api.telegram.org/bot123:ABC/getUpdates?limit=10
Was ist falsch bzw. wo finde ich mehr Infos dazu? Danke.

von Motopick (motopick)


Lesenswert?


von Εrnst B. (ernst)


Lesenswert?

Frank E. schrieb:
> Was ist falsch

deine Fehlermeldung kommt von der "zsh", nicht von Telegram.
d.H. du schickst den GET-Request nicht, oder zumindest nicht so, wie du 
denkst.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Motopick schrieb:
>> https://api.telegram.org/bot123:ABC/getUpdates
>
> Das ist wohl kein Kommando sondern eine URL.
>

Ja, ich mache das im Terminal mit CURL, deshalb Kommando ...

> Vielleicht mal quoten.
> https://api.telegram.org/bot123:ABC/getUpdates\?limit=10

Ja, Danke, richtig!

Allerdings mit ...\?offset=-1

Erhält man genau die letzte Message.

von Motopick (motopick)


Lesenswert?

> Allerdings mit ...\?offset=-1

Dann liefert -2 sicher die davor.
Und bis zur Zehn ist es dann auch nicht mehr weit.

Loop unrolling :)

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Frank E. schrieb:
> Ja, Danke, richtig!
> Allerdings mit ...\?offset=-1
>
> Erhält man genau die letzte Message.

Noch ein Nachtrag:

Den Backslash brauche ich nur im Terminal, wenn ich das mit CURL teste. 
Inzwischen nehme ich aber einfach ein HTTPS-Socket im POST-Mode, dann 
sieht das wieder ganz normal aus:

https://api.telegram.org/bot123:ABC/getUpdates?offset=-1

Der Unterschied war wohl das, was mich verwirrt hatte.

Dieser Request liefert einen JSON-String, der neben dem Text auch eine 
Message-ID enthält. Auch die sollte man sich heraus parsen und merken, 
denn so lange die letzte Nachricht sich nicht ändert, liest man immer 
wieder die gleiche Nachricht.

Ich habe übrigens die Telegram-Bot-Kommunikation in eine Xojo-Klasse 
gepackt, für meine Desktop-Tools. Eine Arduino-Lib gibts übrigens auch 
schon (nicht von mir!), allerdings nur nutzbar auf Modellen, die HTTPS 
beherrschen. Oder man muss ein PHP-Skript im Web dazwischenschalten.

Ich finde, das ist eine ziemlich praktische Möglichkeit, um recht 
unkompliziert Meldungen zu PC oder Mobilgerät zu versenden oder auch 
umgekehrt Kommandos an MC-Projekte ...

: Bearbeitet durch User
von Εrnst B. (ernst)


Lesenswert?

Frank E. schrieb:
> Den Backslash brauche ich nur im Terminal, wenn ich das mit CURL teste.

Wie gesagt, die Fehlermeldung kam von deiner Shell (zsh), die versucht 
hat, die URL zu interpretieren bevor sie überhaupt als Parameter an CURL 
übergeben wurde.

Das Escaping versteckt das "?" vor der zsh, an CURL übergibt die zsh die 
URL dann ohne Backslash, also genau so wie du sie auch außerhalb der 
Shell verwendest.

Frank E. schrieb:
> Dieser Request liefert einen JSON-String, der neben dem Text auch eine
> Message-ID enthält.

Wenn du das auch an der Shell verarbeiten willst, schau dir das 
"jq"-Utility an.
https://github.com/jqlang/jq/wiki/Installation#macos
https://github.com/jqlang/jq/wiki/Cookbook

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.