2010-04-20 3 views
0

Это моя функция Javascript, который захватывает канал RSS через прокси-скрипт, а затем выплевывает 5 последние пункты RSS из канала вместе со ссылкой на мою таблицу стилей:Проблемы прокси с Javascript Междоменного RSS потоком 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; 
    } } 

Вот код из 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 

Теперь, когда я пытаюсь загрузить это на любом домене, что это не мой сайт ничего не нагрузки. Я не получаю ошибок JS, но я на вкладке «Консоль» в firebug получает «407 Proxy Authentication Required»

Так что я не уверен, как это сделать.

Цель состоит в том, чтобы иметь возможность захватить RSS-канал, проанализировать его, чтобы захватить заголовки и ссылки и выплевывать их в какой-то HTML на любом веб-сайте в Интернете. Я "м в основном делаю простой RSS виджет для различных RSS моего сайта каналов.

My Javascript является ненормальным

Я действительно новичок в JavaScript. Я знаю, JQuery довольно хорошо, но я не был способный использовать его в этом случае, потому что этот скрипт будет внедрен на любой сайт, и я не могу положиться на библиотеку jQuery. Поэтому я решил написать некоторый базовый Javascript, основанный на доступных вариантах синтаксического анализа XML.

Что такое x и y vars

Они, как мой сайт, создают RSS-каналы, так это то, что первый заголовок на самом деле является заголовком RSS-канала. Второй заголовок - это заголовок первого элемента. Первая ссылка - это ссылка на первый элемент. Поэтому, когда я использую javascript для получения заголовка, мне нужно сначала захватить первый заголовок (который является заголовком RSS), а затем начать со второго заголовка, который является первым заголовком элемента. Извините за путаницу, но я не думаю, что это связано с моей проблемой. Просто хотел уточнить мой код.

ответ

3

Поскольку я обнаружил YQL, это мой метод выбора при работе с этими типами случаев использования, потому что я могу хранить все в JavaScript и не беспокоиться о междоменных прокси. Еще лучше, вы сможете разгрузить всю обработку клиенту.

Этот простой запрос будет делать это для вас: выберите название, ссылку с RSS, где URL = 'http://rss.news.yahoo.com/rss/topstories'

Постоянная ссылка на запрос: 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

Пример фрагмента кода:

<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> 

Просто вырежьте & вставьте это в файл HTML и взломайте firebug, чтобы осмотреть его дальше.

+0

Спасибо. Я пробую это, но как именно я разбираю его, чтобы захватить название и ссылку на каждый элемент? – Amir

+0

Nevermind Я понял это. Большое спасибо! – Amir

+0

Извините, я, вероятно, должен был предоставить лучший пример того, как что-то сделать с объектом данных. Обновлено. –

Смежные вопросы