Релиз "Livestreet RSS Content Importer" 1.0.1 ( FOR LS 1.X+CRON)


Приветствую. Все таки выкроил время из оффлайна, и обновил плагин для актуальной версии Livestreet. Изменения минимальные, но есть приятная новость:
Теперь плагин умеет обновлять неограниченное(теоретически, конечно) количество блогов из любого числа источников.

Как это работает:
Добавляем в панель управление хостингом в cron jobs ссылку вида
/plugins/content/include/cron/get-feed.php?blog_id=2&feed_n=1
где, blog_id айди блога для публикации, смотреть в админке здесь:

blog_id LS
а, feed_n — ключ(не порядковый номер, хотя и должен быть целым числом из соображений бесопасности) в массиве $config['feeds'], который в файле plugins/content/config/config.php
LS импорт контента

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

Пост у меня на блоге
Мануал по установке
Фак по работе
Скачать с официального источника(Пока на модерации)
Скачать с multiupload
На пиво автору

Огромное спасибо всем кто качал, хвалил и ругал первую версию. Релиз плагина состоялся только благодаря Вам.

ВНИМАНИЕ
1) Хоть и в коде плагина минимальное количество изменений по сравнению с первой версией, все проблемы после его установки ложатся на плечи пользователей. Автор отказывается от ответственности.
2) Качество кода плагина прямо пропорционально его цене. Хотите улучшить код — прямо пишите какая строка написана «криво» или «не профессионально». Я далеко не программист.
3) На вкус и цвет…

85 комментариев

avatar
Ура! Наконец-то! А то я запарился обновлять вручную :-)
avatar
Респект! А то тут уже и не надеялись :)
  • aex
  • 0
avatar
Спасибо, уважаемые.
avatar
А не у вас ли я на серче купил плагин?)
avatar
Никогда этот плагин не продавал. И версия под 0.4.х и 1.х — были и остаются бесплатними. Скорее всего, вас развели. Ради интереса. можно ссылку на топик или профал барыги.
avatar
Скорее всего другой плагин. Ну да ладно, все равно не нашёл применения, что обидно)
avatar
Не нашел применения?
avatar
Не плохая задумка, сподвигло на мысль открыть некий сайт только для себя и грабить инфу на разные тематики по инфобезу с хабра и других ресурсов в закрытом режиме :D
avatar
Некий rss Ридер сделать)
avatar
Да о чем тут говорить. Настроить полные тексты да по крону… Это вообще золотое дно, для тех, кто понимает :)
avatar
А как же АГС? Ну, разве, что действительно «в закрытом режиме».
Уважаемые, отписываетесь, по крону работает нормально?
avatar
Я же не говорю, для тупого наполнения сайта, а для тех, кто понимает, что дальше с этим делать :) У меня по крону работает нормально. Правда, у меня свой крон, я еще на прежних версиях настроил. Но, думаю, что и с этим все будет ок.
avatar
АГС
Если не банчить ссылками на биржах, разбавлять уником и копипастить с 5 мест РЕГУЛЯРНО на сайт с возрастом, то АГСа можно избежать.
Трафа будет около 0, следовательно и монетизировать на контексте крайне сложно, практически невозможно.

aex верно говорит, тупой копипаст только во вред и на нём не заработать.
avatar
Без крона работает? т.е вручную
avatar
Ну конечно, есть возможность работы в ручную. Можно тянуть ленту как по ссылке, так и после обработки, из файла.
avatar
У вас на сайте написано что плагин отображается в админке. В aceAdminPanel его нет. Это мелочь, но было бы приятно его там увидеть :)
  • ARM
  • 0
avatar
извиняюсь. почистил кеш и все появилось.
avatar
Уважаемые, нужны замечания по коду и функционалу. Может кому чего не нравится, или хоте ли бы видеть это по своему? Спасибо.
avatar
Да и так работает нормально. Ну, если уж совсем чтобы барство было, то можно еще в самой форме сделать опции выбора, например, публиковать ли сразу на главную, от какого юзера и т.п. Ну и было бы совсем замечательно, чтобы плагин сам брал полную ленту, чтобы не прибегать к сторонним сервисам.
avatar
Да. Сделать бы сбор всей новости, а не только заголовка с первым абзацем и плагин стал бы золотым!
avatar
Не работает толком плагин через крон у меня. :-( Ничего не выводит на сайте.
avatar
— проверьте /logs/cron.txt, пишет ли туда чего плагин.
— попробуйте в браузере вбить вручную site_url/plugins/content/include/cron/get-feed.php?blog_id=2&feed_n=1
— попробуйте увеличить max_execution_time
avatar
Работает :-) Правда есть проблема: поставил обновлять ленту раз в час. Он обновляет и на выходе я получаю в закрытый блог примерно 10 статей. Из них я удаляю семь, три правлю по полной программе. Но через час мне приходят семь удаленных как новенькие :-) Как лучше всего решить эту проблему?
avatar
Раз в час это слишком часто. Инфа не успевает обновляться.
avatar
А как оптимальнее обновления ставить?
avatar
У вас немножко другая ситуация. LS, при публикации нового топика, сверяет его хеш( $oTopic->setTextHash) с теми что есть в базе. А так как вы изменяете тексты, наш движок, думает что вы публикуете новый топик, и пропускает его. Ну и aex абсолютно прав. Посмотрите как часто обновляются новости на доноре, и подберите оптимальное время для парсинга.
avatar
Да лучше сделайте один закрытый блог и никого туда не приглашайте, по-типу «бездны», куда будет вся информация вам граббиться хоть раз в час, хоть в пять минут. Если новость нужная — переносите ее в нужный блог и там уже правьте, исходник при следующем запуске крона вернется в закрытый блог.
avatar
Уважаемые, у кого есть возможность, перенесите пожалуйста топик в «Дополнительные модули и доработки для LiveStreet»
avatar
Если будете обновлять плагин, поправьте пожалуйста в русском языке ошибки:

'select_a_blog'=>'Вывберите блог:',
на
'select_a_blog'=>'Выберите блог:',

и

'publish_materrials' =>'Опубликавать топики',
на
'publish_materrials' =>'Опубликовать топики',
avatar
Как мне стыдно. Конечно исправлю. Спасибо.
avatar
а почему бы не встроить в этот плагин функционал подобных ресурсов www.wmutils.com/fulltextrss/ fulltextrssfeed.com/ + добавить галочку «указать или нет» ссылку на сайт с которого берется инфа.
avatar
Дело в том, что это не совсем просто, как кажется. Если подскажите подобную библиотеку, или исходник такого сервиса — прикручу, обязательно.
avatar
Посмотри здесь.
avatar
Не получилось сделать подобный функционал?
avatar
Тоже сначала использовал fulltextrssfeeds, потом понял что он не грабит видео из ютуба в новости с нужного ресурса, попросил на работе, помогли с парсером, может поможет кому.

<?php

$urls = array_map('trim', file('warsow.txt'));
header('Content-type: text/xml');
$rss = new DOMDocument;
$rss->load('http://www.esreality.com/rss_xml.php?category=41');
$items = $rss->getElementsByTagName('item');
$remove = array();
foreach($items as $item) {
	$link = $item->getElementsByTagName('link')->item(0);
	if(!in_array($link->nodeValue, $urls)) {
		$desc = $item->getElementsByTagName('description')->item(0);
		$html = new DOMDocument;
		@$html->loadHTMLFile($link->nodeValue);
		$xpath = new DOMXPath($html);
		$contents = $xpath->query('/html/body/div[@id="middle"]/div[@class="post"]/div[@class="postbox"]/div[@class="postcontent"]/div[@class="wrap"]')->item(0);
		foreach($contents->getElementsByTagName('img') as $img) {
			$src = $img->getAttribute('src');
			if(false === strpos($src, 'http://')) {
				$img->setAttribute('src', 'http://www.esreality.com' . $src);
			}
		}
		foreach($contents->getElementsByTagName('a') as $a) {
			$href = $img->getAttribute('href');
			if($href && false === strpos($href, 'http://')) {
				$a->setAttribute('href', 'http://www.esreality.com' . $href);
			}
		}
		$cdata = new DOMCdataSection($contents->ownerDocument->saveXML($contents));
		$desc->replaceChild($cdata, $desc->childNodes->item(0));
		$urls[] = $link->nodeValue;
	} else {
		$remove[] = $item;
	}
}
file_put_contents('esreality.txt', implode(PHP_EOL, array_slice($urls, -$items->length, $items->length)));
foreach($remove as $item) {
	$item->parentNode->removeChild($item);
}
echo $rss->saveXML();
avatar
у кого-нибудь получилось докрутить с использованием сторонних библиотек помимио fulltextrssfeeds, чтобы парсился весь текст?
готов даже приобрести решение
avatar
извините за глупые вопросы полную новость грабит? или только то что отдает rss?
avatar
сорри, читаю faq
avatar
fulltextrssfeed.com/

Дальше разберетесь :)
avatar
у меня с него лента не публикуется в закрытый блог
avatar
Не знаю, у меня все замечательно публикуется — полный текст rss с картинками, как положено. В закрытый блог. Там разбираю, уникализирую текст и перепубликовываю в нужный открытый блог…
avatar
Тоже, сначала использовал систему закрытых блогов, потом практика показала, что удобнее сразу заливать в черновики личного блога админа.
avatar
хотя и в открытый тоже не публикует :)
avatar
попробовал разные rss. с каких-то нормально публикуется, а с каких-то нет. жаль что не проставляется ссылка на источник.
avatar
1. Все-таки жизненно не хватает указание источника, можно как-нибудь в конце добавлять домен откуда дернута запись? или непосредственно сам урл записи.
2. Запустил сейчас на публикацию для теста с rss своего же сайта — количество топиков в блоге не обновляется
3. При публикации лент с внешних ресурсов возникает ошибка «топики не опубликованы», т.е. может быть это и ограничение хостера, т.к. некоторые блокируют скриптам доступ к внешним сайтам, как-нибудть можно попросить скрипт вывести расширенную отлаточную инфу, например на что ругается в случае ошибки публикации.
avatar
ребят, подскажите, как немножко допилить плагин, т.е. в конце топика выводить url записи из RSS-потока, который заключен между тегами .

В файлике ActionFeed.class.php есть код, который отвечает за это…
if (isPost('go'))
			{
				$this->Security_ValidateSendForm();		
				if(func_check(getRequest('go',null,'post'),'text') && (func_check(getRequest('blog_id',null,'post'),'id')))
				{
					$this->sBlogId = getRequest('blog_id',null,'post');		
					if(!getRequest('rss',null,'post') && func_check($_FILES['import_file']['tmp_name'],'text')){
						$this->sFilePath = $_FILES['import_file']['tmp_name'];
					}
					elseif(func_check(getRequest('rss',null,'post'),'text') && !$_FILES['import_file']['tmp_name']){
						$this->sFilePath = getRequest('rss',null,'post');
					}
					else $this->Message_AddError($this->Lang_Get('plugin.content.select_the_source'));
					$this -> aRssFeed = $this->PluginContent_Xml_RsstoArray($tag = 'item',
																			$array = array('title','description','category'),
																			$url = $this->sFilePath);
					if(!$this->PluginContent_Topics_AddTopics($this->aRssFeed,$this->sBlogId))
						{
							$this->Message_AddError($this->Lang_Get('plugin.content.topics_have_not_been_published'));
						}else{
							$this->Message_AddNotice($this->Lang_Get('plugin.content.topics_successfully_published'));
						};				
				}
				
			}
			$this->SetTemplateAction('content');
		}


в xml.class.php код
foreach($doc->getElementsByTagName($tag) AS $node) 
			{    
					foreach($array AS $key => $value) 
					{
						$items[$value] = $node->getElementsByTagName($value)->item(0)->nodeValue;
					}
					array_push($rss_array, $items);
			}
avatar
между тегами link Rss-потока (парсер съел)
avatar
В файлике ActionFeed.class.php 

$this -> aRssFeed = $this->PluginContent_Xml_RsstoArray($tag = 'item',
																			$array = array('title','description','category','link'),
																			$url = $this->sFilePath);


В

В файлике Topics.class.php 

$oTopic->setCutText(trim($sTextCut));
$oTopic->setText($this->Text_Parser($sTextNew).$sNode['link']);
$oTopic->setTextShort($this->Text_Parser($sTextShort));

<code>

Попробуйте, будет ли работать.
avatar
большое спасибо, последний шаг в Topics.class.php по другому делал, по этому и не получалось. Теперь текст ссылки выводится сразу за основным текстом…
как изменить строку
$oTopic->setText($this->Text_Parser($sTextNew).$sNode['link']);
чтобы
1. ссылка была не просто текстовой, а гиперссылкой, т.е. через тег а href
2. разместить ссылку через перевод строки, т.е. br
avatar
пробовал так
$oTopic->setText($this->Text_Parser($sTextNew).'
Источник';
не получается
avatar
$oTopic->setText($this->Text_Parser($sTextNew).'br<a href="'.$sNode['link']).'">Источник</a>';
avatar
никто не подскажет в какую сторону копать?
avatar
$oTopic->setText($this->Text_Parser($sTextNew)."<br />"."<a href=\"".$sNode['link']."\">source</a>");

так
avatar
Работает, правда есть особенность: при ручной работе плагина все нормально. При работе крона линк не отображается вообще О_о
avatar
Можно ли сдлать публикацию не топиком, топиком-ссылкой?
avatar
Добрый день, почему-то когда тестирую на локалке, то через админку контентщика rss обрабатывается корректно
Когда копирую плагин на рабочий сайт, то выходит ошибка
Fatal error: Class 'DOMdocument' not found in /home/name/data/www/sait.ru/plugins/content/classes/modules/xml/Xml.class.php on line 12

Подскажите пожалуйста что делать. Уже совсем не понимаю что не так.
Причем 100% раньше это работало, уже есть несколько загруженных новостей на сайте с помощью плагина этой версии.
avatar
Попробуйте заново скачать и установить плагин.
avatar
так и сделал в первую очередь, не помогло. или вы его только что обновили?
avatar
Можно ли сделать так, чтобы не было публикования топиков на главной?
avatar
В Topics.class.php
поменяй
$oTopic->setPublishIndex(1);
на
$oTopic->setPublishIndex(0);
avatar
с вставкой ссылки на источник разобрались
актуальный вопрос — как правильно в строке прописать синтаксис, чтобы ссылка была гиперсылкой и через перенос бр
вот так не помогает, допускаю, что совершенно неверно прописан синтаксис
$oTopic->setText($this->Text_Parser($sTextNew).'<br <a href="'.$sNode['link']).'">Источник</a>';
avatar
Выдает ошибку SQL Error: Cannot add or update a child row: a foreign key constraint fails (`brf/topic`, CONSTRAINT `topic_fk1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE) at /home/b/public_html/classes/modules/topic/mapper/Topic.mapper.class.php line 50
Array ( [code] => 1452 [message] => Cannot add or update a child row: a foreign key constraint fails (`b/topic`, CONSTRAINT `topic_fk1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`)…
avatar
Решил попробовать — плагин бесценен! Уважение.
avatar
Блин, проверял сначала в ручном режиме, решил поставить задачу в крон, почитал немного мануалов делаю crontab -e создаю новую строку с таким содержанием:
5 * * * * /usr/bin/php /var/www/site/www/plugins/content/include/cron/get-feed.php?blog_id=42&feed_n=0
где feed_n=0
'0' => 'http://fulltextrssfeed.com/www.esreality.com/rss_xml.php?type=13',

В итоге жду 5 минут обновляю и ничего не происходит, подскажите, что я делаю не так?
avatar
права на get-feed.php поставил 755
avatar
Сайт с мануалом не открывается, который в начале поста.
avatar
Вообщем разобрался crontab -e

5 * * * * wget -qO - http://site.ru/plugins/content/include/cron/get-feed.php?blog_id=42&feed_n=3/ > /dev/null


Но теперь появилась второстепенная проблема, постил я значит в закрытый блог, а посты то сразу на главную выводятся)) Немного нелепо получилось когда на сайте с тематикой игр вдруг появились топики с хабра, а затем и вовсе на буржуйском языке. Можно как то сделать чтобы посты не постились без принудительного вывода на главную?

Думаю чуть попозже в AceBlogExtender разобратся с премодерацией(в прошлый раз она не работала) и дальше расти))
avatar
Имолось в виду наоборот, чтобы посты публиковались без принудительного вывода на главную.
avatar
Блин, ребята очень нуждаюсь в решении этого вопроса, кто поможет решить дам инвайт на закрытый сайт watch.is Нужно чтобы в процессе автоматического поста с помощью этого плагина, они сразу же не выводились на главную, а то даже закрытый блог не спасает!
avatar
avatar
есть ограничения сколько статей добавлять?
avatar
Нет ограничений
avatar
Теперь хочу уточнить вот какую штуку, нужный мне рсс не кушался с помощью штатных средств, я сначала пользовался сервисом, но он мне тоже не подошел по причине сео ссылок(добавляет реферера в начало ссылки) и потому что не добавлял видео с youtube. Теперь мное помогли и написали парсер для конкретного нужного мне сайта. Сначала я поставил этот парсер для проверки в крон — выполнятся каждые 5 минут и оказалось, что после каждого выполнения постится обсалютно те же самые посты, скрипт парсера был доработан таким образом, что все опубликованные пост он заносил в текстовый фаил, и во время повторного выполнения не постил уже готовые.

Сейчас это выглядит так .../plugins/content/папка_с_папками_парсеров_под_отдельные_разделы теперь а крон в свою очередь выполняется так: 5 * * * * wget -qO — site.ru/plugins/content/include/cron/get-feed.php?blog_id=42&feed_n=3/ > /dev/null то есть по прямой ссылке сайта и нужного раздела RSS. Теперь думаю закрыть папку с помощью .htaccsess посоветуйте как будет правильнее? Хочу закрыть эту папку от всех, чтобы только сервер мог заходить и выполнять скрипт, то есть нужно сделать как то так(?):

order deny,allow 
deny from all 
allow from xxx.xxx.xxx.xxx(внешний ip сервера)
Нужно ли в таком случае добавлять локалхост?(поидее тогда будет открыт доступ для например людей которые сидят черех сквид, т.к. у них будет ип 127.0.0.1)

И второе — Хочу использовать данный плагин немного иначе, ресурс с которого я планирую публиковать RSS на английском языке, в данный момент, посты публикуются от имени администратора, я бы хотел сделать нечто такой схемы:

Есть закрытый блог в него приглашаются волонтеры, которые переводят спарсенные посты на русский язык и в дальнейшем публикуют их в нужный блог, получая репутацию на сайте, грубоговоря. А в данный момент получается так, что они смогут опубликовать посты от имени администратора, что для них не выгодно. Готов хорошо заплатить за данную модификацию.
avatar
А в чем проблема? Волонтеры могут публиковать от своего имени: получил текст, перевел и опубликовал его в нужный раздел от своего имени.
avatar
Таким положением можно убить сразу 2вух зайцев,

1 это то что не придется ничего копировать, то есть более юзерфрэндли, зашел перевел опубликовал.

2 это то, что таким образом не будет лишнего контента в закрытых блогах, т.к. он будет опубликован, а парсер в свою очередь уже не опубликует эту статью в закрытый блог повторно, т.к. парсер перед выполнением проверит не была ли она занесена в текстовый фаил с прошлой публикацией. Парсер постит в закрытый блог запоминает в фаиле.txt то, что он опубликовал.
avatar
Можете кто-то перезалить плагин?
avatar
avatar
Люди добрые, объясните, пожалуйста, как эта штука может парсить из txt-файлов? я ни здесь, ни в конфиге не увидел никакого описания и настроек...

Т.е., RSS мне не надо вообще. Если у меня будет стоять парсер, который будет наполнять на сервере некий txt файл нужным мне контентом, сможет ли этот плагин забирать этот контент и публиковать его куда нужно (желательно еще и тег задавать)?
  • dsg
  • 0
avatar
Отличный плагин! Благодаря таким плагинам получаются вот такие красивые графики:

trustlink
Автор, напиши в личку куда можно деньжат WMR кинуть :) в каталоге в профиле что то не нашел.
avatar
Единственное по крону почему то полную новость не хавает, забирает анонс и в конце идет «читать далее» и ссылка на статью на хабре. Вручную полностью забирает с картинками и видео и в конце указывает Original source: habrahabr.ru (comments, light). Источник и вручную и в крон один и тот же feeds.feedburner.com/xtmb/hh-new-full Кто нибудь сталкивался?
avatar
Здравствуйте! Может, кто-нибудь из сообщества подскажет, как поправить код, чтобы автором топика был администратор блога?

Я только начала осваивать движок, не знаю, как задать id создателя блога в этой строке.

$oTopic->setUserId("2");


Буду очень благодарна вам за помощь.
avatar
А плагин автором поддерживается в данный момент?
А то ссылки из топика на фак и пр. не работают.
  • ASA
  • 0
avatar
Добавить бы в плагин проверку на дубли, цены бы ему не было.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.