Скрипт вывода новостей наших партнёров на главной из их rss.
За основу был взят скрипт который работал на api yahoo,
но для надёжности и под нужды был переделан.
Так же на нашем сервере разместили аналог yahoo rss to json конвертера:
<?php header("Content-type:application/json; charset=utf-8"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); if (isset ($_GET['feedurl'])) { $urlfeed=filter_var($_GET['feedurl'], FILTER_SANITIZE_URL); $fileContents= file_get_contents($urlfeed); $simpleXml = simplexml_load_string($fileContents,'SimpleXMLElement', LIBXML_NOCDATA); if ($simpleXml === false) { echo "$fileContents\n"; echo "Failed loading XML: "; foreach(libxml_get_errors() as $error) { echo " ", $error->message; } } else{echo json_encode($simpleXml);} } else {echo 'false'.$_GET['feedurl'];} ?>
Для успешной загрузки с поддомена была добавлена строка в .htaccess
Header add Access-Control-Allow-Origin "*"
Код на javascript с использованием JQuery:
/********************************************************************* by Malicious Fox 2016 for artv-news.ru * modifed from : * #### jQuery htmlfromrss.js V.0.001 #### * Coded by Ican Bachors 2016. * http://ibacor.com/labs/htmlfromrssjs *********************************************************************/ jQuery(function($) { $.fn.htmlfromrss = function(f) { $(this).each(function(i, a) { $(this).html('<div class="htmlfromrss"><ul id="htmlfromrss' + i + '"></ul></div>'); rsstohtml($(this).data('htmlfromrss'), i) }); function relative_time(x) { if (!x) { return } var a = x; a = $.trim(a); a = a.replace(/\.\d\d\d+/, ""); a = a.replace(/-/, "/").replace(/-/, "/"); a = a.replace(/T/, " ").replace(/Z/, " UTC"); a = a.replace(/([\+\-]\d\d)\:?(\d\d)/, " $1$2"); var b = new Date(a); var c = (arguments.length > 1) ? arguments[1] : new Date(); var d = parseInt((c.getTime() - b) / 1000); d = (d < 2) ? 2 : d; var r = ''; if (d < 60) { r = 'Только что' } else if (d < 120) { r = 'Минуту назад' } else if (d < (45 * 60)) { r = (parseInt(d / 60, 10)).toString() + ' мин. назад' } else if (d < (2 * 60 * 60)) { r = 'Час назад' } else if (d < (24 * 60 * 60)) { r = '' + (parseInt(d / 3600, 10)).toString() + ' ч. назад' } else if (d < (48 * 60 * 60)) { r = 'День назад' } else { r = (parseInt(d / 86400, 10)).toString() + ' д. назад' } return (r.match('NaN') ? x : r) } function checkonnull(p) { if(p != undefined && p != null && p != ''){return true;} } function rsstohtml(d, i) { $.ajax({ url: 'https://api.artv-news.ru/rssjson.php?feedurl='+encodeURIComponent(d), crossDomain: true, dataType: 'json', beforeSend: function() { $('.htmlfromrss ul#htmlfromrss' + i).hide();} }).done(function(c) { $('.htmlfromrss ul#htmlfromrss' + i).show(); var ist=c.channel.title; var istlink=c.channel.link.replace("#/$#", "" ); var s = ""; defaultimg='//api.artv-news.ru/src/images/rss_circle.png'; $.each(c.channel.item, function(e, a) { if (e < f) { var b = relative_time(a.pubDate), desk = a.description; if(checkonnull(a.enclosure)== true) { if(checkonnull(a.enclosure["@attributes"].url)== true && a.enclosure["@attributes"].type == 'image/jpeg') { img='<img src="//ir0.mobify.com/75/99/'+a.enclosure["@attributes"].url+'" width="75" height="75" alt="'+a.title+'" border="0" onerror="this.onerror=null; this.src=\''+defaultimg+'\'">';} } else { img='<img src="'+defaultimg+'" width="75" height="75" alt="'+a.title+'" border="0" >'; } s += '<li class="partnrss"><a href="' + a.link + '" target="_BLANK" rel="nofollow"><span class="partntitlerss">' + a.title + '</span>'; s += (img != null && img != undefined ? '<span class="partnimgrss"> ' + img + '</span>' : ''); s += (b != null && b != undefined ? '<span class="partndaterss">' + b + '</span>' : ''); s += (desk != null && desk != undefined ? '<span class="partnpostrss">' + desk.replace(/<.*?>/g, "").substr(0,150) + ' ...</span>' : ''); s += (ist != null && ist != undefined ? '<span class="partnistrss">Источник: ' + ist + '</span></a></li>' : ''); } }); $('.htmlfromrss ul#htmlfromrss' + i).html(s) }) } } });
Подключается у нас так:
<script src="https://api.artv-news.ru/src/js/rssfromjson.js"></script> <div class="row"> <div class="rssv" data-htmlfromrss="http://адресс ленты партнёра"></div> </div> <div class="row"> <div class="rssv" data-htmlfromrss="http://адресс ленты другого партнёра"></div> </div> <script>jQuery(document).ready(function(){jQuery(".rssv").htmlfromrss(limit = 1);});</script>
Параметр limit задаёт колличество загружаемых новостей.