zz1. خدمات بديلة لتجاوز CORS:
- الحصول على الرابط
- X
- بريد إلكتروني
- التطبيقات الأخرى
عتقد المشكلة من هدا هل يوجد بديل له يشبهه 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 (مدفوع):
- يقدم API يدعم تجاوز CORS بكفاءة، ولكنه مدفوع.
- رابط 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>ما الذي تغير في الكود؟
استبدلت
cors-anywhereبـ All Origins:- أضفت رابط
https://api.allorigins.win/get?url=. - قمت بترميز رابط
xmlUrlباستخدامencodeURIComponent.
- أضفت رابط
معالجة البيانات:
- قمت باستخراج المحتوى من استجابة JSON عبر
data.contents.
- قمت باستخراج المحتوى من استجابة JSON عبر
تحسين التعامل مع الأخطاء:
- إضافة رسالة واضحة في حالة عدم وجود أخبار أو وجود مشكلة أثناء الجلب.
عرض الأخبار في حالة النجاح:
- لا تغيير في طريقة تحليل الأخبار وعرضها.
جرب الكود الآن، وإذا واجهت أي مشكلة أخرى، سأساعدك على حلها.
- الحصول على الرابط
- X
- بريد إلكتروني
- التطبيقات الأخرى
تعليقات
إرسال تعليق