HTML from RSS

Скрипт вывода новостей наших партнёров на главной из их 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 задаёт колличество загружаемых новостей.



Добавить комментарий

Войти с помощью: