في اليوم الآخر كانت هناك مهمة تلقي رسائل من دفق youtube. لم أجد مقالات حول هذا الموضوع ، ولكن هناك فقط متسلسلات. وثائق جوجل لقد اكتشفت ذلك (آمل) وأنا على استعداد لمشاركة تجربتي معك.
أول شيء وجدته هو LiveChatMessages: طريقة القائمة ، يبدو أن كل شيء بسيط ، ولكن المعلمة المطلوبة هي تمرير liveChatId ، والتي يمكنك الحصول عليها عن طريق تقديم طلب إلى LiveBroadcasts: list ، ولكن لتقديم طلب هناك ، تحتاج إلى تفويض المستخدم من خلال google مع الوصول إلى قراءة الحساب. في الأمثلة ، يتم توضيح كل شيء بالتفصيل ، ولكن إذا كنت تقرأ هذه المقالة ، فقد لا يكون واضحًا كما نود.تسجيل الدخول
وحدة تحكم Google
باستخدام OAuth 2.0 لتطبيقات خادم الويب ، أود أن أشير على الفور إلى أن تفويض خادم الويب مطلوب ، لأن المفتاح الذي تم إرساله أثناء التفويض إلى js يستمر لمدة ساعة ، ولن يتم تحديثه (بدون مشاركة المستخدم). لم يتم إرسال رمز التحديث. أيضا ، أوصي باستخدام إحدى المكتبات الجاهزة ، سيكون كل شيء أسهل بكثير معهم.أولاً ، قم بإنشاء حساب. انتقل إلى console.developers.google.com ، وحدد المشاريع في الزاوية اليسرى العليا وانقر على "إنشاء مشروع".
أدخل اسمًا واحفظه. حدد مشروعك وانقر على "تمكين واجهات برمجة التطبيقات والخدمات" أو انتقل إلى صفحة مكتبة واجهة برمجة التطبيقات .هنا ، في طلب البحث ، ابحث عن الإصدار 3 من YouTube Data API وقم بتمكينه.ثم ، في علامة التبويب "نافذة طلب وصول OAuth" في الجزء الأيمن من وحدة التحكم ( أو هنا ) ، قم بإنشاء نافذة.في الخطوة الأولى ، حدد "خارجي" لنوع المستخدم.
بعد ذلك ، في هذا النموذج ، تحتاج إلى ملء حقلين - اسم التطبيق و "المجالات المعتمدة" ، إذا كان لديك مجال ، يمكنك ترك الحقل فارغًا إذا لم يكن هناك. انقر فوق حفظ. يجب أن تكون النتيجة شيئًا مثل
الآن انتقل إلى علامة التبويب "بيانات الاعتماد" (https://console.developers.google.com/apis/credentials)هنا ستجد مثل هذه الصفحة:
حدد زر "إنشاء بيانات الاعتماد" -> "معرف عميل OAuth »حدد النوع الذي تريده (بالنسبة لنا ، الويب) ، أدخل الاسم و "عناوين URI المعاد توجيهها المسموح بها" - هذا هو عنوان url الذي سيتم إرسال الرمز إليه لتفويض العميل. يمكنك كتابة عنوان url محلي هنا في وقت التطوير ، في حالتي سيكونhttp: // localhost: 8080 / oauth2callback.php
نتيجة
بعد ذلك ، يجب أن تظهر نافذة بمعرف العميل والمفتاح السري. بينما يتم إغلاق هذا بأمان. هذه صفحة تحتوي على بيانات الاعتماد التي تم إنشاؤها للتو.
انقر فوق الزر تنزيل لمعرف:
يمكنك إعادة تسميته على الفور إلى secret_json.json.يتم ذلك من خلال إعداد التفويض ، فلننتقل الآن إلى الرمز.بي أتش بي
أنشئ مشروعًا وافتح نافذة طرفية وشغّل الأمر:php composer.phar require google/apiclient:^2.0
إذا كنت لا تعرف ما هو الملحن وكيفية تثبيته ، تعرف عليه.بعد التثبيت ، أنشئ ملفين - index.php و oauth2callback.php.وبالمناسبة ، يمكنك بالفعل بدء تشغيل خادم PHP:php -S localhost:8080
قم أيضًا بنقل الملف secret_json.json (الذي قمت بتنزيله سابقًا) إلى مجلد المشروع.مباشرة على Index.php سترسل المستخدم للحصول على إذن. محتويات ملف Index.php<?php
require_once __DIR__ . '/vendor/autoload.php';
$client = new Google_Client();
$client->setAuthConfig('client_secret.json');
$client->setScopes([
'https://www.googleapis.com/auth/youtube.readonly',
]);
$client->setAccessType("offline");
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
$client->setAccessToken($_SESSION['access_token']);
} else {
$redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php';
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
exit();
}
$refreshToken = $_SESSION['access_token']['refresh_token'];
$accessToken = $_SESSION['access_token']['access_token'];
$tknType = $_SESSION['access_token']['token_type'];
$clientId = $client->getClientId();
$created = $_SESSION['access_token']['created'];
unset($_SESSION['access_token']);
unset($_SESSION['user']);
session_destroy();
$data = json_encode([
'refreshToken' => $refreshToken,
'accessToken' => $accessToken,
'tknType' => $tknType,
'clientId' => $clientId,
'created' => $created
]);
echo $data;
في الواقع ، هذا الكود سيعطي المستخدم كل البيانات الضرورية ، يمكنك كتابتها إلى قاعدة البيانات (أو المفكرة).ملف oauth2callback.php:<?php
require_once __DIR__.'/vendor/autoload.php';
session_start();
$client = new Google_Client();
$client->setAuthConfigFile('client_secret.json');
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php');
$client->setScopes([
'https://www.googleapis.com/auth/youtube.readonly',
]);
$client->setApprovalPrompt('force');
$client->setAccessType("offline");
if (!isset($_GET['code'])) {
$auth_url = $client->createAuthUrl();
header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
} else {
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
$redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/';
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
سيعيد هذا الملف توجيه المستخدم إلى صفحة تفويض Google ويكتب بيانات الرمز المميز إلى الجلسة. بعد ذلك ، سيعيد المستخدم إلى حيث سيستمر index.php في العمل معه.بالطبع ، يمكنك كتابة جميع البيانات مباشرة إلى oauth2callback وعدم إعادة توجيه المستخدم إلى الفهرس ، أو يمكنك تحديد النقطة التالية بأي عنوان مناسب لك. أيضًا ، لم يتم أخذ أخطاء التفويض في الاعتبار في هذا الرمز ، ضع ذلك في الاعتبار.يتم ذلك بإذن. لديك بالفعل access_token و Refresh_token ، فلنحصل على YouTube.موقع يوتيوب
PHP على الفور
getStreams.php:<?php
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/refreshToken.php';
$client = new Google_Client();
$client->setAuthConfig('client_secret.json');
$client->setScopes([
'https://www.googleapis.com/auth/youtube.readonly',
]);
$client->setAccessType("offline");
if (($data['created'] - time()) <= -3600) {
$data = refreshToken($data['refreshToken'], $db);
}
$client->setAccessToken($data['accessToken']);
$service = new Google_Service_YouTube($client);
$queryParams = [
'broadcastStatus' => 'upcoming',
'maxResults' => 50
];
$response = $service->liveBroadcasts->listLiveBroadcasts('id,snippet,status', $queryParams);
$items = $response['items'];
$streamsUpcoming = itemsGenerator($items);
$queryParams = [
'broadcastStatus' => 'active',
'maxResults' => 50
];
$response = $service->liveBroadcasts->listLiveBroadcasts('id,snippet,status', $queryParams);
$items = $response['items'];
$streamsActive = itemsGenerator($items);
$streams = array_merge($streamsUpcoming, $streamsActive);
echo json_encode($streams);
function itemsGenerator($items) {
$streams = [];
foreach ($items as $item) {
if (!isset($item['snippet']['actualEndTime'])) {
$streams[] = [
'id' => $item['id'],
'title' => $item['snippet']['title'],
'description' => $item['snippet']['description'],
'image' => $item['snippet']['thumbnails']['medium']['url'],
'liveChatId' => $item['snippet']['liveChatId'],
'channelId' => $item['snippet']['channelId']
];
}
}
return $streams;
}
تذكر هذه السطور أثناء التفويض؟$client->setScopes([
'https://www.googleapis.com/auth/youtube.readonly',
]);
لذا ، فهم مسؤولون عن نوع الوصول الذي تطلبه. على سبيل المثال ، مثل هذا السجل يسمح فقط بقراءة المعلومات ، وهناك https://www.googleapis.com/auth/youtube.upload
غيرها.RefrTTook.php:<?php
require_once __DIR__ . '/vendor/autoload.php';
function refreshToken($refreshToken, $db)
{
$client = new Google_Client();
$client->setAuthConfig('client_secret.json');
$client->setScopes([
'https://www.googleapis.com/auth/youtube.readonly',
]);
$client->setAccessType("offline");
$client->refreshToken($refreshToken);
$accessToken = $client->getAccessToken();
$refreshToken = $accessToken['refresh_token'];
$accessToken = $accessToken['access_token'];
$clientId = $client->getClientId();
$data = [
'refreshToken' => $refreshToken,
'accessToken' => $accessToken,
'tknType' => 'Bearer',
'clientId' => $clientId,
'created' => time()
];
return $data;
}
الرمز المميز الصادر من Google صالح لمدة ساعة فقط. خلال اليوم ، يمكنك إجراء 25 طلبًا فقط لتحديث الرمز المميز ، هذه الوظيفة تقوم فقط بتحديث الرمز المميز الخاص بنا وإرجاع القيم الجديدة التي يمكنك الاستمرار في العمل بها. يوضح GetStreams عمله.وأخيرًاgetStreamMessages.php:<?php
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/refreshToken.php';
$client = new Google_Client();
$client->setAuthConfig('client_secret.json');
$client->setScopes([
'https://www.googleapis.com/auth/youtube.readonly',
]);
$client->setAccessType("offline");
if (($data['created'] - time()) <= -3600) {
$data = refreshToken($data['refreshToken'], $db);
}
$client->setAccessToken($data['accessToken']);
$service = new Google_Service_YouTube($client);
$queryParams = [
'maxResults' => 2000,
'profileImageSize' => 120
];
$response = $service->liveChatMessages->listLiveChatMessages($liveChatId, 'id,snippet,authorDetails', $queryParams);
echo json_encode($response);
لم أبدأ هنا بإحضار تنسيق الرسالة إلى التنسيق المطلوب ، يمكنك القيام بذلك بنفسك ، حيث يحتوي مصفوفة الاستجابة $ على جميع المعلومات الضرورية ، ورابط المقالة هنا .ما يزعجني هو أنه لا توجد طريقة للحصول على الخطافات (إذا كان هناك واحد ، اترك الرابط ، من فضلك) وعليك تقديم طلبات مستمرة.أيضًا ، أوصي بقراءة وثائق liveChatMessages ، هناك بعض القيود فيها ، مثل أنك تحتاج إلى تقديم طلب لكل صفحة برمز جديد جاء في الطلب السابق.مشروع Github باستخدام db (كل ما تبقى هو تحميل ملف client_secret.json)