تطوير Chatbot (telegram + youtube)

لماذا يبدو حتى هنا؟

لقد كتبت مؤخرًا مقالًا عن تطوير php bot باستخدام laravel + botman للبرق. أقتبس أن أول ما كتبوه هو "إطلاق النار من مدفع على العصافير". وأنا أتفق مع هذا ، حتى أنني أدركت ذلك أثناء التطوير ، لكنني كنت مهتمًا بالارافيل.

صورة

الآن كنت أقوم بتطوير روبوت على php خالص (بدون ربط) وبرمجة واجهة برمجة التطبيقات telegram ، وبما أن هناك الكثير من المقالات حول موضوع مشابه ، فسنتطرق إلى واجهة برمجة تطبيقات google API (youtube api) قليلاً. أتمنى أن تجدها مفيدة ومفيدة للتعرف على واجهة برمجة تطبيقات youtube.

استطراد صغير. في الوقت الحالي ، أعمل كمبرمج أمامي وأعمل مع php فقط من أجل المتعة الخاصة بي (رغم أنه من دواعي سروري). قد تكون هناك أخطاء غبية على جانب الخادم ، لكنها تعمل ولكني في وقت التدريب هذا يكفي.

بيان المشكلة


في إحدى الليالي حصلت على فكرة ربط الروبوت و youtube ، في ذلك الوقت لم أكن حتى أشك في وجود api google. يتطلب روبوتًا ، عندما يتم إصدار فيديو جديد على قناة youtube ، سيدفع الإشعار في روبوتي.

من حيث المبدأ ، فإن وظيفة بسيطة للغاية ، ولكن كيفية العمل مع يوتيوب؟ اتضح أن google نفسها لديها حل لهذه المشكلة واسمها هو google API. يتيح لك العمل مع جميع التطبيقات من الشركة ، لكنني كنت مهتمًا فقط على youtube.

التخصيص والتطوير


لقد حدث أنه أثناء دراسة youtube api ، تم العثور على حل أنيق لمشكلتي ، تم تقديمه من خلال وثائق api نفسها. ولكن أولا عن api. لبدء العمل به ، يجب عليك الانتقال إلى وحدة تحكم google وتحديد خيار api الذي تحتاجه. بعد ذلك ، يكمن المسار فقط في الوثائق أو في stackoverflow. يجب أن أقول على الفور أنه لا يوجد إصدار روسي للوثائق ، ولا توجد دروس أيضًا. من المستحسن أن يكون الحد الأدنى من المعرفة باللغة الإنجليزية أو التصرف عن طريق الكتابة.

يبدو مثل هذا. تذهب إلى وحدة التحكم في google ، وأنشئ مشروعك واختر واجهة برمجة التطبيقات المطلوبة.

صورة

والآن لحل المشكلة. أثناء قراءة الوثائق ، وجدت (خدمة google أظهرت ذلك بنفسي) خدمة pubsubhubbub.appspot.com/subscribe ، تتيح لك ربط youtube وتطبيقك. كيف يعمل؟ وهو يعمل على مبدأ webhook. يمكنك إدراج youtube للقناة التي تريد الاستماع إليها وفي كل مرة مع أي إجراءات على القناة (إضافة فيديو ، حذف ، تغيير) ، استقبال البيانات في البرنامج النصي.

صورة

رد الاتصال URL - البرنامج النصي الذي سيتلقى البيانات من جوجل.
عنوان URL للموضوع هو القناة التي تريد الاستماع إليها.

حسنًا ، يتيح لك حقل الوضع اختيار ما تريد أو الاشتراك أو إلغاء الاشتراك من الاستماع.

لنبدأ في كتابة الكود ، للبدء ، فلنعد برنامجنا النصي للعمل مع youtube. كتبت كل شيء في ملف واحد منذ ذلك الحين كان اختبار + رمز هناك حقا لا يكفي. بعد تقديم طلب اشتراك ، تحتاج إلى تأكيده. Googling ، يمكنك العثور على الإجابة على الموقع المفضل للجميع ، كما يشير أحد التعليقات على stackoverflow.

$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 ); } 

نحن هنا ننشئ للراحة متغيرًا سنحتاج فيه إلى معلومات حول الفيديو. يتيح لك السطرين التاليين تحديد ما إذا كان من الممكن تأكيد الطلب من pubsubhubbub ، إذا كان الأمر كذلك ، ثم التأكيد ، إن لم يكن ، فهذا يعني أن البيانات جاءت من youtube ونحن بحاجة إلى معالجتها. في وظيفة parseYoutubeUpdate ، نقوم بمعالجة الاستجابة ، ونحصل على جميع المعلومات التي نحتاجها.

هنا يستحق التنبيه والإخبار عن نموذج خاص (في رأيي ، يمكن أن أكون مخطئًا) من البيانات المستخدمة بواسطة youtube (للإجابات) يطلق عليها ، كما أفهمها ، ذرة (لا يجب الخلط بينها وبين IDE أو هذا xml منتظم ... كانت هناك خبرة قليلة به) . يبدو مثل هذا (جزء صغير من الإجابة من 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> 

رجوع إلى parseYoutubeUpdate ().

في إحدى الوظائف ، نقوم بتحويل الاستجابة إلى تنسيق xml.
نكتب البيانات التي نحتاجها في المتغيرات.
ثم نعود مجموعة مع هذه البيانات.

نمر إلى برقية. بالنسبة للمبتدئين ، أريد أن أقول ، إنه من السهل العمل مع بوتمان. إذا كنت ترغب في تطوير روبوتات فقط للبرق ، فلا تستخدم المكتبات التي تتيح لك تطوير روبوتات لأنظمة مختلفة. هذا لا معنى له ... سيكون هناك المزيد من المشاكل. واجهة برمجة تطبيقات telegram واضحة وبسيطة للغاية حتى بالنسبة للمبتدئين الذين التقوا للتو بـ php ولديهم الحد الأدنى من معرفة OOP.

لذلك ، أقرب إلى النقطة ، أقرب إلى الرمز. نحتاج إلى إنشاء روبوت وربطه بنصنا. آمل أن تتمكن من إنشاء الروبوت. نكتب الرمز المميز من الروبوت وإنشاء طلب

 const TOKEN = "6826815*******Yme99*****9kjzgVi*****3S******"; $url = 'https://api.telegram.org/bot' . TOKEN . '/sendMessage'; 

الآن نحن بحاجة فقط لإرسال طلب إلى خادم البرق.

 $params = [ 'chat_id' =>712531723, "text" => $linkVideo, ]; $url = $url . '?' . http_build_query($params); 

نقوم بإنشاء المعلمات الضرورية ، بالنسبة لي ، يكون معرف الدردشة (إذا كان يعرض روبوتًا على الإنتاج ، فمن الضروري حفظ كل المعرف في قاعدة البيانات للبريد العشوائي) ورسالة نصية.

كما لاحظت ، أقوم بتمرير الرابط كرسالة بسيطة ، وليس فيديو. كما أفهمها ، ينقل البرقية مقطع فيديو فقط إذا تم تحميله على الخادم ، وإلا لا ... + أحتاج إلى رؤية صورة معاينة للفيديو.

الآن سيتلقى الروبوت الخاص بنا إخطارات بتحرير الخروج / الفيديو. يبدو شيء مثل هذا:

صورة

انتهت اللعبة لدي كل شيء. أكبر عيب في هذا الرمز هو أنه في ملف واحد ، لكن لم يكن من المنطقي بالنسبة لي فصل الكود المكون من 10 أسطر.

المصادر - جيثب .

Source: https://habr.com/ru/post/ar463207/


All Articles