Mrtrick, ваши предложения получил. Обдумаю, как лучше, и сделаю.
Согласен, и у меня уже есть кое-какие идеи на счёт этого :) Сделаю в настройках возможность указать, какие функции выполнять, а какие нет.
Mrtrick, в общем, думал я, как сделать редактирование настроек в интерфейсе, и понял, что в данном конкретном случае это не будет удобнее, чем задание их в файле напрямую потому, что большинство настроек это просто перечисление через запятую строковых данных, как например: *specialblocksdetect=instagram,twitter,youtube
В интерфейсе эта настройка была бы списком:
instagram twitter youtube
А в случае, когда этих данных много (например у removeblocks), то списки отображались бы не полностью, а с прокруткой, что затрудняет их визуальное восприятие. На мой взгляд, удобнее просто редактировать настройки в файле потому, что они все сразу видны как на ладони. Можно, например, открыть несколько файлов и легко сравнить, чем они отличаются.
Если у вас есть предложения, как организовать удобное редактирование настроек в интерфейсе, пишите.
Тем, кто собирается купить парсер: вот пример настроек по умолчанию, а вот инструкция с их разъяснением. Если есть вопросы, пишите. Настраивать парсер под каждый сайт не требуется. Настройки задаются общие для всех сайтов, либо для нестандартных случаев.
Mrtrick, ок, сделаю возможность править настройки в интерфейсе.
Обновление 2.1.3.
1. Исправил ошибку с загрузкой страниц через редирект с портом в урле (Location: https://site.ru:443/).
2. Сделал возможность указать в настройке striplinks какие ссылки не надо удалять. Например, чтобы удалялись все ссылки, кроме ссылок содержащих в урле "somepage.html", или слово "Buy" в анкоре, или "color:#00C" в стиле, надо задать настройку:
*striplinks=1{somepage.html,Buy,color:#00C}
3. Добавил настройку protectedblocksdetect, в которой можно задать блоки, которые не нужно удалять. И сделал, чтобы specialblocksdetect блоки, тоже не удалялись. Раньше они могли быть удалены, если вдруг принимались программой за мусор.
Отличие protectedblocksdetect (защищённых блоков) от specialblocksdetect (специальных блоков) в том, что они могут быть изменены (удаляются атрибуты не указанные в keepattributes).
Например, нужно защитить от удаления этот блок:
<div class="testclass1"> <li class="testclass2">Hello!</li> </div>
Если указать настройку:
*protectedblocksdetect=testclass1
или
*protectedblocksdetect=testclass2
*protectedblocksdetect=Hello!
, то результат будет:
<div> <li>Hello!</li> </div>
Довольно частый вопрос: Как сделать, чтобы статьи сохранялись в один файл и в одну строку?
В settings.txt ставим настройки:
*savetoonefile=1 *scripting=1
Удаление переносов делаем через скрипт в thread_events.txt. Вставим в событие сохранения статьи код, удаляющий все переносы:
function on_Save(){ $output=str_replace("\r","",$output); //удаляем возврат каретки $output=str_replace("\n","",$output); //удаляем перевод строки $output=$output+"\r\n"; //добавляем перевод в конец строки }
В template.txt делаем шаблон:
[ARTICLE_KEY];Бла-бла-бла;[ARTICLE_H];[ARTICLE_BODY]
В одну строку, без переноса строки в конце.
На выходе получаем файл мультикеев, который можно заряжать в дорген. В качестве разделителя частей строки лучше использовать не точку с запятой, а какой-нибудь другой символ, который обычно не используется в статьях.
Да, интересно, какой вкус при выпаривании у обычного табака. Но, насколько я понимаю, в случае с испарителями нужен специальным образом подготовленный табак, чтобы и пар был, и вкус корректно передавался.
Вся фишка в табаке. А табак в стиках iqos, по моему мнению, выполняет не столько свою прямую функцию, сколько является не более чем основой для "ароматизаторов и соусов". Я дал попробовать iqos нескольким людям, и все сказали - химоза. Производителям стиков для iqos нужно ещё поработать над разнообразностью, глубиной и естественностью вкусов. Но, если особо не прикапываться, то на замену сигаретам пойдёт. Кого достали негативные эффекты сигарет, переходят легко и сигареты больше не курят.
Первые впечатления:
1. Курятся (парятся) легко, нет сигаретной вони. Табачный пар (официальный термин iqos) не содержит смол и прочих веществ оседающих на лице, волосах и руках, не раздражает слизистые оболочки. Также нет удушья, которое бывает от сигарет.
2. Вкус необычный (стандартные стики HEETS), совсем не такой как у сигарет. Он искусственный (хотя у сигарет он тоже далеко не натуральный), а значит однобокий и навязчивый. Тем, кто не любит ароматизированные сигареты и вообще "химию", вряд ли понравится. Лично мне не особо нравится, но если курить нечасто, то нормально. От рук и самого устройства есть несильный запах ароматизатора. Если хранить iqos в тумбочке, то в ней будет стоять характерный запах (не противный, но специфический).
3. Курится быстро, примерно в 14 затяжек, причём неважно, как сильно затягиваться. Может казаться, что не накуривает, но если курить подряд или с небольшим перерывом несколько стиков, можно легко словить никотиновый передоз (головокружение, тошнота, холодный пот). Действие никотина, по моим субъективным ощущениям, не такое ярко выраженное, как у сигарет, более фоновое.
Тем кто курит сигареты давно и помногу, и бросать не собирается, то, скорее всего, iqos не понравится. Тем, кто любит сам процесс курения (пускание колец и всё такое), тоже не понравится потому, что дыма-пара мало, и курится быстро. Тем, кто хочет бросить сигареты, iqos может подойти в качестве замены.
Сейчас большой минус в том, что кроме стиков HEETS других в продаже я не видел (в РФ). Попадаются стики, от которых мало дыма, и такие, которые застряют в держателе (стик достаётся, а наполнитель нет). И ещё, хотелось бы более внятной официальной информации о составе стиков. Сейчас заявляется, что в составе "спрессованный табачный лист, ароматизаторы и соуса", но это вообще ни о чём. Продавцы в официальном магазине говорят, что никакого глицерина в стиках нет, а всё натуральное, но, думаю, они сами не знают ничего.
P.S.
Кому нужен промокод, пишите в личку.
Заметил, что некоторые сайты c https не парсятся. Оказалось, что надо использовать протокол безопасности Tls1.2. Для этого в events.txt после строки function on_Programm_Start(){ вставьте: setsecurityprotocoltype('tls12');
Вот так:
function on_Programm_Start(){setsecurityprotocoltype('tls12');}
Обязательно все сделайте это. И в settings.txt установите *scripting=1 .
Как сделать, чтобы из статьи удалялись имена сайтов (те, которые не в тегах).
Например, есть текст: На сайте site.ru вы можете узнать о разведении гусей. Надо удалить site.ru и получить: На сайте вы можете узнать о разведении гусей. А также удалить вертикальную черту, минус, тире и короткое тире перед и после имени сайта, которые часто используют в тайтле.
Вот функция, которая делает это - http://jako.tech/functions/RemSiteNames.txt
Добавьте её в thread_events.txt и вызывайте в событии сохранения статьи:
function on_Save(){ $output=RemSiteNames($output); }
Обновление 2.1.2.
1. Улучшил определение страниц, которые закрыты от индексации в robots.txt, и которые не нужно парсить. Все, кто включили настройку checkrobotsfile обязательно обновите программу! В предыдущих версиях ссылки с закрытых страниц не парсились, из-за чего сайты обходились не полностью, особенно в тех случаях, когда вебмастера закрывают от индексации страницы категорий.
В настройках теперь можно указать, директивы каких юзер-агентов надо учитывать: *checkrobotsfile=1{*,Yandex,GoogleBot} . Если указать просто *checkrobotsfile=1, то будут учитываться все disallow и allow всех юзер-агентов. Я рекомендую указывать с юзер-агентами.
2. Добавил настройку *parsecategorypages=1, которая включает парсинг страниц категорий. По умолчанию с них парсятся только ссылки. В скрипт введена переменная $page_iscategory, значение которой указывает, является ли текущая страница категорией (1 - да, 0 - нет).
Пример, как найти все страницы сайта, http код которых отличен от 200:
В настройках ставим:
*parsecategorypages=1 *goodpagessigns= *badpagessigns= *scripting=1 *allowemptyarticles=1 *parsemainpage=1 *keyfilenames=0
В thread_events.txt после function on_Save(){ впишите:
if(strpos($http_headers,'200 OK')==0){$output=$page_url+"\r\n\r\n"+$http_headers+$page_data;}else{$output='';}
Без настройки *parsecategorypages=1 этот скрипт не обрабатывал бы страницы категорий.