Warum ist es überhaupt hier aufgetaucht?
Kürzlich schrieb ich einen Artikel über die Entwicklung von PHP-Bots mit Laravel + Botman als Telegramm. Das allererste, was sie geschrieben haben, ist „aus einer Kanone auf Spatzen schießen“. Ich stimme dem zu, ich habe es sogar während der Entwicklung erkannt, aber ich war an Laravel interessiert.
Jetzt habe ich einen Bot für reines PHP (ohne Umreifung) und die Telegramm-API entwickelt. Da es viele Artikel zu einem ähnlichen Thema gibt, werden wir ein wenig auf die Google-API (Youtube-API) eingehen. Ich hoffe, Sie finden es interessant und nützlich, mehr über die YouTube-API zu erfahren.
Ein kleiner Exkurs. Im Moment arbeite ich als Frontend-Programmierer und arbeite mit PHP nur zu meinem eigenen Vergnügen (obwohl es ein Vergnügen ist). Es mag dumme Fehler auf der Serverseite geben, aber es funktioniert und für mich zum Zeitpunkt des Trainings ist dies genug.
Erklärung des Problems
Eines Abends kam mir die Idee, den Bot und Youtube zu verbinden. Damals ahnte ich nicht einmal die Existenz von API Google. Es erfordert einen Bot, der, wenn ein neues Video auf dem YouTube-Kanal veröffentlicht wird, die Benachrichtigung in meinem Bot pusht.
Im Prinzip ist die Funktionalität recht einfach, aber wie arbeitet man mit YouTube? Es stellt sich heraus, dass Google selbst eine Lösung für dieses Problem hat und Google API heißt. Es ermöglicht Ihnen, mit allen Anwendungen des Unternehmens zu arbeiten, aber ich war nur an YouTube interessiert.
Anpassung und Entwicklung
So kam es, dass während des Studiums der YouTube-API eine elegante Lösung für mein Problem gefunden wurde, die von der API-Dokumentation selbst angeboten wurde. Aber zuerst über die API. Um damit zu arbeiten, müssen Sie zur Google-Konsole gehen und die gewünschte API-Option auswählen. Danach liegt der Pfad nur noch in der Dokumentation oder im Stackoverflow. Ich muss sofort sagen, dass es keine russische Version der Dokumentation gibt, es gibt auch keine Lektionen. Es ist ratsam, nur minimale Kenntnisse der englischen Sprache zu haben oder durch Tippen zu handeln.
Es sieht so aus. Sie gehen in die Google-Konsole, erstellen Ihr Projekt und wählen die gewünschte API aus.

Und jetzt das Problem zu lösen. Beim Lesen der Dokumentation habe ich den Dienst
pubsubhubbub.appspot.com/subscribe gefunden (Google hat es mir selbst gezeigt)
, mit dem Sie YouTube und Ihre Anwendung verknüpfen können. Wie funktioniert es Es funktioniert nach dem Prinzip des Webhooks. Sie fügen das Youtube des Kanals ein, den Sie hören möchten, und empfangen jedes Mal, wenn Sie Aktionen auf dem Kanal ausführen (Video hinzufügen, löschen, ändern), Daten in Ihr Skript.

Rückruf-URL - ein Skript, das Daten von Google empfängt.
Die Themen-URL ist der Kanal, den Sie anhören möchten.
Nun, im Feld Modus können Sie auswählen, was Sie möchten, abonnieren oder abbestellen.
Beginnen wir mit dem Schreiben des Codes. Zunächst richten wir unser Skript für die Arbeit mit YouTube ein. Ich habe seitdem alles in einer Datei geschrieben Es war ein Test + Code, da ist wirklich nicht genug. Nachdem Sie eine Abonnementanfrage gesendet haben, müssen Sie diese bestätigen. Wenn Sie googeln, finden Sie die Antwort auf der Lieblingsseite aller, wie einer der Kommentare zu stackoverflow nahe legt.
$video = "null"; if (isset($_GET['hub_challenge'])) { echo $_REQUEST['hub_challenge']; } else { $video = parseYoutubeUpdate(file_get_contents('php://input')); } function parseYoutubeUpdate($data) { $xml = simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA); $video_id = substr((string)$xml->entry->id, 9); $channel_id = substr((string)$xml->entry->author->uri, 32); $published = (string)$xml->entry->published; return array( 'video_id'=>$video_id, 'channel_id'=>$channel_id, 'published'=>$published ); }
Hier erstellen wir der Einfachheit halber eine Variable, in der wir die Informationen zum Video benötigen. In den nächsten beiden Zeilen kannst du bestimmen, ob es möglich ist, die Anfrage von pubsubhubbub zu bestätigen. Wenn ja, dann bestätige, wenn nicht, bedeutet dies, dass die Daten von youtube stammen und wir sie verarbeiten müssen. In der Funktion parseYoutubeUpdate verarbeiten wir die Antwort und erhalten alle Informationen, die wir benötigen.
Hier lohnt es sich, über eine spezielle (meiner Meinung nach kann ich mich irren) Form von Daten zu schweifen und zu erzählen, die YouTube (für Antworten) verwendet. Sie wird, wie ich es verstehe, Atom genannt (nicht zu verwechseln mit der IDE oder ist es nur eine gewöhnliche XML ... es gab wenig Erfahrung damit). . Es sieht ungefähr so aus (ein kleiner Teil der Antwort von Youtube):
<id>yt:video:eE5mpblYpdY</id> <yt:videoId>eE5mpblYpdY</yt:videoId> <yt:channelId>UCGqKr3O5ub-O7zEKx_qeHUQ</yt:channelId> <title>20b3560a49 1080</title> <link rel="alternate" href="https://www.youtube.com/watch?v=hgCQ378xNus"/> <author> <name>not Epic</name> <uri>https://www.youtube.com/channel/UCGqKr3O5ub-O7zEKx_qeHUQ</uri> </author> <published>2019-07-14T05:10:49+00:00</published> <updated>2019-07-14T05:11:07.600177664+00:00</updated>
Zurück zu parseYoutubeUpdate ().
In einer Funktion konvertieren wir die Antwort in das XML-Format.
Wir schreiben die benötigten Daten in die Variablen.
Und dann geben wir ein Array mit diesen Daten zurück.
Wir gehen zum Telegramm. Für den Anfang möchte ich sagen, es ist ******, wie einfacher es ist, mit Botman zu arbeiten. Wenn Sie Bots nur für Telegramm entwickeln möchten, verwenden Sie keine Bibliotheken, mit denen Sie Bots für verschiedene Plattformen entwickeln können. es macht keinen Sinn ... es wird mehr Probleme geben. Die Telegramm-API ist sehr klar und einfach, selbst für Anfänger, die gerade PHP kennengelernt haben und nur minimale OOP-Kenntnisse haben.
Also näher am Punkt, näher am Code. Wir müssen einen Bot erstellen und ihn an unser Skript binden. Ich hoffe du kannst einen Bot erstellen. Wir schreiben ein Token vom Bot und erstellen eine Anfrage
const TOKEN = "6826815*******Yme99*****9kjzgVi*****3S******"; $url = 'https://api.telegram.org/bot' . TOKEN . '/sendMessage';
Jetzt müssen wir nur noch eine Anfrage an den Telegrammserver senden.
$params = [ 'chat_id' =>712531723, "text" => $linkVideo, ]; $url = $url . '?' . http_build_query($params);
Wir erstellen die erforderlichen Parameter, für mich ist es eine Chat-ID (wenn in der Produktion ein Bot angezeigt wird, müssen alle IDs in der Datenbank für Spam gespeichert werden) und eine Textnachricht.
Wie Sie vielleicht bemerkt haben, übergebe ich den Link als einfache Nachricht, nicht als Video. So wie ich es verstehe, überträgt ein Telegramm ein Video nur, wenn es auf den Server hochgeladen wird, andernfalls nicht ... + Ich muss ein Vorschaubild für das Video sehen.
Jetzt erhält unser Bot Benachrichtigungen über das Beenden / die Videobearbeitung. Es sieht ungefähr so aus:

Spiel vorbei Ich habe alles Der größte Nachteil dieses Codes ist, dass er sich in einer einzigen Datei befindet, aber es war für mich nicht sinnvoll, den 10-zeiligen Code zu trennen.
Quellen -
Github .