zz1. خدمات بديلة لتجاوز CORS:

عتقد المشكلة من هدا هل يوجد بديل له يشبهه https://cors-anywhere.herokuapp.com/"; // وكيل لتجاوز مشاكل CORS

 نعم، خدمة cors-anywhere.herokuapp.com تُستخدم غالبًا لتجاوز قيود CORS، ولكنها قد تواجه مشكلات مثل التعطيل المؤقت أو الحاجة إلى تسجيل الدخول لتفعيلها. هناك بدائل مجانية ومدفوعة يمكن استخدامها لتجاوز قيود CORS، وسأعرض لك بعض الخيارات:

 

 

1. خدمات بديلة لتجاوز CORS:

أ. CORS Proxy

  • خدمة مجانية وسهلة الاستخدام.
  • ببساطة أضف الرابط الخاص بك بعد عنوان الخدمة:

    const proxyUrl = "https://corsproxy.io/?";
    const fetchUrl = proxyUrl + xmlUrl;

    ب. All Origins

    • خدمة مجانية تدعم JSON وHTML.
    • استخدام:

     const proxyUrl = "https://api.allorigins.win/get?url=";
    const fetchUrl = proxyUrl + encodeURIComponent(xmlUrl);

    fetch(fetchUrl)
    .then(response => response.json())
    .then(data => {
    const xmlText = data.contents;
    console.log(xmlText);
    });



    ج. ScrapingBee (مدفوع):


     

     

     

    طبق الشرح على الكود الاول الدي اعطيتك
    قال ChatGPT:
     سأقوم بتحديث الكود الذي أعطيته لي باستخدام خدمة بديلة لـ cors-anywhere، وهي خدمة All Origins. هذه الخدمة مجانية وسهلة الاستخدام لتجاوز قيود CORS. إليك الكود المحدث:
     
     <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Google Alerts to RSS</title>
    </head>
    <body>
    <h1>News Feed</h1>
    <div id="rss-feed"></div>

    <script>
    const xmlUrl = "https://www.google.com/alerts/feeds/05136828016485889397/1843410399294130777";
    const proxyUrl = "https://api.allorigins.win/get?url="; // استخدام خدمة All Origins

    async function fetchAndConvertToRSS() {
    try {
    // جلب بيانات XML باستخدام الوكيل
    const response = await fetch(proxyUrl + encodeURIComponent(xmlUrl));

    if (!response.ok) {
    throw new Error(`HTTP error! Status: ${response.status}`);
    }

    // استخراج المحتوى من استجابة JSON
    const data = await response.json();
    const xmlText = data.contents;

    // تحليل بيانات Atom XML
    const parser = new DOMParser();
    const xmlDoc = parser.parseFromString(xmlText, "application/xml");

    // تحويل بيانات Atom إلى RSS
    const entries = xmlDoc.querySelectorAll("entry");
    const rssContainer = document.getElementById("rss-feed");

    if (entries.length === 0) {
    rssContainer.innerHTML = "<p>No news found.</p>";
    return;
    }

    entries.forEach(entry => {
    const title = entry.querySelector("title")?.textContent || "No Title";
    const link = entry.querySelector("link")?.getAttribute("href") || "#";
    const published = entry.querySelector("published")?.textContent || "No Date";
    const content = entry.querySelector("content")?.textContent || "No Content";

    // عرض البيانات كـ RSS
    const newsItem = document.createElement("div");
    newsItem.innerHTML = `
    <h3><a href="${link}" target="_blank">${title}</a></h3>
    <p><strong>Published:</strong> ${published}</p>
    <p>${content}</p>
    <hr>
    `;
    rssContainer.appendChild(newsItem);
    });

    } catch (error) {
    console.error("Error fetching or converting RSS feed:", error);
    const rssContainer = document.getElementById("rss-feed");
    rssContainer.innerHTML = "<p>Error fetching the news feed. Please try again later.</p>";
    }
    }

    fetchAndConvertToRSS();
    </script>
    </body>
    </html>

    ما الذي تغير في الكود؟

    1. استبدلت cors-anywhere بـ All Origins:

      • أضفت رابط https://api.allorigins.win/get?url=.
      • قمت بترميز رابط xmlUrl باستخدام encodeURIComponent.
    2. معالجة البيانات:

      • قمت باستخراج المحتوى من استجابة JSON عبر data.contents.
    3. تحسين التعامل مع الأخطاء:

      • إضافة رسالة واضحة في حالة عدم وجود أخبار أو وجود مشكلة أثناء الجلب.
    4. عرض الأخبار في حالة النجاح:

      • لا تغيير في طريقة تحليل الأخبار وعرضها.

    جرب الكود الآن، وإذا واجهت أي مشكلة أخرى، سأساعدك على حلها.



    ChatGPT<!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Google Alerts to RSS</title>
    </head>
    <body>
    <h1>News Feed</h1>
    <div id="rss-feed"></div>

    <script>
    const xmlUrl = "https://www.google.com/alerts/feeds/05136828016485889397/1843410399294130777";
    const proxyUrl = "https://api.allorigins.win/get?url="; // استخدام خدمة All Origins

    async function fetchAndConvertToRSS() {
    try {
    // جلب بيانات XML باستخدام الوكيل
    const response = await fetch(proxyUrl + encodeURIComponent(xmlUrl));

    if (!response.ok) {
    throw new Error(`HTTP error! Status: ${response.status}`);
    }

    // استخراج المحتوى من استجابة JSON
    const data = await response.json();
    const xmlText = data.contents;

    // تحليل بيانات Atom XML
    const parser = new DOMParser();
    const xmlDoc = parser.parseFromString(xmlText, "application/xml");

    // تحويل بيانات Atom إلى RSS
    const entries = xmlDoc.querySelectorAll("entry");
    const rssContainer = document.getElementById("rss-feed");

    if (entries.length === 0) {
    rssContainer.innerHTML = "<p>No news found.</p>";
    return;
    }

    entries.forEach(entry => {
    const title = entry.querySelector("title")?.textContent || "No Title";
    const link = entry.querySelector("link")?.getAttribute("href") || "#";
    const published = entry.querySelector("published")?.textContent || "No Date";
    const content = entry.querySelector("content")?.textContent || "No Content";

    // عرض البيانات كـ RSS
    const newsItem = document.createElement("div");
    newsItem.innerHTML = `
    <h3><a href="${link}" target="_blank">${title}</a></h3>
    <p><strong>Published:</strong> ${published}</p>
    <p>${content}</p>
    <hr>
    `;
    rssContainer.appendChild(newsItem);
    });

    } catch (error) {
    console.error("Error fetching or converting RSS feed:", error);
    const rssContainer = document.getElementById("rss-feed");
    rssContainer.innerHTML = "<p>Error fetching the news feed. Please try again later.</p>";
    }
    }

    fetchAndConvertToRSS();
    </script>
    </body>
    </html>
    سأقوم بتحديث الكود الذي أعطيته لي باستخدام خدمة بديلة لـ cors-anywhere، وهي خدمة All Origins. هذه الخدمة مجانية وسهلة الاستخدام لتجاوز قيود CORS. إليك الكود المحدث:
     
     
     

     

     

     

     

     

تعليقات