كيفية متابعة قوائم تشغيل اليوتيوب بستخدام موجزRSS مجانا

مقدمة

لقد بحثت لمدة يومين وهذا الثالث عن ميزات (#RSS) وكيف يمكنني متابعة الأخبار والتحايل على القنوات الإخبارية التي تعطلت ميزة الموجز الخاص بها. جلست يومين مع محرك بحث جوجل ولم أستفد كثير فهو يبحث في المقالات والفيديوهات لكنه لم يقدم غالبية الوقت حلول بالفعل ولم أستخد البرومبت إلا للبحث عن قنوات إخبارية متنوعة وهذ القنات سوف يتم جمعها وربما تحويلها لهذا الأداة والحصول على Rss القديمة (لم أبحث في هذا).

ولك اليوم سوف أطرح مقال سريع وربما أعدله بعد ذلك عند المزيد من البحث في هذا الشأن، عنوان المقال “كيفية متابعة قوائم تشغيل اليوتيوب بستخدام موجزRSS مجانا “ والتي سوف أشرح فيها كيف تفعل ذلك سريعا دون مشاكل تقنية ومع ذلك لن أخبرك أنني جربت كل الحلول أو أنني كتبته بنفسي فعلا “أستخدمت متصفح مايكروسوفت في البحث السريع، نظرا أن رصيدي في البحث المتعمق أنتهت”. وكان السؤال الذي طرحته عليه “البحث عن إضافة لتحويل قوائم التشغيل على اليوتيوب إلى ملف (opml# or rss)”

الشرح

اختصار: لا توجد إضافة رسمية من يوتيوب لتحويل قوائم التشغيل إلى OPML أو RSS، لكن توجد أدوات جاهزة ومفتوحة المصدر تقوم بالمهمة بسهولة، وأفضلها سكربت YouTube‑Subscriptions‑RSS الذي يحوّل اشتراكاتك أو قوائم التشغيل إلى ملف OPML جاهز.

أولا إذا كنت تريد أن تستخدم “موجزRSS” عليك أن تقوم بنسخ رابط القائمة من اليوتيوب مثال بالصور والطريقة تكون(إذا كنت تعرف تجاوز هذه): إذهب لليوتيوب (“youtube.com”).

الصورة الأولى تشرح كيفية الدخول إلى اليوتيوب ثم فتح التاب ثم الضغط على قائمة التشغيل في وسط القائمة ثم أفتح التاب ثم الضغط على قائمة التشغيل في وسط القائمة.

ثم قم بالبحث عبر التمرير عن قائمة التشغيل ثم إضغط على زر الثلاثة نقاط وإضغط على “مشاركة” ثم نسخ الرابط أو “عرض المحتوى بالكامل”أسفل صورة وعنوان قائمة التشغيل

بعد فتح قائمة تشغيل على اليوتيوب سوف تجد فيديوهات في قائمة التشغيل: قائمة تشغيل على اليوتيوب “(شرح كتاب المراحل الثمان لطالب فهم القرآن ) _ أسرار فهم القرآن) بواسطة Alaa Hamed - علاء حامد”

ثم فتح أي تطبيق يدعم استخدم “موجزRSS” مثل fluent Reader. “سوف تجد عندي قائمة موجود فيها الكثير من النشرات والتي لن تكون عندك”

image

أفتح الإعدادات: image

إعدادات التطبيق الذي سوف تضيف فيها خانة إضافة المصدر أو ملف OPML: image تجد خانة مكتوب عليها إضافة مصدر image

تضع الرابط “https://www.youtube.com/feeds/videos.xml?playlist_id=PL1i_D1Vw3d5MkevimMdJRVLi4TiVFd-wE” في هذه الخانة:

image

سوف يضاف في الأسفل وبعد ذلك أخرج من الإعدادات سوف تجد عندك القائمة أضيفت

النتيجة عرض النتيجة على fluent Reader بعد إضافة الرابط بنجاح

نتيجة أخرى تضع الرابط “https://www.youtube.com/feeds/videos.xml?playlist_id=PLaWoVOBAfpThqaqPQWSjCvXrNQxi4LSXb”

image

image


طريقة أخرى 🔧من الأدوات المتاحة لتحويل قوائم تشغيل YouTube إلى OPML/RSS إن YouTube‑Subscriptions‑RSS (GitHub) أداة مفتوحة المصدر تعمل عبر سكربت أو Bookmarklet وتُنتج ملف OPML مباشرة. تعمل على صفحة youtube.com/feed/channels.

بعد تشغيل السكربت، يتم تنزيل ملف OPML يحتوي على كل روابط RSS للقنوات.

يمكنك استيراده في أي قارئ RSS.

  • تصل الى مدى 100 رابط YouTube Playlist Extractor: Extract all video URLs from any YouTube playlist “https://seotools.davidbreder.com/youtube-playlist?utm_source=copilot.com” فقط قم بوضع رابط قائمة التشغيل عليها.

أو على https://chromewebstore.google.com/detail/youtube-url-extractor/jmilibpbdpajjnabchfpfmmmjgbimefo?utm_source=copilot.com


سكربت سريع لتشغيله في Console (مرن)

انسخ والصق هذا الكود في Console أثناء فتح صفحة القائمة (سوف يقوم بالتمرير لجلب كل العناصر ثم طباعة الروابط):

(async()=>{
  const sleep=(ms)=>new Promise(r=>setTimeout(r,ms));
  let lastHeight=0;
  while(document.querySelector('#spinnerContainer.active') || document.body.scrollHeight>lastHeight){
    lastHeight=document.body.scrollHeight;
    window.scrollBy(0,100000);
    await sleep(500);
  }
  const links=[...document.querySelectorAll('ytd-playlist-video-renderer a#video-title')].map(a=>({title:a.textContent.trim(), url:a.href}));
  console.log(links.map(l=>l.url).join('\n'));
  // لتحميل كملف نصي:
  const blob=new Blob([links.map(l=>l.url).join('\n')],{type:'text/plain'});
  const a=document.createElement('a'); a.href=URL.createObjectURL(blob); a.download='playlist-links.txt'; a.click();
})();

ملاحظة: بعض أدوات/صفحات يوتيوب تُحمّل الفيديوهات تدريجياً؛ السكربت يقوم بالتمرير لجلب كل العناصر.


الخيار الأسهل خطوة بخطوة عبر Console في Chrome

افتح صفحة قائمة التشغيل على يوتيوب (الرابط الذي يحتوي ?list=PL…).

اضغط F12 أو افتح Developer Tools ثم اختر تبويب Console.

ألصق السكربت التالي واضغط Enter. السكربت يقوم بالتمرير حتى تحميل كل العناصر، يجمع عناوين وروابط الفيديو، وينزل ملفين: playlist-links.txt و playlist.opml.

(async()=>{
  const sleep = ms => new Promise(r => setTimeout(r, ms));
  // Scroll until no new height for several iterations
  let lastHeight = 0;
  let stableCount = 0;
  while(stableCount < 6){
    window.scrollBy(0, window.innerHeight * 5);
    await sleep(800);
    const h = document.body.scrollHeight;
    if(h === lastHeight) stableCount++; else { stableCount = 0; lastHeight = h; }
  }
  // Select video items (works on standard YouTube playlist layout)
  const items = Array.from(document.querySelectorAll('ytd-playlist-video-renderer a#video-title'));
  const links = items.map(a => {
    const url = a.href.split('&list=')[0]; // remove extra params
    const title = a.textContent.trim().replace(/\s+/g,' ');
    const idMatch = url.match(/v=([^&]+)/);
    const vid = idMatch ? idMatch[1] : '';
    return {title, url, vid};
  }).filter(x=>x.vid);
  if(links.length === 0){
    console.log('لم يتم العثور على عناصر. تأكد أنك على صفحة قائمة تشغيل عامة وأن الصفحة محمّلة بالكامل.');
    return;
  }
  // تنزيل ملف نصي بروابط
  const txt = links.map(l=>l.url).join('\n');
  const blobTxt = new Blob([txt], {type:'text/plain'});
  const aTxt = document.createElement('a'); aTxt.href = URL.createObjectURL(blobTxt); aTxt.download = 'playlist-links.txt'; aTxt.click();

  // إنشاء OPML جاهز للاستيراد في قارئ RSS
  const playlistTitle = (document.querySelector('h1#title')?.textContent || 'YouTube Playlist').trim();
  const opmlItems = links.map(l => `<outline text="${escapeXml(l.title)}" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?playlist_id=${getPlaylistId()}" htmlUrl="${l.url}"/>`).join('\n    ');
  const opml = `<?xml version="1.0" encoding="UTF-8"?>
<opml version="1.0">
  <head><title>${escapeXml(playlistTitle)}</title></head>
  <body>
    ${opmlItems}
  </body>
</opml>`;
  const blobOpml = new Blob([opml], {type:'text/xml'});
  const aOpml = document.createElement('a'); aOpml.href = URL.createObjectURL(blobOpml); aOpml.download = 'playlist.opml'; aOpml.click();

  console.log('اكتمل الجمع. عدد الفيديوهات:', links.length);

  // Helpers
  function escapeXml(s){ return s.replace(/&/g,'&').replace(/</g,'<').replace(/"/g,'"'); }
  function getPlaylistId(){
    const m = location.href.match(/[?&]list=([^&]+)/);
    return m ? m[1] : '';
  }
})();

ملاحظات مهمة السكربت يحاول استخراج playlist_id من عنوان الصفحة لاستخراج OPML؛ إذا كانت الصفحة تستخدم تخطيط مختلف قد تحتاج تعديل بسيط.

السكربت يولّد OPML بحيث كل مدخل يحتوي رابط RSS الخاص بالقائمة نفسه؛ بعض قرّاء RSS لا يدعمون إدراج كل فيديو كـ feed مستقل، لكن الملف مفيد إذا أردت تجميع روابط أو تحويلها لاحقاً.

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

بدائل سريعة بدون Console امتداد كروم مثل YouTube URL Extractor: يتيح استخراج روابط الفيديو دفعة واحدة ثم تصدير CSV أو نسخها. بعض الإضافات تقطع عند 100 عنصر لذا تحقق من تقييمات المستخدمين وتعليقاتهم قبل الاعتماد.

مواقع استخراج قوائم التشغيل (Playlist Link Extractor): ألصق رابط القائمة وسيعطيك CSV/نص بكل الروابط. مفيد إذا لا تريد تشغيل سكربت محلياً، لكن بعض المواقع قد تفرض حدّاً أو تحتاج وقتاً أطول للقوائم الضخمة.


التعديل المطلوب — الكود المعدّل (لم يَتغيّر شيء سوى إضافة اسم القناة في اسم الملف)

playlist-links-“أسم عنوان قائمة التشغيل، بواسطة”أسم القناة““.txt و playlist-“أسم عنوان قائمة التشغيل، بواسطة”أسم القناة““.opml. فقط هذا التعديل

  • لا تخرب الكود

انسخ هذا الكود إلى Console وشغّله كما السابق؛ التعديل يضيف استخراج اسم قناة القائمة ويضعه مع عنوان القائمة داخل اسم الملف قبل الامتداد.

(async()=>{
  const sleep = ms => new Promise(r => setTimeout(r, ms));
  // Scroll until no new height for several iterations
  let lastHeight = 0;
  let stableCount = 0;
  while(stableCount < 6){
    window.scrollBy(0, window.innerHeight * 5);
    await sleep(800);
    const h = document.body.scrollHeight;
    if(h === lastHeight) stableCount++; else { stableCount = 0; lastHeight = h; }
  }
  // Select video items (works on standard YouTube playlist layout)
  const items = Array.from(document.querySelectorAll('ytd-playlist-video-renderer a#video-title'));
  const links = items.map(a => {
    const url = a.href.split('&list=')[0]; // remove extra params
    const title = a.textContent.trim().replace(/\s+/g,' ');
    const idMatch = url.match(/v=([^&]+)/);
    const vid = idMatch ? idMatch[1] : '';
    return {title, url, vid};
  }).filter(x=>x.vid);
  if(links.length === 0){
    console.log('لم يتم العثور على عناصر. تأكد أنك على صفحة قائمة تشغيل عامة وأن الصفحة محمّلة بالكامل.');
    return;
  }

  // استخراج عنوان القائمة واسم القناة (محاولات متعددة لمحددات مختلفة)
  const playlistTitle = (document.querySelector('h1#title')?.textContent || 'YouTube Playlist').trim();
  function getChannelName(){
    const selectors = [
      'ytd-playlist-byline-renderer a',
      'ytd-channel-name a',
      '#owner-name a',
      'ytd-video-owner-renderer a',
      'ytd-video-owner-renderer yt-formatted-string a'
    ];
    for(const sel of selectors){
      const el = document.querySelector(sel);
      if(el && el.textContent && el.textContent.trim()) return el.textContent.trim();
    }
    // محاولة بديلة: البحث عن رابط القناة في الصفحة
    const alt = document.querySelector('a[href^="/channel/"], a[href^="/user/"], a[href^="/c/"]');
    return alt ? (alt.textContent || alt.getAttribute('title') || '').trim() : 'Unknown Channel';
  }
  const channelNameRaw = getChannelName();
  // sanitize بسيط لأسماء الملفات: نزيل الأحرف التي قد تسبّب مشاكل في أسماء الملفات
  function sanitizeFileName(s){
    return s.replace(/["<>:\\\/\|\?\*]/g,'').replace(/\s+/g,' ').trim();
  }
  const playlistTitleSafe = sanitizeFileName(playlistTitle);
  const channelNameSafe = sanitizeFileName(channelNameRaw);

  // تنزيل ملف نصي بروابط
  const txt = links.map(l=>l.url).join('\n');
  const blobTxt = new Blob([txt], {type:'text/plain'});
  const aTxt = document.createElement('a');
  aTxt.href = URL.createObjectURL(blobTxt);
  aTxt.download = `playlist-links-"${playlistTitleSafe}، بواسطة ${channelNameSafe}".txt`;
  aTxt.click();

  // إنشاء OPML جاهز للاستيراد في قارئ RSS
  const opmlItems = links.map(l => `<outline text="${escapeXml(l.title)}" type="rss" xmlUrl="https://www.youtube.com/feeds/videos.xml?playlist_id=${getPlaylistId()}" htmlUrl="${l.url}"/>`).join('\n    ');
  const opml = `<?xml version="1.0" encoding="UTF-8"?>
<opml version="1.0">
  <head><title>${escapeXml(playlistTitle)}</title></head>
  <body>
    ${opmlItems}
  </body>
</opml>`;
  const blobOpml = new Blob([opml], {type:'text/xml'});
  const aOpml = document.createElement('a');
  aOpml.href = URL.createObjectURL(blobOpml);
  aOpml.download = `playlist-"${playlistTitleSafe}، بواسطة ${channelNameSafe}".opml`;
  aOpml.click();

  console.log('اكتمل الجمع. عدد الفيديوهات:', links.length);

  // Helpers
  function escapeXml(s){ return s.replace(/&/g,'&').replace(/</g,'<').replace(/"/g,'"'); }
  function getPlaylistId(){
    const m = location.href.match(/[?&]list=([^&]+)/);
    return m ? m[1] : '';
  }
})();

ملاحظات صغيرة

  • وضعت تنظيف بسيط لأسماء الملفات (sanitizeFileName) لإزالة الأحرف التي قد تمنع تنزيل الملف على أنظمة تشغيل مختلفة، مع الحفاظ على النص العربي كما هو.
  • اسم الملف الناتج سيكون بالشكل:
    playlist-links-"عنوان القائمة، بواسطة اسم القناة".txt
    و
    playlist-"عنوان القائمة، بواسطة اسم القناة".opml

إذا تريد أن أترك علامات الاقتباس المزدوجة أو أغيّر الفاصل (مثلاً استخدم - بواسطة - بدلاً من ، بواسطة ) أخبرني وسأعدّلها بسرعة.

الخاتمة
  • إذا واجهت تداخل في آخر فقرة فجرب قراءة المنشور من منصة أخرى.

Looking for comments…

Searching Nostr relays. This may take a moment the first time this article is opened.