1. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!
    Скрыть объявление

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

Тема в разделе "Техническая поддержка", создана пользователем webdev, 1 мар 2018.

  1. webdev

    webdev New Member

    Регистрация:
    26 сен 2017
    Сообщения:
    21
    Симпатии:
    4
    Доброго времени суток!
    Подскажите, пожалуйста, как правильно сделать запись файлов на диск через 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? Может вообще по-другому это делается?
     
  2. Support

    Support Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    16 мар 2012
    Сообщения:
    4.547
    Симпатии:
    2.164
    В рамках обычного пресета нельзя сохранить результат парсинга одного запроса в несколько файлов, перебирая в Формате имени файла результата значения в цикле.
    Насколько я понял вопрос, у вас по одному запросу отдается несколько картинок, которые вы хотите сохранить в разные файлы. Как вариант, если кол-во картинок постоянное, то можно добавить несколько файлов результатов, и в каждый выводить нужную картинку.

    Или же, можно попробовать сделать такое сохранение в JS парсере с помощью fs. Пример записи файлов через fs есть здесь: https://a-parser.com/threads/3120/#post-13396
     
  3. webdev

    webdev New Member

    Регистрация:
    26 сен 2017
    Сообщения:
    21
    Симпатии:
    4
    Спасибо! Количество картинок всегда разное. Я попробую через nodejs.
     
  4. webdev

    webdev New Member

    Регистрация:
    26 сен 2017
    Сообщения:
    21
    Симпатии:
    4
    Я сделал сохранение картинок на nodejs. Всё работает отлично. Спасибо!
    Есть ещё вопрос: можно ли как-то работать с уникализацией из js-кода? Поскольку в моем случае статья качается целиком, а затем качаются картинки внутри нее, то апарсер не делает картинки уникальными (они не проходят по идее через апарсер, следовательно, не попадают в уникализацию по строке) и при последующем проходе статьи скачает их заново, а этого делать не нужно. Может есть возможность передавать уникальные значения в механизм уникализации?
    Для статей уникальным значением является строка: article_<IdСтатьи>
    Для картинок уникальным значением хочется сделать: image_<IdКартинки>
     
  5. Support

    Support Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    16 мар 2012
    Сообщения:
    4.547
    Симпатии:
    2.164
    Vvtex нравится это.

Поделиться этой страницей