Запись файлов на диск через FOREACH

  • Автор темы Автор темы webdev
  • Дата начала Дата начала

webdev

New Member
Доброго времени суток!
Подскажите, пожалуйста, как правильно сделать запись файлов на диск через FOREACH?

Как было
========
В результатах парсинга у нас есть поля:
link - текущий URL
articleId - ID статьи
photoId - ID фотографии
photoExtension - Расширение фотографии (jpg, jpeg, gif).

Сохранение на диск сделано так:
File name:
Код:
[%IF p1.link.match('\.(jpe?g|gif)$') and p1.articleId>0;"site1/" _ p1.articleId _ "/img/" _ p1.photoId _ "." _ p1.photoExtension;END;%]
Result format:
Код:
$p1.content

Эта схема работала и при скачке контента фотографии раскаладывались в папках для каждой статьи.
Затем было решено переделать скачку фотографий вместе со статьей.

Как стало
=========
В результатах парсинга у нас есть поля:
link - текущий URL (на этот раз это URL статьи)
articleId - ID статьи
photos - Массив с фотографиями. Каждая фотография предсатавлена json-объектом с полями: photoId, photoExtension.

В результате я не пойму как мне организовать сохранение данных на диск?

В File name я написал следующее:
Код:
[%
FOREACH photo in p1.photos;
    "site1/" _ p1.articleId _ "/img/" _ photo.photoId "." _ photo.photoExtension;
END;
%]

Что писать в Result format? Может вообще по-другому это делается?
 
В рамках обычного пресета нельзя сохранить результат парсинга одного запроса в несколько файлов, перебирая в Формате имени файла результата значения в цикле.
Насколько я понял вопрос, у вас по одному запросу отдается несколько картинок, которые вы хотите сохранить в разные файлы. Как вариант, если кол-во картинок постоянное, то можно добавить несколько файлов результатов, и в каждый выводить нужную картинку.

Или же, можно попробовать сделать такое сохранение в JS парсере с помощью fs. Пример записи файлов через fs есть здесь: https://a-parser.com/threads/3120/#post-13396
 
Спасибо! Количество картинок всегда разное. Я попробую через nodejs.
 
Я сделал сохранение картинок на nodejs. Всё работает отлично. Спасибо!
Есть ещё вопрос: можно ли как-то работать с уникализацией из js-кода? Поскольку в моем случае статья качается целиком, а затем качаются картинки внутри нее, то апарсер не делает картинки уникальными (они не проходят по идее через апарсер, следовательно, не попадают в уникализацию по строке) и при последующем проходе статьи скачает их заново, а этого делать не нужно. Может есть возможность передавать уникальные значения в механизм уникализации?
Для статей уникальным значением является строка: article_<IdСтатьи>
Для картинок уникальным значением хочется сделать: image_<IdКартинки>
 
Назад
Верх