Сохранение в тексте картинки (урл включая домен), постоянные ссылки

Тема в разделе "Шаблон вывода", создана пользователем invisible, 30 дек 2017.

  1. invisible

    invisible New Member Пользователи

    Регистрация:
    30 июл 2012
    Сообщения:
    28
    Есть проект, сбор данных. Сохраняет статью с картинками (картинки с источника)

    Код:
    [CLEARTAGSATTRS(img:src|a:href)][HTMTOTXT:img,src]<CD_AUTO!>[/HTMTOTXT][/CLEARTAGSATTRS]
    
    каждый источник добавляет картинки по разному, у кого-то есть атрибуты, кто-то одинарные кавычки использует, кто-то двойные, но главное есть 2 вида статей:

    1) с картинками вида
    Код:
    <img src="http://site.ru/img/kartinka.jpg">
    
    2) с картинками вида
    Код:
    <img src="/img/kartinka.jpg">
    
    Во втором случае теряем домен, и естественно ссылка на картинку становится битая.

    Вопрос, можно проверить текст, и там, где относительная ссылка, например /img/kartinka.jpg заменять на постоянную сайт_источник/img/kartinka.jpg
    Как это правильно сделать?
     
  2. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Здравствуйте.

    При скачивании картинок программа автоматически преобразует относительные ссылки в абсолютные.

    Не понимаю, в чем у вас проблема.
     
    invisible нравится это.
  3. invisible

    invisible New Member Пользователи

    Регистрация:
    30 июл 2012
    Сообщения:
    28
    Картинки не нужно сохранять на диск (скачивать), нужно сохранить текст как есть, а также тег img как есть.

    Т.е. будет в тексте картинка с источника загружаться

    Вот в данном случае, если картинка была указана в тексте без домена, то она не отобразиться, т.к. был прописан относительный путь

    Вопрос как это проверить, и если надо подставить название домена источника, чтобы отобразить картинку
     
    Последнее редактирование: 30 дек 2017
  4. Kreol

    Kreol Модератор Команда форума Модератор

    Регистрация:
    6 янв 2013
    Сообщения:
    2.666
    найдите картинку в которой не хватает домена и сделайте поиск/замену
    типа href="./pic.jpg"|href="domen/pic.jpg"
     
    invisible нравится это.
  5. invisible

    invisible New Member Пользователи

    Регистрация:
    30 июл 2012
    Сообщения:
    28
    Источников много, все по разному называют свои картинки.
    К сожалению такой вариант не подойдет.

    Еще раз продублирую код проекта.
    Код:
    [CLEARTAGSATTRS(img:src|a:href)][HTMTOTXT:img,src]<CD_AUTO!>[/HTMTOTXT][/CLEARTAGSATTRS]
    Если не совсем понятно объяснил проблему, могу пример проекта показать.
     
  6. Kreol

    Kreol Модератор Команда форума Модератор

    Регистрация:
    6 янв 2013
    Сообщения:
    2.666
    Помоему других вариантов нет.
    И даже если он автоматом будет добавлять не факт, что везде оно будет работать.
    Иногда фотки лежат на других доменах
     
  7. invisible

    invisible New Member Пользователи

    Регистрация:
    30 июл 2012
    Сообщения:
    28
    Если фотки лежат на других доменах это обычно указано.
    И при сборе статей фото после отображаются

    Как я предполагаю надо сделать:
    Найти все src='...' или src="..."
    Проверить есть ли в ... есть http или https и домен, тогда с src ничего не делаем, иначе подставляем домен статьи Ссылки недоступны для гостей, получается src="Ссылки недоступны для гостей..."
     
  8. Kreol

    Kreol Модератор Команда форума Модератор

    Регистрация:
    6 янв 2013
    Сообщения:
    2.666
    я бы на вашем месте просто 1 проектом сначала собрал все сайты по пару ссылок и посмотрел что там и где вообще есть и потом уже принимал решение
     
  9. xLime

    xLime Well-Known Member Супер Модератор Модератор

    Регистрация:
    4 сен 2017
    Сообщения:
    401
    Добрый день.
    Домен сохраняете в Ссылки недоступны для гостей.
    Код:
    [VAR]
    [SET:DOMAIN]
    [FIRST_REPLACE(re:(https?://.+?/)|@@@$1@@@
    @@@{get}@@@|{get}
    )]<CD_DOCURL!>[/FIRST_REPLACE]
    [/VAR]
    Затем проверяете наличие домена в границе со ссылкой на картинку с помощью макроса [CHECKENTRY].
    Обратите внимание на порядок выполнения макросов с помощью лога.

    Либо можно еще на этапе поиска ссылок удалить домен с помощью функции замены в дополнительных настройках границ и принудительно добавлять их в шаблоне вывода с помощью того же макроса [VAR].
    Код:
    http://{skip}/|
    https://{skip}/|
     
    Последнее редактирование: 30 дек 2017
    kagorec, Kreol, invisible и ещё 1-му нравится это.
  10. invisible

    invisible New Member Пользователи

    Регистрация:
    30 июл 2012
    Сообщения:
    28
    Спасибо
    Может еще кто-то подскажет регулярное выражение, как в тексте регуляркой подставить где нужно домен (переменную) в src="..."
    Т.к. используется макрос
    <CD_AUTO!> - получение статьи с картинками (без скачивания)
    Отдельно картинки не получаю
     
  11. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.432
    Адрес:
    Latvia
    Чтото подобное требовалось когда парсил статьи из выдачи.

    Получаем домен со слэшем в конце и ложим в переменную.
    Код:
    [VARF][SET:domainn][FIRST_REPLACE(re:https\://([^\/]+)/.*?$|https://$1/{break}re:http\://([^\/]+)/.*?$|http://$1/{break}re:^www\.([^\/]+)/.*?$|www.$1/)]<CD_DOCPATH!>[/FIRST_REPLACE][/SET][/VARF]
    Вставляем переменную с доменом через макрос замены в полученной статье от <CD_AUTO!>
    Код:
    [REPLACE("//|"https://{break}="/|="[VARF:domain]{break}re:\="([^\/]+)/|="[VARF:domain]$1/{break}'//|'https://{break}='/|='[VARF:domain]{break}re:\='([^\/]+)/|='[VARF:domain]$1/)]<CD_AUTO!>[/REPLACE]
    п.с. надо проверять
     
    invisible и xLime нравится это.
  12. invisible

    invisible New Member Пользователи

    Регистрация:
    30 июл 2012
    Сообщения:
    28
    Спасибо за помощь, сработало не на 100%, вставляет домен 2 раза, попробую исправить
     
  13. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.432
    Адрес:
    Latvia
    В шаблоне вывода тогда так.
    Код:
    [REPLACE("//|"https://{break}="/|="[VARF:domain]{break}'//|'https://{break}='/|='[VARF:domain])]<CD_AUTO!>[/REPLACE]
    п.с. Скорее все это было лишним
    Код:
    re:\="([^\/]+)/|="[VARF:domain]$1/
     
    Root, invisible и xLime нравится это.

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