2010-04-20 4 views
0

Ceci est ma fonction Javascript qui saisit un flux RSS via le script proxy et recrache ensuite les 5 derniers rss articles de l'alimentation avec un lien vers mon stylesheet:Problèmes de proxy avec Javascript Cross Domain RSS Feed Parsing

function getWidget (feed,limit) { if (window.XMLHttpRequest) { 
     xhttp=new XMLHttpRequest() 
    } else { 
     xhttp=new ActiveXObject("Microsoft.XMLHTTP") 
    } 
    xhttp.open("GET","http://MYSITE/proxy.php?url="+feed,false); 
    xhttp.send(""); 
    xmlDoc=xhttp.responseXML; 
    var x = 1; 
    var div = document.getElementById("div"); 
    div.innerHTML = '<link type="text/css" href="http://MYSITE/css/widget.css" rel="stylesheet" /><div id="rss-title"></div></h3><div id="items"></div><br /><br /><a href="http://MYSITE">Powered by MYSITE</a>'; 
    document.body.appendChild(div); 
    content=xmlDoc.getElementsByTagName("title"); 
    thelink=xmlDoc.getElementsByTagName("link"); 
    document.getElementByTagName("rss-title").innerHTML += content[0].childNodes[0].nodeValue; 
    for (x=1;x<=limit;srx++) { 
     y=x; 
     y--; 
     var theitem = '<div class="item"><a href="'+thelink[y].childNodes[0].nodeValue+'">'+content[x].childNodes[0].nodeValue+'</a></div>'; 
     document.getElementById("items").innerHTML += theitem; 
    } } 

Voici le code de proxy.php:

$session = curl_init($_GET['url']);     // Open the Curl session 
curl_setopt($session, CURLOPT_HEADER, false);   // Don't return HTTP headers 
curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // Do return the contents of the call 
$xml = curl_exec($session);       // Make the call 
header("Content-Type: text/xml");     // Set the content type appropriately 
echo $xml;  // Spit out the xml 
curl_close($session); // And close the session 

maintenant, lorsque je tente de charger ce sur tous les domaines qui n'est pas mes charges rien du site. Je ne reçois pas d'erreurs JS, mais dans l'onglet Console de firebug, je reçois "407 Authentification proxy requise"

Donc, je ne suis pas vraiment sûr de la façon de faire ce travail.

L'objectif est de pouvoir saisir le flux RSS, l'analyser pour saisir les titres et les liens et le cracher dans du code HTML sur n'importe quel site Web. Je "suis fondamentalement se simple widget RSS pour différents flux de mon site RSS.

Mon Javascript est wack

Je suis vraiment un débutant avec Javascript. Je sais très bien jQuery, mais je ne Dans ce cas, je ne peux pas vraiment me fier à la bibliothèque jQuery, j'ai donc décidé d'écrire du Javascript de base en utilisant les options d'analyse XML disponibles par défaut. Soyez cool!

Qu'est-ce que les variables x et y

La façon dont mon site crée des flux RSS est que le premier titre est en fait le titre du flux RSS. Le deuxième titre est le titre du premier article. Le premier lien est le lien vers le premier élément. Donc, lorsque j'utilise le javascript pour obtenir le titre, je dois d'abord saisir le premier titre (qui est le titre RSS) et ensuite commencer par le second titre qui est le premier titre de l'article. Désolé pour la confusion, mais je ne pense pas que cela soit lié à mon problème. Je voulais juste clarifier mon code.

Répondre

3

Depuis que j'ai découvert YQL, c'est ma méthode de choix pour gérer ces types d'utilisation car je peux tout garder en JavaScript et ne pas avoir à me soucier des proxys inter-domaines. Mieux encore, vous pourrez décharger tout le traitement au client.

Cette simple requête fera pour vous: titre choisi, lien de rss où url = 'http://rss.news.yahoo.com/rss/topstories'

Lien permanent à la recherche: https://developer.yahoo.com/yql/console/?q=select%20title%2C%20link%20from%20rss%20where%20url%3D%27http%3A%2F%2Frss.news.yahoo.com%2Frss%2Ftopstories%27

extrait de l'échantillon:

<script> 

function cbfunc(data){ 
    for(var i in data.query.results.item) { 
    var item = data.query.results.item[i]; 
    console.log(item.title); 
    console.log(item.link); 
    } 
} 

function execYQL(yql, callbackFuncName) { 
    var url = "http://query.yahooapis.com/v1/public/yql?q=" + encodeURIComponent(yql) + "&format=json&callback=cbfunc"; 
    var head= document.getElementsByTagName('head')[0]; 
    var script= document.createElement('script'); 
    script.type= 'text/javascript'; 
    script.src= url; 
    head.appendChild(script); 
} 

execYQL("select title, link from rss where url='http://rss.news.yahoo.com/rss/topstories'"); 

</script> 

Juste couper & collez cela dans un fichier HTML et crack firebug ouvert pour inspecter plus loin.

+0

Merci. J'essaye ceci, mais comment exactement je l'analyse pour saisir chaque titre et lien d'article? – Amir

+0

Nevermind je l'ai compris. Merci beaucoup! – Amir

+0

Désolé, je devrais probablement avoir fourni un meilleur exemple de la façon de faire quelque chose avec l'objet de données. Actualisé. –