जावास्क्रिप्ट का उपयोग करके RSS फ़ीड कैसे पार्स करें?


116

मुझे RSS फ़ीड (XML संस्करण 2.0) को पार्स करने और HTML पृष्ठ में पार्स किए गए विवरण को प्रदर्शित करने की आवश्यकता है।


12
1) वास्तव में आपने क्या प्रयास किया है? 2) वास्तव में आप क्या करना चाहते हैं? (जो जानकारी आप फ़ीड से निकालना चाहते हैं?) 3) वास्तव में आप इसे अपने पृष्ठ में कहां प्रदर्शित करना चाहते हैं? 4) आपका HTML मार्कअप वास्तव में क्या है ? इसमें से कुछ, हम सभी को बहाना पसंद है कि हम डेविड कॉपरफील्ड हैं, लेकिन मुझे यकीन नहीं है कि हम दर्शकों को बहुत लंबा बेवकूफ बना देंगे।
जाइलम ha

नहीं, मेरे पास एक क्रमिक फीड है। मैं इसे प्रकाशित नहीं कर सकता। यही कारण है कि मैंने यहां एक नमूना डाला
थिरु

ठीक है, लेकिन यह एक नमूना नहीं है। यह केवल एक गैर-मौजूद पृष्ठ का URL था। उस मामले में मेरे जवाब में एक "नमूना" है। यह FEED_URL वैरिएबल है। बस आपको वहां क्या चाहिए। यदि आपको अधिक सहायता की आवश्यकता है, तो आपको इस बारे में और जानकारी देने की आवश्यकता है कि फ़ीड के किन तत्वों की आपको आवश्यकता है, आप क्या चाहते हैं कि HTMK स्टब्स दिखें, जहाँ आप जेनरेट किए गए HTML स्टब्स को इंजेक्ट करना चाहते हैं, और आप एक वास्तविक नमूना भी प्रदान कर सकते हैं। अपने आरएसएस फ़ीड (बस एक अंश को कॉपी करें और प्लेसहोल्डर्स के साथ वास्तविक सामग्री को बदलें)।
जाइलम ha

जवाबों:


216

फ़ीड को पार्स करना

साथ jQuery के jFeed

(वास्तव में सिफारिश नहीं है कि एक, अन्य विकल्प देखें)

jQuery.getFeed({
   url     : FEED_URL,
   success : function (feed) {
      console.log(feed.title);
      // do more stuff here
   }
});

के साथ jQuery के निर्मित में XML समर्थन

$.get(FEED_URL, function (data) {
    $(data).find("entry").each(function () { // or "item" or whatever suits your feed
        var el = $(this);

        console.log("------------------------");
        console.log("title      : " + el.find("title").text());
        console.log("author     : " + el.find("author").text());
        console.log("description: " + el.find("description").text());
    });
});

साथ jQuery और Google AJAX फ़ीड एपीआई

$.ajax({
  url      : document.location.protocol + '//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&callback=?&q=' + encodeURIComponent(FEED_URL),
  dataType : 'json',
  success  : function (data) {
    if (data.responseData.feed && data.responseData.feed.entries) {
      $.each(data.responseData.feed.entries, function (i, e) {
        console.log("------------------------");
        console.log("title      : " + e.title);
        console.log("author     : " + e.author);
        console.log("description: " + e.description);
      });
    }
  }
});

लेकिन इसका मतलब है कि आप उन पर भरोसा कर रहे हैं जो ऑनलाइन और पहुंच से बाहर हैं।


भवन निर्माण सामग्री

एक बार जब आप सफलतापूर्वक जानकारी आप फ़ीड से जरूरत निकाला है, आप बना सकते हैं DocumentFragmentके साथ ( document.createDocumentFragment()के साथ बनाया तत्वों (युक्त document.createElement()) आप अपने डेटा प्रदर्शित करने के लिए इंजेक्षन करना चाहते हैं।


सामग्री का इंजेक्शन लगाना

उस कंटेनर तत्व का चयन करें जिसे आप पृष्ठ पर चाहते हैं और अपने दस्तावेज़ के टुकड़े उसमें जोड़ दें, और इसकी सामग्री को पूरी तरह से बदलने के लिए इनर HTML का उपयोग करें।

कुछ इस तरह:

$('#rss-viewer').append(aDocumentFragmentEntry);

या:

$('#rss-viewer')[0].innerHTML = aDocumentFragmentOfAllEntries.innerHTML;

परीक्षण डेटा

इस प्रश्न के फ़ीड का उपयोग करना , जो इस लेखन को देता है:

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:re="http://purl.org/atompub/rank/1.0">
    <title type="text">How to parse a RSS feed using javascript? - Stack Overflow</title>
    <link rel="self" href="https://stackoverflow.com/feeds/question/10943544" type="application/atom+xml" />
        <link rel="hub" href="http://pubsubhubbub.appspot.com/" />        
    <link rel="alternate" href="https://stackoverflow.com/q/10943544" type="text/html" />
    <subtitle>most recent 30 from stackoverflow.com</subtitle>
    <updated>2012-06-08T06:36:47Z</updated>
    <id>https://stackoverflow.com/feeds/question/10943544</id>
    <creativeCommons:license>http://www.creativecommons.org/licenses/by-sa/3.0/rdf</creativeCommons:license> 
    <entry>
        <id>https://stackoverflow.com/q/10943544</id>
        <re:rank scheme="http://stackoverflow.com">2</re:rank>
        <title type="text">How to parse a RSS feed using javascript?</title>
        <category scheme="https://stackoverflow.com/feeds/question/10943544/tags" term="javascript"/><category scheme="https://stackoverflow.com/feeds/question/10943544/tags" term="html5"/><category scheme="https://stackoverflow.com/feeds/question/10943544/tags" term="jquery-mobile"/>
        <author>
            <name>Thiru</name>
            <uri>https://stackoverflow.com/users/1126255</uri>
        </author>
        <link rel="alternate" href="/programming/10943544/how-to-parse-a-rss-feed-using-javascript" />
        <published>2012-06-08T05:34:16Z</published>
        <updated>2012-06-08T06:35:22Z</updated>
        <summary type="html">
            &lt;p&gt;I need to parse the RSS-Feed(XML version2.0) using XML and I want to display the parsed detail in HTML page, I tried in many ways. But its not working. My system is running under proxy, since I am new to this field, I don&#39;t know whether it is possible or not. If any one knows please help me on this. Thanks in advance.&lt;/p&gt;

        </summary>
    </entry>
    <entry>
        <id>https://stackoverflow.com/questions/10943544/-/10943610#10943610</id>
        <re:rank scheme="http://stackoverflow.com">1</re:rank>
        <title type="text">Answer by haylem for How to parse a RSS feed using javascript?</title>
        <author>
            <name>haylem</name>
            <uri>https://stackoverflow.com/users/453590</uri>
        </author>    
        <link rel="alternate" href="/programming/10943544/how-to-parse-a-rss-feed-using-javascript/10943610#10943610" />
        <published>2012-06-08T05:43:24Z</published>   
        <updated>2012-06-08T06:35:22Z</updated>
        <summary type="html">&lt;h1&gt;Parsing the Feed&lt;/h1&gt;

&lt;h3&gt;With jQuery&#39;s jFeed&lt;/h3&gt;

&lt;p&gt;Try this, with the &lt;a href=&quot;http://plugins.jquery.com/project/jFeed&quot; rel=&quot;nofollow&quot;&gt;jFeed&lt;/a&gt; &lt;a href=&quot;http://www.jquery.com/&quot; rel=&quot;nofollow&quot;&gt;jQuery&lt;/a&gt; plug-in&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;jQuery.getFeed({
   url     : FEED_URL,
   success : function (feed) {
      console.log(feed.title);
      // do more stuff here
   }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;With jQuery&#39;s Built-in XML Support&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;$.get(FEED_URL, function (data) {
    $(data).find(&quot;entry&quot;).each(function () { // or &quot;item&quot; or whatever suits your feed
        var el = $(this);

        console.log(&quot;------------------------&quot;);
        console.log(&quot;title      : &quot; + el.find(&quot;title&quot;).text());
        console.log(&quot;author     : &quot; + el.find(&quot;author&quot;).text());
        console.log(&quot;description: &quot; + el.find(&quot;description&quot;).text());
    });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;With jQuery and the Google AJAX APIs&lt;/h3&gt;

&lt;p&gt;Otherwise, &lt;a href=&quot;https://developers.google.com/feed/&quot; rel=&quot;nofollow&quot;&gt;Google&#39;s AJAX Feed API&lt;/a&gt; allows you to get the feed as a JSON object:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$.ajax({
  url      : document.location.protocol + &#39;//ajax.googleapis.com/ajax/services/feed/load?v=1.0&amp;amp;num=10&amp;amp;callback=?&amp;amp;q=&#39; + encodeURIComponent(FEED_URL),
  dataType : &#39;json&#39;,
  success  : function (data) {
    if (data.responseData.feed &amp;amp;&amp;amp; data.responseData.feed.entries) {
      $.each(data.responseData.feed.entries, function (i, e) {
        console.log(&quot;------------------------&quot;);
        console.log(&quot;title      : &quot; + e.title);
        console.log(&quot;author     : &quot; + e.author);
        console.log(&quot;description: &quot; + e.description);
      });
    }
  }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;But that means you&#39;re relient on them being online and reachable.&lt;/p&gt;

&lt;hr&gt;

&lt;h1&gt;Building Content&lt;/h1&gt;

&lt;p&gt;Once you&#39;ve successfully extracted the information you need from the feed, you need to create document fragments containing the elements you&#39;ll want to inject to display your data.&lt;/p&gt;

&lt;hr&gt;

&lt;h1&gt;Injecting the content&lt;/h1&gt;

&lt;p&gt;Select the container element that you want on the page and append your document fragments to it, and simply use innerHTML to replace its content entirely.&lt;/p&gt;
</summary>
    </entry></feed>

फांसी

JQuery के अंतर्निहित XML समर्थन का उपयोग करना

लागू:

$.get('https://stackoverflow.com/feeds/question/10943544', function (data) {
    $(data).find("entry").each(function () { // or "item" or whatever suits your feed
        var el = $(this);

        console.log("------------------------");
        console.log("title      : " + el.find("title").text());
        console.log("author     : " + el.find("author").text());
        console.log("description: " + el.find("description").text());
    });
});

प्रिंट आउट:

------------------------
title      : How to parse a RSS feed using javascript?
author     : 
            Thiru
            https://stackoverflow.com/users/1126255

description: 
------------------------
title      : Answer by haylem for How to parse a RSS feed using javascript?
author     : 
            haylem
            https://stackoverflow.com/users/453590

description: 

JQuery और Google AJAX एपीआई का उपयोग करना

लागू:

$.ajax({
  url      : document.location.protocol + '//ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&callback=?&q=' + encodeURIComponent('https://stackoverflow.com/feeds/question/10943544'),
  dataType : 'json',
  success  : function (data) {
    if (data.responseData.feed && data.responseData.feed.entries) {
      $.each(data.responseData.feed.entries, function (i, e) {
        console.log("------------------------");
        console.log("title      : " + e.title);
        console.log("author     : " + e.author);
        console.log("description: " + e.description);
      });
    }
  }
});

प्रिंट आउट:

------------------------
title      : How to parse a RSS feed using javascript?
author     : Thiru
description: undefined
------------------------
title      : Answer by haylem for How to parse a RSS feed using javascript?
author     : haylem
description: undefined

1
आपके उत्तर के लिए धन्यवाद haylem लेकिन मुझे इसके लिए आउटपुट नहीं मिला। क्या जावास्क्रिप्ट के साथ ओटी संभव है?
थिरू

1
@Tiru: मैंने इस प्रश्न के RSS फ़ीड ( stackoverflow.com/feeds/question/10943544 ) के साथ अंतिम विधि की कोशिश की और यह मेरे लिए ठीक काम किया।
जाइलम ha

8
आपके पास पूरे वर्किंग कोड स्निपेट हो सकते हैं। मुझे यकीन है कि आप अपने दम पर बाकी काम कर सकते हैं।
जाइलम ha

2
@ टिम्मी: क्या कर रहा है? क्या आप थिरु के दोस्त हैं? आपके पास समान समस्या रिपोर्टिंग तकनीकें हैं। मैंने बस अपने कंसोल में अंतिम 2 कोड स्निपेट को कॉपी-पेस्ट किया और उन्हें चलाया और उम्मीद के मुताबिक आउटपुट मिला। आपने क्या किया, कैसे, किस संसाधन के लिए?
जाइलम

2
Google AJAX API को हटा दिया गया है। यह जनवरी 2017 से उपलब्ध नहीं है।
एज़ी

39

एक अन्य पदावनत (@daylight के लिए धन्यवाद) विकल्प, और मेरे लिए सबसे आसान (यह वही है जो मैं SpokenToday.info के लिए उपयोग कर रहा हूं ):

गूगल फ़ीड एपीआई JQuery का उपयोग किए बिना और केवल 2 चरणों के साथ:

  1. पुस्तकालय आयात करें:

    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">google.load("feeds", "1");</script>
  2. फ़ीड / प्रलेखन खोजें (लोड करें ):

    var feed = new google.feeds.Feed('http://www.google.com/trends/hottrends/atom/feed?pn=p1');
    feed.load(function (data) {
        // Parse data depending on the specified response format, default is JSON.
        console.dir(data);
    });
  3. डेटा को पार्स करने के लिए, प्रतिक्रिया प्रारूप के बारे में दस्तावेज़ीकरण देखें


5
Google कहता है: यह एपीआई आधिकारिक तौर पर पदावनत है।

23
Google फ़ीड API को हटा दिया गया है और अब 12/02/2015 तक काम नहीं कर रहा है। बमर
राडदेवस 18

उस कोड के आधार पर, क्या आप फ़ीड url दर्ज करने के लिए एक संकेत जोड़ सकते हैं, फिर जो भी आरएसएस फ़ीड आप चाहते थे उसे पार्स करने के लिए एक मूल्य शामिल करने के लिए संपत्ति को संक्षिप्त करें? उदाहरण के लिए, अगर मैं कई छवियों के साथ काम कर रहा था, तो मैं स्ट्रिंग और मान को document.getElementById('image').style.backgroundImage = "url('" + src + "')";
समेट

2
Google AJAX API को हटा दिया गया है। यह जनवरी 2017 से उपलब्ध नहीं है
एज़ी

7
किसी को भी अब उपयुक्त विकल्प का पता है कि Googles API डाउन है?
द्वंद्व

3

यदि आप अपने आरएसएस विजेट के लिए Google फ़ीड एपीआई के लिए एक सरल और मुफ्त विकल्प की तलाश कर रहे हैं तो rss2json.com इसके लिए एक उपयुक्त समाधान हो सकता है।

आप यह देखने का प्रयास कर सकते हैं कि यह नीचे दिए गए एपीआई प्रलेखन से एक नमूना कोड पर कैसे काम करता है :

google.load("feeds", "1");

    function initialize() {
      var feed = new google.feeds.Feed("https://news.ycombinator.com/rss");
      feed.load(function(result) {
        if (!result.error) {
          var container = document.getElementById("feed");
          for (var i = 0; i < result.feed.entries.length; i++) {
            var entry = result.feed.entries[i];
            var div = document.createElement("div");
            div.appendChild(document.createTextNode(entry.title));
            container.appendChild(div);
          }
        }
      });
    }
    google.setOnLoadCallback(initialize);
<html>
  <head>    
     <script src="https://rss2json.com/gfapi.js"></script>
  </head>
  <body>
    <p><b>Result from the API:</b></p>
    <div id="feed"></div>
  </body>
</html>


3

किसी और के लिए इसे (2019 में) पढ़ने के बाद दुर्भाग्य से अधिकांश जेएस आरएसएस पढ़ने के कार्यान्वयन अब काम नहीं करते हैं। सबसे पहले Google API बंद हो गया है इसलिए यह अब एक विकल्प नहीं है और कॉर्स सुरक्षा नीति के कारण आप आमतौर पर RSS से क्रॉस-डोमेन फीड करने का अनुरोध नहीं कर सकते।

Https://www.raymondcamden.com/2015/12/08/parsing-rss-feeds-in-javascript-options (2015) पर उदाहरण का उपयोग करते हुए मुझे निम्नलिखित मिलते हैं:

Access to XMLHttpRequest at 'https://feeds.feedburner.com/raymondcamdensblog?format=xml' from origin 'MYSITE' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

यह सही है और अंतिम वेबसाइट द्वारा एक सुरक्षा सावधानी है लेकिन अब इसका मतलब यह नहीं है कि ऊपर दिए गए जवाब काम करने की संभावना नहीं है।

मेरा समाधान संभवतया PHP के माध्यम से RSS फ़ीड को पार्स करने के लिए होगा और जावास्क्रिप्ट को अंतिम-गंतव्य फ़ीड तक पहुंचने की कोशिश करने के बजाय मेरे PHP तक पहुंचने की अनुमति देगा।


1

यदि आप एक सादे जावास्क्रिप्ट एपीआई का उपयोग करना चाहते हैं, तो https://github.com/hongkiat/js-rss-reader/ पर एक अच्छा उदाहरण है

Https://www.hongkiat.com/blog/rss-reader-in-javascript/ पर पूरा विवरण

यह fetchएक वैश्विक विधि के रूप में विधि का उपयोग करता है जो अतुल्यकालिक रूप से एक संसाधन प्राप्त करता है। नीचे कोड की एक तस्वीर है:

fetch(websiteUrl).then((res) => {
  res.text().then((htmlTxt) => {
    var domParser = new DOMParser()
    let doc = domParser.parseFromString(htmlTxt, 'text/html')
    var feedUrl = doc.querySelector('link[type="application/rss+xml"]').href
  })
}).catch(() => console.error('Error in fetching the website'))

आपके द्वारा उद्धृत लेख का उदाहरण काम नहीं करता है। आपको यह काम करने के लिए एक कोर प्रॉक्सी का उपयोग करने के लिए rss.js में लाइनों को 15 और 26 को संशोधित करने की आवश्यकता है। यदि आप नहीं करते हैं, तो आपको समान मूल नीति के कारण कुछ त्रुटियां मिलेंगी: developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/… इसके अलावा, भ्रूण एपीआई में काम नहीं करता है Microsoft इंटरनेट एक्सप्लोरर 11, बल्कि XMLHTTPRequest का उपयोग करें: developer.microsoft.com/en-us/microsoft-edge/status/fetchapi मैंने अपने स्वयं के सर्वर पर इस स्रोत कोड का उपयोग किया। मैं आपको पोस्ट करने से पहले कुछ चेक करने में कुछ समय बिताने के लिए प्रोत्साहित करता हूं।
गौसेज

CorS समस्या इस उत्तर से संबंधित नहीं है। कृपया आपके द्वारा उल्लिखित CORS लिंक या कुछ अन्य संसाधनों को पढ़ने के लिए CORS समस्या स्टैकओवरफ़्लो . com/questions/10636611/… को पुनः पढ़ें ।
अलीरज़ा फ़ताही

कोई भी CORS समस्या आपके उत्तर से संबंधित नहीं है। आपके द्वारा उद्धृत लेख में दिए गए उदाहरण का उपयोग नहीं किया जा सकता है और जाहिर है कि यह उन हेडर को सेट करने के लिए मेजबानों तक है, यह क्लाइंट की तरफ से तय नहीं किया जा सकता है, केवल वर्कअराउंड में कॉर्स प्रॉक्सी का उपयोग करना शामिल है। क्या आपने कभी इस लेख में उल्लिखित स्रोत कोड की कोशिश की है?
गौसीज

बेशक, हम इसे हाइब्रिड मोबाइल ऐप में बिना किसी समस्या के उपयोग कर रहे हैं।
अलीरज़ा फ़तही

एक मोज़िला योगदानकर्ता ने अपने स्वयं के प्रोजेक्ट में इस स्रोत कोड के मेरे उपयोग के बारे में मेरा एक सवाल बंद कर दिया और मुझे एक CORS प्रॉक्सी का उपयोग करने की सलाह दी। यह सर्वर साइड में काम कर सकता है, शायद Node.JS में लेकिन यह काम नहीं कर सकता जैसा कि क्लाइंट साइड में है। मैं एकमात्र व्यक्ति नहीं हूं, जिसे इस स्रोत कोड की समस्या थी और मैंने सीएसएस-ट्रिक्स पर एक समान लेख में कुछ टिप्पणियां देखीं: css-tricks.com/how-to-fetch-and-parse-rss-feeds-in -जावास्क्रिप्ट /… आप एक बहुत विशिष्ट मामले में हैं।
गौसीज

0

आप jquery-rss या वेनिला RSS का उपयोग कर सकते हैं , जो अच्छा टेम्पलेटिंग के साथ आता है और उपयोग करने के लिए सुपर आसान है:

// Example for jquery.rss
$("#your-div").rss("https://stackoverflow.com/feeds/question/10943544", {
    limit: 3,
    layoutTemplate: '<ul class="inline">{entries}</ul>',
    entryTemplate: '<li><a href="{url}">[{author}@{date}] {title}</a><br/>{shortBodyPlain}</li>'
})

// Example for Vanilla RSS
const RSS = require('vanilla-rss');
const rss = new RSS(
    document.querySelector("#your-div"),
    "https://stackoverflow.com/feeds/question/10943544",
    { 
      // options go here
    }
);
rss.render().then(() => {
  console.log('Everything is loaded and rendered');
});

काम के उदाहरण के लिए http://jsfiddle.net/sdepold/ozq2dn9e/1/ देखें ।


0

अब इसके लिए एक अच्छा समाधान खोजने की कोशिश कर रहा हूं, मैं फीडबैक jQuery RSS / ATOM फीड प्लगिन पर हुआ जो कि jQuery फ़ीड एपीआई के माध्यम से RSS और एटम फ़ीड को पार्स और प्रदर्शित करने का एक बड़ा काम करता है । मूल XML-आधारित RSS फ़ीड के लिए, मैंने पाया है कि यह एक आकर्षण की तरह काम करता है और इसके लिए कोई सर्वर-साइड स्क्रिप्ट या अन्य स्थानीय रूप से चलने के लिए अन्य CORS वर्कअराउंड की आवश्यकता नहीं है।


0

मैं कई भ्रामक लेखों और उत्तरों से इतना उद्वेलित था कि मैंने अपना स्वयं का आरएसएस रीडर लिखा: https://gouessej.wordpress.com/2020/06/28/comment-creer-un-lecteur-rss-en-avascript-how- करने के लिए बना एक आरएसएस रीडर में जावास्क्रिप्ट /

आप AJAX अनुरोधों का उपयोग RSS फ़ाइलों को लाने के लिए कर सकते हैं, लेकिन यह तभी काम करेगा जब आप एक CORS प्रॉक्सी का उपयोग करेंगे। मैं आपको अधिक मजबूत समाधान देने के लिए अपने स्वयं के कोर प्रॉक्सी लिखने की कोशिश करूंगा। इस बीच, यह काम करता है, मैंने इसे डेबियन लिनक्स के तहत अपने सर्वर पर तैनात किया।

मेरा समाधान JQuery का उपयोग नहीं करता है, मैं केवल सादे जावास्क्रिप्ट मानक API का उपयोग करता हूं जिसमें कोई तृतीय पक्ष लाइब्रेरी नहीं है और यह Microsoft इंटरनेट एक्सप्लोरर 11 के साथ भी काम करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.