2016-07-14 2 views
3

Я хотел бы получить самый новый ITEM в rss-ссылке (Reuters: Top News), и когда придет новый ITEM, PHP/AJAX заменит старый ITEM на новый.Проанализируйте XML из RSS с помощью PHP и передайте с помощью AJAX

Я попытался сделать это с помощью PHP и AJAX, но я получаю пустую страницу или «Неустранимая ошибка: максимальное время выполнения 30 секунд превышено в C: \ xampp \ htdocs \ test4.php в строке 11».

Функция:

<?php function parserSide($feedURL) { $rss = simplexml_load_file($feedURL); $output = " 
<ul class='newsSide'>"; $i = 0; foreach ($rss->channel->item as $feedItem) { $i++; $output .= " 
    <li><a href='$feedItem->link' title='$feedItem->title'>" . $feedItem->title . "</a></li>"; if($i >= 1) break; } $output .= "</ul>"; return $output; } ?> 
<?php 
    if(isset($_GET['fetchOnly'])){ 
     $url = 'http://feeds.reuters.com/reuters/topNews'; 

     $response = array(); 
     $handle = fopen($url, 'r'); 
     if ($handle) { 
      while (($data = simplexml_load_file($url)) !== FALSE) 
      { 
       $response = parserSide($url);     
      } 
      fclose($handle); 
     } 
     echo $response; 
     die(); 
    } 
?> 
    <div id="responseText"></div> 
    <script> 
     // run the function, it will re-run itself 
     fetchRate(); 

     function fetchRate() { 
      // create the new AJAX Object 
      xmlhttp = new XMLHttpRequest(); 
      // this handles the request 
      xmlhttp.onreadystatechange = function() { 
       if (xmlhttp.readyState == XMLHttpRequest.DONE) { 
        // if the request came back successfully 
        if (xmlhttp.status == 200) { 
         // write the response to a div 
         div = document.getElementById("responseText") 
         div.innerHTML = xmlhttp.responseText; 
        } else { 
         // if the request had an error 
         div.innerHTML = div.innerHTML + '<br />Error fetching rates error code : ' + xmlhttp.status; 
        } 
        // rerun this function to fetch updates 
        setTimeout(fetchRate, 1000); 
       } 
      }; 
      // open the AJAX Object 
      xmlhttp.open("GET", "<?= basename(__FILE__) ?>?fetchOnly", true); 
      // send the AJAX request 
      xmlhttp.send(); 
     } 
    </script> 

Заранее спасибо

+0

Возможно, вы сможете сделать это напрямую, используя только javascript. – Iceman

+0

Мне нужен php для добавления названия в db после @iceman – TheQuestionerMan

+0

ok. затем давайте c. – Iceman

ответ

1

Простой XML возвратит ложь, если загрузка не удалась, поэтому использовать это просто для проверки. Одноточечная надежная проверка.

<?php 
    function parserSide($feedURL) { 
    $rss = simplexml_load_file($feedURL); 
    $output = ""; 
    if($rss){ 
     //simple_xml load was a success. It does everything 
     $output .= "<ul class='newsSide'>"; 
     $i = 0; 
     foreach ($rss->channel->item as $feedItem) { 
      $i++; 
      $output .= "<li><a href='$feedItem->link' title='$feedItem->title'>" . $feedItem->title . "</a></li>"; 
      if($i >= 1) break; 
     } 
     $output .= "</ul>"; 
    } 
    return $output; 
} 
if(isset($_GET['fetchOnly'])){ 
    $url = 'http://feeds.reuters.com/reuters/topNews'; 
    $handle = fopen($url, 'r'); 
    $response = parserSide($url); 
    echo $response; 
    die(); 
} 
?> 
<div id="responseText"></div> 
<script> 
    // run the function, it will re-run itself 
    fetchRate(); 
    function fetchRate() { 
     var div = document.getElementById("responseText") 
     div.innerHTML = "attempting to load data from server...."; 
     // create the new AJAX Object 
     xmlhttp = new XMLHttpRequest(); 
     // this handles the request 
     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == XMLHttpRequest.DONE) { 
       // if the request came back successfully 
       if (xmlhttp.status == 200) { 
        // write the response to a div 
        div.innerHTML = xmlhttp.responseText; 
       } else { 
        // if the request had an error 
        div.innerHTML = div.innerHTML + '<br />Error fetching rates error code : ' + xmlhttp.status; 
       } 
       // rerun this function to fetch updates 
       setTimeout(fetchRate, 1000); 
      } 
     }; 
     // open the AJAX Object 
     xmlhttp.open("GET", "?fetchOnly", true); 
     // send the AJAX request 
     xmlhttp.send(); 
    } 
</script> 
+1

Perfect thank you @ice – TheQuestionerMan

+0

http://stackoverflow.com/questions/38682343/loop-of-rss-absorption-with-phpajax Как я могу сделать цикл входящей части? tnx @iceman – TheQuestionerMan

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