Mengapa itu bahkan muncul di sini?
Baru-baru ini, saya menulis artikel tentang pengembangan bot php menggunakan laravel + botman untuk telegram. Hal pertama yang mereka tulis, saya kutip, adalah "menembak dari meriam di burung pipit". Saya setuju dengan ini, saya bahkan menyadarinya selama pengembangan, tetapi saya tertarik pada laravel.
Sekarang saya sedang mengembangkan bot di php murni (tanpa tegap) dan API telegram, dan karena ada banyak artikel tentang topik yang sama, kami akan sedikit menyentuh google API (youtube api) sedikit. Saya harap Anda menemukan itu menarik dan bermanfaat untuk belajar tentang youtube API.
Penyimpangan kecil. Saat ini saya bekerja sebagai programmer frontend dan bekerja dengan php hanya untuk kesenangan saya sendiri (walaupun itu adalah kesenangan). Mungkin ada kesalahan bodoh di sisi server, tetapi berfungsi dan bagi saya pada saat pelatihan ini sudah cukup.
Pernyataan masalah
Suatu malam saya mendapat ide untuk menghubungkan bot dan youtube, pada waktu itu saya bahkan tidak curiga keberadaan api google. Dibutuhkan bot yang, ketika video baru dirilis di saluran youtube, akan mendorong pemberitahuan di bot saya.
Pada prinsipnya, fungsinya cukup sederhana, tetapi bagaimana cara bekerja dengan youtube? Ternyata google sendiri memiliki solusi untuk masalah ini dan namanya adalah Google API. Ini memungkinkan Anda untuk bekerja dengan semua aplikasi dari perusahaan, tetapi saya hanya tertarik pada youtube.
Kustomisasi dan Pengembangan
Kebetulan selama studi tentang api youtube, solusi elegan untuk masalah saya ditemukan, itu ditawarkan oleh dokumentasi api itu sendiri. Tapi pertama-tama tentang api. Untuk mulai bekerja dengannya, Anda harus pergi ke konsol Google dan pilih opsi api yang Anda butuhkan. Setelah itu path terletak hanya pada dokumentasi atau pada stackoverflow. Saya harus segera mengatakan bahwa tidak ada versi Rusia dari dokumentasi, tidak ada pelajaran juga. Dianjurkan untuk memiliki pengetahuan bahasa Inggris minimal atau untuk bertindak dengan mengetik.
Ini terlihat seperti ini. Anda masuk ke konsol Google, buat proyek Anda dan pilih API yang diinginkan.

Dan sekarang untuk menyelesaikan masalah. Saat membaca dokumentasi, saya menemukan (google sendiri menunjukkan) layanan
pubsubhubbub.appspot.com/subscribe, ini memungkinkan Anda untuk menautkan youtube dan aplikasi Anda. Bagaimana cara kerjanya? Ia bekerja berdasarkan prinsip webhook. Anda menyisipkan youtube saluran yang ingin Anda dengarkan dan setiap kali dengan tindakan apa pun pada saluran (tambahkan video, hapus, ubah), terima data ke skrip Anda.

URL panggilan balik - skrip yang akan menerima data dari google.
URL topik adalah saluran yang ingin Anda dengarkan.
Nah, bidang Mode memungkinkan Anda untuk memilih apa yang Anda inginkan, berlangganan atau berhenti berlangganan dari mendengarkan.
Mari mulai menulis kode, sebagai permulaan, mari atur skrip kami untuk bekerja dengan youtube. Saya menulis semuanya dalam satu file sejak itu itu tes + kode yang sebenarnya tidak cukup. Setelah Anda mengirimkan permintaan berlangganan, Anda harus mengonfirmasi. Googling, Anda dapat menemukan jawabannya di situs favorit semua orang, salah satu komentar di stackoverflow menyarankan.
$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 ); }
Di sini kita buat untuk kenyamanan variabel di mana kita akan memerlukan info tentang video. Dua baris berikutnya memungkinkan Anda untuk menentukan apakah mungkin untuk mengkonfirmasi permintaan dari pubsubhubbub, jika demikian, maka konfirmasikan, jika tidak, itu berarti bahwa data berasal dari youtube dan kami perlu memprosesnya. Di fungsi parseYoutubeUpdate, kami memproses respons, kami mendapatkan semua informasi yang kami butuhkan.
Di sini layak diasingkan dan diceritakan tentang bentuk data khusus (menurut saya, saya bisa keliru) yang digunakan oleh youtube (untuk jawaban) itu disebut, seperti yang saya pahami, atom (jangan dikacaukan dengan IDE atau ini adalah xml biasa ... ada sedikit pengalaman dengan itu) . Itu terlihat seperti ini (sebagian kecil jawaban dari 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>
Kembali ke parseYoutubeUpdate ().
Dalam suatu fungsi, kami mengonversi respons ke format xml.
Kami menulis data yang kami butuhkan ke dalam variabel.
Dan kemudian kita mengembalikan array dengan data ini.
Kami lolos ke telegram. Sebagai permulaan, saya ingin mengatakan, itu ****** betapa mudahnya bekerja daripada dengan botman. Jika Anda ingin mengembangkan bot hanya untuk telegram, maka jangan gunakan perpustakaan yang memungkinkan Anda untuk mengembangkan bot untuk platform yang berbeda .... tidak masuk akal ... akan ada lebih banyak masalah. API telegram sangat jelas dan sederhana bahkan untuk pemula yang baru saja bertemu php dan memiliki pengetahuan OOP minimal.
Jadi, lebih dekat ke intinya, lebih dekat ke kode. Kita perlu membuat bot dan mengikatnya ke skrip kita. Saya harap Anda bisa membuat bot. Kami menulis token dari bot dan membuat permintaan
const TOKEN = "6826815*******Yme99*****9kjzgVi*****3S******"; $url = 'https://api.telegram.org/bot' . TOKEN . '/sendMessage';
Sekarang kita hanya perlu mengirim permintaan ke server telegram.
$params = [ 'chat_id' =>712531723, "text" => $linkVideo, ]; $url = $url . '?' . http_build_query($params);
Kami membuat parameter yang diperlukan, bagi saya ini adalah id obrolan (jika ini menampilkan produksi bot, maka perlu untuk menyimpan semua id dalam database ke spam) dan pesan teks.
Seperti yang mungkin Anda perhatikan, saya mengirimkan tautan sebagai pesan sederhana, bukan video. Seperti yang saya pahami, sebuah telegram mentransmisikan video hanya jika diunggah ke server, jika tidak ... + Saya perlu melihat gambar pratinjau untuk video tersebut.
Sekarang bot kami akan menerima pemberitahuan untuk keluar / mengedit video. Itu terlihat seperti ini:

Game usai Saya memiliki semuanya. Kelemahan terbesar dari kode ini adalah bahwa ia berada dalam satu file, tetapi tidak masuk akal bagi saya untuk memisahkan kode 10-baris.
Sumber -
github .