dev Доработка поиска по ...


Вы здесь: Форумы fantlab.ru > Форум «Техподдержка и развитие сайта» > Тема «[dev] Доработка "поиска по жанру" - пометки для сериальных книг (userscript)»

[dev] Доработка "поиска по жанру" - пометки для сериальных книг (userscript)

 автор  сообщение


активист

Ссылка на сообщение 18 ноября 2016 г. 00:29  

цитата dante0nline

Добавте пожалуйста в "поиск по жанру" возможность скрывать книги которые являются частью цикла и при этом не являются первыми в этом цикле. Сейчас в топ поиска попадает много таких книг. Это очень мешает так как цикл с середины читать не хочется а рейтинга превых книг циклов нет.

Не дождался ответа и сам сделал скрипт который кое как решает эту проблему. Если код запустить через браузерную консоль на странице поиска фантастики начиная с 1990-го года то результат следующий:


Вот код кторый это делает:

цитата

var TIMEOUT = 1000;

var worksCount = 0;
$('main table a').each(function() {
var url = $(this).attr('href');
if (url.indexOf('/work') == 0) {
   setTimeout(function() {
     $.get(url, function (html) {
       findParent(html, url);
     });
   }, worksCount*TIMEOUT*2);
   worksCount++;
}
});

function findParent(html, url) {
var parentRegex = / год;.*(\/work\d+)>/;
var match = parentRegex.exec(html);
if (!match) return false;
var parentUrl = match[1];
setTimeout(function() {
   $.get(parentUrl, function(parentHtml) {
     checkFirstWork(parentHtml, parentUrl, url);
   })
}, TIMEOUT);
}

function checkFirstWork(parentHtml, parentUrl, url) {
parentHtml = parentHtml.replace(/(\r\n|\n|\r)/gm,"");
var tableRegex = /<a name=markmode><\/a>(<table(.|\n|\r)*<\/table>)/;
var match = tableRegex.exec(parentHtml);
if (!match) return false;
var tableHtml = match[1];
var tableEl = $(tableHtml);

var maxRatings = 0;
var maxRatingsUrl = '';
tableEl.find('tr').each(function() {
   var row_el = $(this);
   var context = row_el.find('nobr span').text();
   var ratingsRegex = /\((\d+)\)/;
   var match = ratingsRegex.exec(context);
   if (!match) return true;
   var ratings = parseInt(match[1]);
   if (ratings > maxRatings) {
     maxRatings = ratings;
     maxRatingsUrl = row_el.find('a').first().attr('href');
   }
});

if (maxRatingsUrl && maxRatingsUrl != url) {
   markNotFirst(url);
}
}

function markNotFirst(url) {
$('a[href="'+url+'"]').after(' <span style="color: red;">В цикле, не первый!</span> ');
};


Пожалуйста реализуйте такой фильтр на сервере и добавте соответствующую галочку в поиск по жанру. Или дайте возможность это сделать мне например ;-).


активист

Ссылка на сообщение 18 ноября 2016 г. 02:51  
Последние три строки нужно заменить на следующие.

цитата

function markNotFirst(url) {
$('a[href="'+url+'"]').after(' <span style="color: red;">В цикле, не первый!</span> ');
};

В прошлом посте они не правильно сохранились.


гранд-мастер

Ссылка на сообщение 18 ноября 2016 г. 09:44  
Было бы полезно и удобно.
–––
Обременяет не знание, обременяет - мнение!


миротворец

Ссылка на сообщение 18 ноября 2016 г. 12:34  

цитата dante0nline

Если код запустить через браузерную консоль на странице поиска фантастики начиная с 1990-го года то результат следующий:

у меня тут сразу вопрос. Написал автор роман (цикл романов). Пусть будет "Пепел и сталь" Сандерсона а спустя пару лет ему вздумалось запилить рассказ-приквел на три странички. Который по сути нафиг не нужен, просто бонус для поклонников. И получается, что первый роман цикла уже якобы не первый. И таких случаев полно. Реально очень много.
Будет ли ваш скрипт работать в этом случае? Или начнет врать выдавая первые романы цикла за не-первые?


миротворец

Ссылка на сообщение 18 ноября 2016 г. 12:38  
Алексей121 думаю если это скрип возьмут за основу программисты фантлаба, то они смогут дописать игнорирование кода ,который ставит "+" приквелам.
Насколько я помню это было нужно поставить галочку напротив произведения при составлении цикла.
–––
https://mysliclub.com/?ref=fzsd3qn6mp


миротворец

Ссылка на сообщение 18 ноября 2016 г. 14:16  
dante0nline, понравилось. Спасибо. Был бы рад, если такая штука появилась бы на сайте.
–––
Взял надежду сухим пайком, соль со спичками бросил в ранец,
Я готов отправляться в путь - все, что нужно, уже при мне.


гранд-мастер

Ссылка на сообщение 18 ноября 2016 г. 14:21  
Ещё бы неуместную запятую убрать из красного текста... К чему она там?! Да и вообще грамотность подтянуть в соответствии с Регламентом сайта.


гранд-мастер

Ссылка на сообщение 18 ноября 2016 г. 18:29  

цитата Алексей121

ему вздумалось запилить рассказ-приквел

Ну, бывают часто умники с приквелами на закуску... — выделить их зелёным, написать "Приквел" да и все. Они обычно и сюжетно и содержательно выделяются, будет все логично.
–––
Обременяет не знание, обременяет - мнение!


магистр

Ссылка на сообщение 19 ноября 2016 г. 04:37  

цитата dante0nline

Если код запустить через браузерную консоль

а вот что-то не особо завелось на Chrome. (см. аттач)
есть какие то ньюнсы?
–––
ϝʟ * Никаких компромиссов, даже перед лицом армагеддона (Роршах)


активист

Ссылка на сообщение 20 ноября 2016 г. 11:18  

цитата Алексей121

вздумалось запилить рассказ-приквел на три странички... Будет ли ваш скрипт работать в этом случае? Или начнет врать выдавая первые романы цикла за не-первые?
Скрипт очень простой так что врать будет, но не в тех циклах которые вы упомянули. Определение "первой" книги в цикле это вопрос интересный. Какие у вас на этот счёт соображения?

Я здесь хочу лишь добавить что мне главное исключить произведения которые проблематично читать первыми из цикла. Если цикл без проблем можно начинать читать с двух разных романов то они оба должны попасть в результаты поиска. Хотя это не обязательно так как это наверно не такой частый случай и значительно усложняет проблему в техническом плане.

цитата ZiZu

то они смогут дописать игнорирование кода ,который ставит "+" приквелам
Согласен. Или например можно выбрать книгу из цикла которая является романом с наиболее ранней датой издания.

цитата sanchezzzz

Ещё бы неуместную запятую убрать из красного текста... К чему она там?! Да и вообще грамотность подтянуть в соответствии с Регламентом сайта.
Ок, уберу. На русском не так часто пишу. Включил проверку орфографии.

цитата vad

а вот что-то не особо завелось на Chrome. (см. аттач)
есть какие то ньюнсы?
Да, оказалось что нужно залогинится на fantlab.ru а то скрипт работать не будет.

цитата Hariamatyhari

Было бы полезно и удобно.

цитата Ny

dante0nline, понравилось. Спасибо. Был бы рад, если такая штука появилась бы на сайте.
Спасибо за интерес к теме!


гранд-мастер

Ссылка на сообщение 20 ноября 2016 г. 12:46  

цитата dante0nline

Я здесь хочу лишь добавить что мне главное исключить произведения которые проблематично читать первыми из цикла.

А зачем морока с фильтрами? В библиографиях авторов четко расписано, в каком порядке идут книги в циклах, что приквел, а что сиквел. И на странице любого произведения, если оно входит в какой-то цикл, то это обязательно указано.
–––
Чернила соблазнительны. Они имеют нечто общее с вином, чтобы не сказать с кровью. - Петр Вяземский


гранд-мастер

Ссылка на сообщение 20 ноября 2016 г. 19:36  
Прогрессом чаще всего движет лень. Если в выдаче запроса за сотню книг, то и не набегаешься по каждой.

Подумалось... Если бы был фильтр, выдающий цикл оптом вместо каждой книги по отдельности... Так, 10 циклов по 5 книг — уже не хилый список, а если многи е уже прочитаны они только мешают.
В идеале — имеем список из названий самостоятельных книг и из названий циклов, с "плюсиком, либо выделением цветом. нажимаем плюсик, и он разворачивается в отдельные книги с отступом. В то же время, кликнум менюшку "развернуть все", получаем то, что так оберегает предыдущий оппонент. Не лишней будет также сортировка внутри классификатора по автору, году, чему то там ещё... В этом случае возникает противоречие с компоновкой по циклам.
–––
Обременяет не знание, обременяет - мнение!


гранд-мастер

Ссылка на сообщение 4 декабря 2016 г. 01:47  
ну,   вот и приехали...
–––
Обременяет не знание, обременяет - мнение!


активист

Ссылка на сообщение 12 декабря 2016 г. 12:17  

цитата Алексей121

у меня тут сразу вопрос. Написал автор роман (цикл романов). Пусть будет "Пепел и сталь" Сандерсона а спустя пару лет ему вздумалось запилить рассказ-приквел на три странички. Который по сути нафиг не нужен, просто бонус для поклонников. И получается, что первый роман цикла уже якобы не первый. И таких случаев полно. Реально очень много.


да. а еще есть такой пример. Хроники Амбера прочел я цикл Желязны. допустим. а там еще тетралогия-приквел от другого автора. что делает его уже Межавторским Циклом. из-за это как будто не прочел сами Хроники. при этом я ничего против межавторских циклов не имею. только романы-сиквелы или спинофы или приквелы. к подобным произведениям читать мне не интересно.


магистр

Ссылка на сообщение 12 декабря 2016 г. 12:28  
А почему нужна именно эта фраза? Может, сразу и писать, какая эта книга в цикле?
–––
Жизнь изнашивает человека. Изнашивает до дыр.


активист

Ссылка на сообщение 14 декабря 2023 г. 20:26  
Тема пользовательских скриптов хороша, не хватает рейтингов с livelib и goodreads например и ссылок на страницы произведений на этих ресурсах.
–––
"Великие дела начинаются с малого."
— David, Prometheus
Страницы: 1    🔍 поиск

Вы здесь: Форумы fantlab.ru > Форум «Техподдержка и развитие сайта» > Тема «[dev] Доработка "поиска по жанру" - пометки для сериальных книг (userscript)»

 
  Новое сообщение по теме «[dev] Доработка "поиска по жанру" - пометки для сериальных книг (userscript)»
Инструменты   
Сообщение:
 

Внимание! Чтобы общаться на форуме, Вам нужно пройти авторизацию:

   Авторизация

логин:
пароль:
регистрация | забыли пароль?



⇑ Наверх