Автоматический создаватель паков картинок имени рандомных поней
Короче. Вот у нас есть автоматический вестник Табуна, который милая am31 каждый день неустанно делает для нас, что показывает, что автоматизация — это ум, честь и совесть эпохи и за ней будущее. =) А также есть много паков имени различных поней (Дёрпи, Селестии, Луны, Найтмер Мун, Твайлайт, Старлайт, киринов и т.п.) А ещё я в паке Твайлайт задумался над тем, что нет пака имени Лиры, но понял, что у меня чисто физически не будет времени его пилить, поэтому его и не будет…
...Or is it?
Так что я went super saiyan и накодил питоновский скрипт, который автоматически создаёт паки поней из выбранных пользователем картинок и постит их в черновики, после чего остаётся только зайти туда самому, прочекать, всё ли ок и нажать «Опубликовать».
Если у кого-то есть предложения по расширению функциональности или правки неудачных мест (питонщик из меня тот ещё), то велкам в ищщуи и пулл-реквесты.
Как его использовать:
1. Проверить, что на машине есть Python 3. Я проверял на 3.7 и 3.8, скорее всего заведётся на любом третьем и может даже на каком-нибудь из вторых, но я не проверял. Для линуксоидов это на 99% так и есть, виндузятникам придётся его поставить самостоятельно, если он не стоит. Стоит отметить, что последняя версия, которую можно поставить на семёрку — 3.8, 3.9 ставится только на 8.1 или десятку.
2. Поставить нужные модули, в особенности tabun_api от Андреймала (остальные, скорее всего, уже стоят):
Хочу сказать спасибо andreymal -у за этот модуль и в особенности годную документацию к нему, я разобрался в нём буквально за десять минут и без залезания в исходники, давно у меня такого не было с новыми библиотеками.
3. Сконфигурировать скрипт (его конфигурация находится в его начале). Те параметры, которые нельзя оставить, как есть, и нужно поменять по сравнению с дефолтной конфигурацией, выделены жирным:
username — логин на табуне.
password — пароль от табуна.
proxy — прокси, если нужен, иначе просто пустая строка.
mirror — адрес буры.
apitype — вариант API сайта: «derpibooru» (для Derpibooru и Trixiebooru), «ponerpics» (для Ponerpics и Ponybooru) или «twibooru» (для Twibooru).
title — название поста, в нём три подчёркивания будут заменены на номер пака (начинается с 1 и дальше увеличивается).
tags — теги, которые будут у поста.
blog_id — численный идентификатор блога, куда постить или строка из URL ссылки на блог (например, ЯРОК — это «fanart», ЗХ — «sketch_drawing», БПНХ — «draw_help», СБК — «rough_blog», награнь — «borderline»). 0 — это персональный блог.
pony — дёрпибурной тег поньки, имени которой мы будем создавать пак.
bonuspony — дёрпибурной тег бонусной поньки (можно сделать несколько «бонусных» спойлеров в конце). Поиск для бонусной поньки ведётся с исключением основной; то есть, если pony == 'lyra heartstrings' и bonuspony == 'bon-bon', то в бонусы будут попадать те картинки, на которых есть Бон-Бон, но нету Лиры. Если бонус не нужен, то здесь следует оставить пустую строку.
also — дополнительные теги.
sort — параметр для сортировки (wilson_score, в отличие от score, позволяет встревать годноте, которую тупо видело очень мало народа).
tmpl_body — шаблон поста. Здесь на место __OP_PIC__ подставится ОП-пикча, на __PIC_BLOCK__ — блок картинок в спойлерах, на ___ — номер пака.
tmpl_text_spoiler_header — шаблон текстового заголовка спойлера.
tmpl_text_spoiler_header_bonus — шаблон текстового заголовка спойлера бонуса.
tmpl_pic_spoiler_header — шаблон заголовка спойлера с картинкой.
tmpl_pic_spoiler_header_bonus — шаблон заголовка спойлера бонуса с картинкой.
tmpl_op_pic — шаблон ОП-пички.
tmpl_alttext — шаблон альттекста каждой картинки.
tmpl_spoiler_contents — шаблон содержимого спойлера.
tmpl_spoiler_contents_bonus — шаблон содержимого спойлера бонуса.
defaults — значения подстановок для шаблона, если соответствующих данных о картинке нет.
spoilerpics — здесь можно указать либо массив ссылок на пикчи, уже загруженные на табун, чтобы получить в заголовках спойлеров такую красоту, как в паках Селестии и Луны; либо просто оставить None или пустой массив, и тогда скрипт сгенерит текстовые заголовки спойлеров. Если будет выбрано больше картинок, чем элементов в этом массиве, то оставшиеся спойлеры будут иметь текстовые заголовки.
bonuspic — картинка для спойлера бонуса. Опять-таки, либо ссылка на пикчу, уже загруженные на табун, либо None или пустая строка, чтобы создать текстовый спойлер.
timezone — часовой пояс, для Москвы это +03:00.
config — путь к файлу, где будет храниться номер последнего отправленного пака. Это нужно, чтобы автоматически его увеличивать в заголовке поста. Путь относителен от домашней директории пользователя (~ в линуксе, C:\Users\имя_пользователя в винде). Файл можно редактировать, если нужно сбросить номер пака или, наоборот, переставить его на нужный. Если в файле, например, записана цифра 5, то скрипт отправит пак с номером 6 и изменит цифру в файле на 6. Если файл удалён или отсутствует, то он будет создан, а нумерация паков начнётся с 1.
backup — путь к файлу, где будет сохранён код поста, если его не удалось запостить на табун. Путь также относителен от домашней директории пользователя.
pick — путь к pick-файлу, временному файлу для выбора картинок (см. ниже про логику работы скрипта). Путь также относителен от домашней директории пользователя. Также можно указать здесь "*:rentry" для загрузки на rentry.co или "*:dpaste" для загрузки на dpaste.com.
period — количество дней, за которые надо тянуть пикчи с буры (например, 7 — это все пикчи за последнюю неделю).
offset — смещение вытаскиваемых картинок от текущей даты. None — брать самые последние картинки (за последние period дней); {'years': 1} — картинки годичной давности; {'months': 6} — полугодовой; {'years': 1, 'months': 6, 'days': 15} — полуторагодовой плюс полмесяца. Поддерживаются ключи 'years', 'months', 'days'.
pagelimit — максимальное количество выкачиваемых страниц буры. 0 — выкачивать все возможные, 1 — вести себя как раньше (выкачивать одну страницу).
pressenter — True, если перед выходом надо попросить нажать ENTER (удобно в случае запуска не из консоли), False в противном случае.
В шаблонах (то есть, в переменных, начинающихся на tmpl_), кроме tmpl_body (у него свои переменные, указанные выше), можно использовать следующие подстановки:
— На место ___ подставится номер спойлера (везде, кроме `tmpl_op_pic`).
— На место __PIC__ подставится URL картинки из `spoilerpics` (только в `tmpl_pic_spoiler_header` и `tmpl_pic_spoiler_header_bonus`).
— На место __PIC__ подставится URL картинки-превью (только в `tmpl_op_pic`, `tmpl_spoiler_contents` и `tmpl_spoiler_contents_bonus`).
— На место __FULL__ подставится полная ссылка на хайрез картинки (только в `tmpl_op_pic`, `tmpl_spoiler_contents` и `tmpl_spoiler_contents_bonus`).
— На место __DESC__ подставится описание картинки на буре, если оно задано (иначе значение из `defaults`).
— На место __NAME__ подставится название картинки на буре, если оно задано (иначе значение из `defaults`).
— На место __AUTHOR__ подставится содержимое тега `artist:` после двоеточия, если он есть; иначе ник загрузившего картинку на буру, если он задан; иначе значение из `defaults`.
__UPLOADER__ подставится ник загрузившего картинку на буру, если он задан (иначе значение из `defaults`).
— На место __SOURCE__ подставится исходный URL картинки на буре, если он задан (иначе значение из `defaults`).
— На место __ID__ подставится ID картинки на буре.
— На место __DB_URL__ подставится URL страницы с картинкой на буре.
4. Запустить скрипт.
Он сделает следующее:
— выкачает блок метаинформации о пикчах на первых pagelimit страницах (или обо всех имеющихся, если limit равен 0; на каждой странице 50 пикч) с выбранной буры (поддерживаются все буры, совместимые с дёрпибурой и твайбурой) с тегами pony и also и сортировкой по параметру sort (по умолчанию wilson_score);
— сделает то же самое, если задана бонусная понька, но с тегами bonuspony, -pony и also;
— создаст pick-файл для выбора лучших пикч со ссылками на эти картинки (после этого этот файл нужно будет открыть в браузере — его URL скрипт выведет в консоль);
— спросит, какие пикчи публиковать; здесь надо ввести (через пробел, запятую или точку с запятой) номера нужных пикч, начиная с ОП-пикчи. Они будут опубликованы в посте именно в том порядке, в котором введены; например, если ввести «3 5 1 2», то ОП-пикчей станет третья, а потом будут созданы три спойлера с пикчами 5, 1 и 2;
— если задана бонусная понька, то дальше спросит таким же образом номера бонусных пикч (они будут отдельно показаны в pick-файле вторым блоком; будет создано столько бонусных спойлеров, сколько пикч тут будет указано);
— загрузит для ОП-пикчи представления medium и full, а для всех остальных — large и full на табун (все неправильно введённые номера будут проигнорированы, а если представление full не удастся залить на табун, то будет сделана попытка залить вместо него представление large);
— создаст пост, в котором первая небонусная пикча будет ОП-пикчей (КДПВ), а остальные будут запиханы под спойлеры (номерные, а затем бонусные), при этом по клику на каждую пикчу будет открываться (по умолчанию) её полный вариант в новой вкладке, а альттекстом (тоже по умолчанию) будет служить её дескрипшен с буры;
— запостит этот пост на табун в указанный блог в виде черновика;
— если это не удалось, то оставит содержимое поста в виде файла, указанного в переменной backup, и его можно будет залить на табун вручную.
После этого останется только залезть в свои черновики, проверить, опубликовать пост и пнуть его в ленту (или, если запостить его не удалось, то разобраться, почему и вручную создать пост с содержимым из backup-файла).
Если параметр pick начинается с символов "*:", то это означает, что pick-файл будет залит на внешний ресурс, указанный после этих символов. Сейчас из таких ресурсов поддерживаются «rentry» и «dpaste»: если указать это слово после двоеточия, то pick-файл будет создан в формате Markdown и залит на выбранный ресурс.
Если же pick не начинается с этих символов, то pick-файл будет создан в формате HTML и положен по пути, указанному в этой переменной (относительно домашнего каталога пользователя).
Идея с pick-файлом появилась потому, что автоматический запуск скрипта через crontab не оправдал себя — куда удобнее не чистить черновик поста от негодных пикч, а сразу в диалоговом режиме со скриптом указывать ему пикчи для публикации.
Коды возврата:
0 — всё отлично, можно лезть в черновики проверять появившийся пост;
1 — не получилось импортировать модуль tabun_api;
2 — не получилось достучаться до буры;
3 — не получилось разобрать JSON, который вернула бура;
31 — неправильно указан протокол после "*:" в параметре pick (поддерживаются только «rentry» и «dpaste»);
32 — не удалось залить pick-файл на удалённый ресурс;
4 — не удалось залогиниться на табун;
5 — не удалось залить пикчи на табун;
9 — не удалось определить блог по его текстовому имени;
10 — не получилось запостить пост на табун.
Такие дела =)
...Or is it?
Так что я went super saiyan и накодил питоновский скрипт, который автоматически создаёт паки поней из выбранных пользователем картинок и постит их в черновики, после чего остаётся только зайти туда самому, прочекать, всё ли ок и нажать «Опубликовать».
Скрипт здесь
(в гитхабовской репе)Если у кого-то есть предложения по расширению функциональности или правки неудачных мест (питонщик из меня тот ещё), то велкам в ищщуи и пулл-реквесты.
Как его использовать:
1. Проверить, что на машине есть Python 3. Я проверял на 3.7 и 3.8, скорее всего заведётся на любом третьем и может даже на каком-нибудь из вторых, но я не проверял. Для линуксоидов это на 99% так и есть, виндузятникам придётся его поставить самостоятельно, если он не стоит. Стоит отметить, что последняя версия, которую можно поставить на семёрку — 3.8, 3.9 ставится только на 8.1 или десятку.
2. Поставить нужные модули, в особенности tabun_api от Андреймала (остальные, скорее всего, уже стоят):
pip3 install datetime requests pathlib emoji http3 urllib3 python-dateutil emoji pip3 install git+https://github.com/andreymal/tabun_api.git#egg=tabun_api[full]Если pip3 нет, то скорее всего, можно использовать команду pip вместо неё: такое бывает, если третий питон — единственный стоящий на машине.
Хочу сказать спасибо andreymal -у за этот модуль и в особенности годную документацию к нему, я разобрался в нём буквально за десять минут и без залезания в исходники, давно у меня такого не было с новыми библиотеками.
3. Сконфигурировать скрипт (его конфигурация находится в его начале). Те параметры, которые нельзя оставить, как есть, и нужно поменять по сравнению с дефолтной конфигурацией, выделены жирным:
username — логин на табуне.
password — пароль от табуна.
proxy — прокси, если нужен, иначе просто пустая строка.
mirror — адрес буры.
apitype — вариант API сайта: «derpibooru» (для Derpibooru и Trixiebooru), «ponerpics» (для Ponerpics и Ponybooru) или «twibooru» (для Twibooru).
title — название поста, в нём три подчёркивания будут заменены на номер пака (начинается с 1 и дальше увеличивается).
tags — теги, которые будут у поста.
blog_id — численный идентификатор блога, куда постить или строка из URL ссылки на блог (например, ЯРОК — это «fanart», ЗХ — «sketch_drawing», БПНХ — «draw_help», СБК — «rough_blog», награнь — «borderline»). 0 — это персональный блог.
pony — дёрпибурной тег поньки, имени которой мы будем создавать пак.
bonuspony — дёрпибурной тег бонусной поньки (можно сделать несколько «бонусных» спойлеров в конце). Поиск для бонусной поньки ведётся с исключением основной; то есть, если pony == 'lyra heartstrings' и bonuspony == 'bon-bon', то в бонусы будут попадать те картинки, на которых есть Бон-Бон, но нету Лиры. Если бонус не нужен, то здесь следует оставить пустую строку.
also — дополнительные теги.
sort — параметр для сортировки (wilson_score, в отличие от score, позволяет встревать годноте, которую тупо видело очень мало народа).
tmpl_body — шаблон поста. Здесь на место __OP_PIC__ подставится ОП-пикча, на __PIC_BLOCK__ — блок картинок в спойлерах, на ___ — номер пака.
tmpl_text_spoiler_header — шаблон текстового заголовка спойлера.
tmpl_text_spoiler_header_bonus — шаблон текстового заголовка спойлера бонуса.
tmpl_pic_spoiler_header — шаблон заголовка спойлера с картинкой.
tmpl_pic_spoiler_header_bonus — шаблон заголовка спойлера бонуса с картинкой.
tmpl_op_pic — шаблон ОП-пички.
tmpl_alttext — шаблон альттекста каждой картинки.
tmpl_spoiler_contents — шаблон содержимого спойлера.
tmpl_spoiler_contents_bonus — шаблон содержимого спойлера бонуса.
defaults — значения подстановок для шаблона, если соответствующих данных о картинке нет.
spoilerpics — здесь можно указать либо массив ссылок на пикчи, уже загруженные на табун, чтобы получить в заголовках спойлеров такую красоту, как в паках Селестии и Луны; либо просто оставить None или пустой массив, и тогда скрипт сгенерит текстовые заголовки спойлеров. Если будет выбрано больше картинок, чем элементов в этом массиве, то оставшиеся спойлеры будут иметь текстовые заголовки.
bonuspic — картинка для спойлера бонуса. Опять-таки, либо ссылка на пикчу, уже загруженные на табун, либо None или пустая строка, чтобы создать текстовый спойлер.
timezone — часовой пояс, для Москвы это +03:00.
config — путь к файлу, где будет храниться номер последнего отправленного пака. Это нужно, чтобы автоматически его увеличивать в заголовке поста. Путь относителен от домашней директории пользователя (~ в линуксе, C:\Users\имя_пользователя в винде). Файл можно редактировать, если нужно сбросить номер пака или, наоборот, переставить его на нужный. Если в файле, например, записана цифра 5, то скрипт отправит пак с номером 6 и изменит цифру в файле на 6. Если файл удалён или отсутствует, то он будет создан, а нумерация паков начнётся с 1.
backup — путь к файлу, где будет сохранён код поста, если его не удалось запостить на табун. Путь также относителен от домашней директории пользователя.
pick — путь к pick-файлу, временному файлу для выбора картинок (см. ниже про логику работы скрипта). Путь также относителен от домашней директории пользователя. Также можно указать здесь "*:rentry" для загрузки на rentry.co или "*:dpaste" для загрузки на dpaste.com.
period — количество дней, за которые надо тянуть пикчи с буры (например, 7 — это все пикчи за последнюю неделю).
offset — смещение вытаскиваемых картинок от текущей даты. None — брать самые последние картинки (за последние period дней); {'years': 1} — картинки годичной давности; {'months': 6} — полугодовой; {'years': 1, 'months': 6, 'days': 15} — полуторагодовой плюс полмесяца. Поддерживаются ключи 'years', 'months', 'days'.
pagelimit — максимальное количество выкачиваемых страниц буры. 0 — выкачивать все возможные, 1 — вести себя как раньше (выкачивать одну страницу).
pressenter — True, если перед выходом надо попросить нажать ENTER (удобно в случае запуска не из консоли), False в противном случае.
В шаблонах (то есть, в переменных, начинающихся на tmpl_), кроме tmpl_body (у него свои переменные, указанные выше), можно использовать следующие подстановки:
— На место ___ подставится номер спойлера (везде, кроме `tmpl_op_pic`).
— На место __PIC__ подставится URL картинки из `spoilerpics` (только в `tmpl_pic_spoiler_header` и `tmpl_pic_spoiler_header_bonus`).
— На место __PIC__ подставится URL картинки-превью (только в `tmpl_op_pic`, `tmpl_spoiler_contents` и `tmpl_spoiler_contents_bonus`).
— На место __FULL__ подставится полная ссылка на хайрез картинки (только в `tmpl_op_pic`, `tmpl_spoiler_contents` и `tmpl_spoiler_contents_bonus`).
— На место __DESC__ подставится описание картинки на буре, если оно задано (иначе значение из `defaults`).
— На место __NAME__ подставится название картинки на буре, если оно задано (иначе значение из `defaults`).
— На место __AUTHOR__ подставится содержимое тега `artist:` после двоеточия, если он есть; иначе ник загрузившего картинку на буру, если он задан; иначе значение из `defaults`.
__UPLOADER__ подставится ник загрузившего картинку на буру, если он задан (иначе значение из `defaults`).
— На место __SOURCE__ подставится исходный URL картинки на буре, если он задан (иначе значение из `defaults`).
— На место __ID__ подставится ID картинки на буре.
— На место __DB_URL__ подставится URL страницы с картинкой на буре.
4. Запустить скрипт.
Он сделает следующее:
— выкачает блок метаинформации о пикчах на первых pagelimit страницах (или обо всех имеющихся, если limit равен 0; на каждой странице 50 пикч) с выбранной буры (поддерживаются все буры, совместимые с дёрпибурой и твайбурой) с тегами pony и also и сортировкой по параметру sort (по умолчанию wilson_score);
— сделает то же самое, если задана бонусная понька, но с тегами bonuspony, -pony и also;
— создаст pick-файл для выбора лучших пикч со ссылками на эти картинки (после этого этот файл нужно будет открыть в браузере — его URL скрипт выведет в консоль);
— спросит, какие пикчи публиковать; здесь надо ввести (через пробел, запятую или точку с запятой) номера нужных пикч, начиная с ОП-пикчи. Они будут опубликованы в посте именно в том порядке, в котором введены; например, если ввести «3 5 1 2», то ОП-пикчей станет третья, а потом будут созданы три спойлера с пикчами 5, 1 и 2;
— если задана бонусная понька, то дальше спросит таким же образом номера бонусных пикч (они будут отдельно показаны в pick-файле вторым блоком; будет создано столько бонусных спойлеров, сколько пикч тут будет указано);
— загрузит для ОП-пикчи представления medium и full, а для всех остальных — large и full на табун (все неправильно введённые номера будут проигнорированы, а если представление full не удастся залить на табун, то будет сделана попытка залить вместо него представление large);
— создаст пост, в котором первая небонусная пикча будет ОП-пикчей (КДПВ), а остальные будут запиханы под спойлеры (номерные, а затем бонусные), при этом по клику на каждую пикчу будет открываться (по умолчанию) её полный вариант в новой вкладке, а альттекстом (тоже по умолчанию) будет служить её дескрипшен с буры;
— запостит этот пост на табун в указанный блог в виде черновика;
— если это не удалось, то оставит содержимое поста в виде файла, указанного в переменной backup, и его можно будет залить на табун вручную.
После этого останется только залезть в свои черновики, проверить, опубликовать пост и пнуть его в ленту (или, если запостить его не удалось, то разобраться, почему и вручную создать пост с содержимым из backup-файла).
Если параметр pick начинается с символов "*:", то это означает, что pick-файл будет залит на внешний ресурс, указанный после этих символов. Сейчас из таких ресурсов поддерживаются «rentry» и «dpaste»: если указать это слово после двоеточия, то pick-файл будет создан в формате Markdown и залит на выбранный ресурс.
Если же pick не начинается с этих символов, то pick-файл будет создан в формате HTML и положен по пути, указанному в этой переменной (относительно домашнего каталога пользователя).
Идея с pick-файлом появилась потому, что автоматический запуск скрипта через crontab не оправдал себя — куда удобнее не чистить черновик поста от негодных пикч, а сразу в диалоговом режиме со скриптом указывать ему пикчи для публикации.
Коды возврата:
0 — всё отлично, можно лезть в черновики проверять появившийся пост;
1 — не получилось импортировать модуль tabun_api;
2 — не получилось достучаться до буры;
3 — не получилось разобрать JSON, который вернула бура;
31 — неправильно указан протокол после "*:" в параметре pick (поддерживаются только «rentry» и «dpaste»);
32 — не удалось залить pick-файл на удалённый ресурс;
4 — не удалось залогиниться на табун;
5 — не удалось залить пикчи на табун;
9 — не удалось определить блог по его текстовому имени;
10 — не получилось запостить пост на табун.
Такие дела =)
43 комментария
Какая интересная формулировка). Если автопилот будет тупо тащить всё на свете, что имеет нужный тэг, то полезность его близка к нулю.
Впрочем, вместе с кучей потенциальной годноты ты увидишь и кучу потенциального трэша, который потом будет долго хотеться развидеть =)
А вообще я ожидал такого комментария, ибо действительно, пак ручной работы в любом случае более ламповый будет, нежели автоматически собранный. Но если составитель пака устал, ему на смену никто не приходит (сколько я видел постов типа «последний пак имени такой-то пони»), и надвигается выбор эскобара уровня «пака не будет вообще» или «пак будет собираться полуавтоматически», то второй вариант хотя бы даёт возможность радовать тех, кто по-прежнему любит смотреть еженедельные паки с любимой пони, при этом куда меньше нагружая составителя пака =)
— возрастной рейтинг (safe)
— по рейтингу (но не score, а wilson_score, который позволяет встревать годноте, которую тупо видело очень мало народа) — wilson_score.gte:0.8 позволяет попадать адекватным вещам, где-то на 0.7 уже надо включать ручной отбор
А вот отсекать можно:
— мемы (-exploitable meme, -meme)
— фотки (-irl. Тег photo может давать ложные срабатывания, все никак не дойдут руки разбить два значения этого тега)
— комиксы (-comic)
— скрины сериала (-screencap)
— всякие 4чаны, скрины самой буры итд (-meta)
— стены текста (-text only)
— и так далее исходя из того, что встретится и по необходимости. Особо упоротые люди выстраивают конструкции, которые выбрасывают пикчи по сложным фильтрам (типа «рисунки этого артера, но выше такого-то рейтинга»)
Поэтому и пытаемся родить второе название тега для таких случаев
* Появилась куча шаблонов: для текстового и картиночного спойлера, КДПВ и пикчи под спойлером;
* Блог теперь можно задавать и его названием из ссылки (да, я всё-таки разобрался, как это сделать, но фича экспериментальная, ибо у Андреймала сказано, что функция `get_blog` «недоделанная»);
* Теперь не страшно, если спойлерпиков будет меньше, чем реальных спойлеров (лишние просто будут сделаны текстом);
* Необязательна первая запятая в дополнительных тегах;
* Появился Markdown-овский README;
* Больше исключений обрабатывается нормально;
* Добавлены коды возврата.
TODO:
* Сделать возможность задавать содержимое альттекста в картинке;
* В шаблоны добавить плейсхолдеры для следующих переменных из json дёрпибуры: name, uploader, source_url, id, description;
* Туда же добавить конструирование переменной derpibooru_url = mirror + '/images/' + str(id);
* Более красиво сделать сообщения о выкачке пикч.
Чтож, поизучаю код. Если переделаю код заливать отчёты с фотографиями одно удовольствие станет)
* Сделана возможность задавать содержимое альттекста в картинке;
* В шаблоны добавлены плейсхолдеры для следующих переменных из json дёрпибуры: name, uploader, source_url, id, description — и дефолтные значения для них, кроме id;
* Туда же добавлено конструирование переменной __DB_URL__ = mirror + '/images/' + str(id);
* Более красиво сделаны сообщения о выкачке пикч (прогресс и адрес на дёрпибуре);
* Сделана возможность конфигурирования параметра сортировки и он переделан по умолчанию на `wilson_score`, в отличие от `score`;
* Добавлены дополнительные теги фильтрации в also.
Ну и что за дискриминация ИИ, будто им не хочется тоже читать статьи, тексты, посты, как всем нормальным пони!
Короче, я назвал это «Cherry Berry-pick» (ну, по аналогии с термином cherry-pick, ага).
Теперь скрипт после запуска выкачивает инфу по всем нужным пикчам, а затем создаёт с ними HTML-ник, который нужно открыть в браузере (URL для открытия скрипт выводит) и потом вписать номера нужных пикч через пробел/запятую/точку с запятой в поле ввода в скрипте (а потом то же самое сделать с бонусными пикчами, которые будут вторым блоком в HTML-нике). После этого скрипт создаст уже готовый черновик, на проверку которого придётся тратить куда меньше времени — ведь пикчи уже отсмотрены и выбраны.
В облаке, кстати, можно, да, но я не очень представляю, как это технически реализовать без привязки к конкретному аккаунту конкретного облака.
Порты открывать/пробрасывать муторно, не говоря уже о лишней дыре — vds круглосуточно работает.
Простейший вариант — прикручиваем авторизацию к какому нибудь яндекс-диску, с указанием логина/пароля от него в теле скрипта, чтобы выгружал туда по webdav. Ну или ресурсы, подобные sendspace (правда я хз, есть ли у них какое либо апи).
Сейчас модно кстати кидать в мессенджеры, например в телегу или в дискорд, чтобы оттуда рулить но я так не умею, и насколько оно трудоемко — не знаю.
Телега, дискорд… Не кажется, что кидать туда HTML-ник — удобная идея: всё равно это будет отдельный файл, который нужно будет скачивать и открывать в браузере.
Не откроет — я ручками все открываю (по крайней мере у AWS так). Хакается вообще всё, причём цель не страничка, а линуха; которая эту страничку крутит (банальный брутфорс ssh, sip и так далее). Я то может и не потеряю, но если с этой vds начнут рассылать спам, координировать ddos атаки или рулить шеллом — мне легче не станет. Щас у меня там крутится один единственный скрипт, чья задача мониторить новорегов, сверять почту со списком и при совпадении выписывать пермач; при минимальном вмешательстве с моей стороны. Работает эта штука весьма эффективно, хоть и сделана «на коленке» (разумеется не мной — я лишь составил тз и нашел исполнителей).
Сложна. Я в этом почти не шарю, весь мой опыт — развернуть консольного клиента яндекса, чтобы с сервера папку с диском синкал в фоне… api заявлены для C, java и php.
Да. Штука в том, что на vds ходишь через ssh (разумеется через ключ), а такое не с каждого устройства провернешь (мобилка, разные компы на разных осях — винда, мак, линуха), а та же телега как и яндекс диск открывается со всего, без особых заморочек с секьюрностью — достаточно обычного браузера. Ходить по ssh через браузер я еще не научился (не говоря уже про передачу файлов оттуда), а ставить туда гуй нет смысла тк на все про все аж 8гб + 1 gb ram.
Хотяяя… Я же могу там развернуть этот самый яндекс диск, чтобы он сливал мне тот самый файлик…
Тем более там не C, а C# и ObjectiveC, это, а также С++ — четыре абсолютно различных языка, вопреки популярному мнению. У меня есть один чёл, который на наш эльбрус ходит с телефончика (и умудрился прислать мне публичный ключ, чтобы я ему сделал доступ, сначала скриншотом =) Я такой «эээ, ты „ваще лол“, что ли, ты хочешь сказать, мне надо это Base64 переписывать ручками в authorized_keys? Не-не-не, Дэвид Блейн», пришлось ему пересылать мне его текстом). Да, в твоём случае это будет явно более автоматизированно, чем перекидка через телеграм, например.
Вот поддерживал бы какой-нибудь яндекс-диск тот же REST — было бы вполне удобно кидать туда тот же файлик через PUT. Или scp/ftp тоже как вариант.
Или push на гитхаблол, нет, это уже слишком =)Хотя… Ты меня навёл на мысль.
Попробуй ветку rentry из гита, и напиши в строчке с заданием pick такое вот вместо имени файла:
У тебя тогда должно залиться не в html на локалхост, а в markdown на rentry.co.
Сейчас обновлю шапку поста.
У меня не создаются временные файлы вообще, ну да фиг с ними — на rentry вроде залился.
Ок, выбираю картинки и получаю
нечто
ну и очень странно, что тег main pony на буру почему то прилетает с минусом (судя по логике — те что с минусами наоборот отсеиваются). Я конечно тот еще кодер, но какая то логика должна же быть? Прочие теги вроде бы отрабатываются.
P.S. Интересно было бы какие-нибудь ещё буры проверить, оказывается, у них апи отличаются... В бонус-паке так и должно быть — туда идут те картинки, на которых есть бонусная понька, но нет основной, поэтому main там ставится с минусом.
Да, для создания pick-файла он ничего (кроме json с буры) не скачивает — в этом файле картинки имеют их оригинальный URL на буре. Соответственно, json тоже держится в памяти и никуда не сохраняется. Единственное, что он пишет на диск при своей работе, помимо pick-файла — это файл с номером пака, в котором он хранит, логично, номер этого пака и при каждом следующем вызове его увеличивает.
Также в настройках добавлен параметр «pagelimit» — максимальное количество выкачиваемых страниц буры. `0` — выкачивать все возможные, `1` — вести себя как раньше (выкачивать одну страницу).