Форум пользователей Impera CMS
Impera CMS - отличный движок для лёгкого создания интернет магазина.
Обладает невероятным количеством функций, необходимых в онлайн торговле.

Следить
Главная
12:15
11 фев
#
написал:

Обращаюсь к фрилансерам из категории вебпрограммисты, прошу назвать цену/сроки по предложенному здесь заданию, и затем выбранный кандидат приступит к выполнению. Оплата - через сейф.

Постановка задачи

Сделать копировщик лендингов, то есть простейшую версию программы типа HTTrack Website Copier, Offline Explorer или подобной - только на PHP и только заточенную под копирование единственной страницы сайта.

Дадим этому скрипту рабочее название copier.php.

Крайне важно, чтобы получившийся скрипт был способен наиболее полно копировать указанную страницу сайта с учётом всех современных тегов, с помощью которых может происходить подключение стилей, яваскриптов, медиафайлов к вёрстке страницы.

То есть исполнитель должен, во-первых, знать нюансы риппинга страниц и, во-вторых, додумать парсинг новых тегов, которые по незнанию составителя техзадания могли оказаться не перечисленными во втором пункте ТЗ ниже.

Что будет на входе

Скрипт принимает всего 2 входных параметра:

  • url - абсолютный адрес копируемой страницы сайта
  • format - как форматировать HTML и CSS, имеет такие значения:
    • asis - оставить как есть
    • tab - табуляция
    • 2s - 2 пробела
    • 4s - 4 пробела

К скрипту прикреплено несколько технических папок. Предполагается что менеджер, обслуживающий позже скрипт, разместит в этих папках некие демонстрационные медиафайлы, которые во время работы скрипта заменят собой оригинальные медиа (вдруг там видео на 1Gb? вдруг медиа сейчас недоступно? - тогда демо заглушку подставим). Вот список папок:

  • demo
    • audio
    • images
    • js
    • video

Папки images и js пока пустые, их резервируем на будущее.

Что будет на выходе

После успешной отработки скрипта на выходе должна получиться вот такая структура папок скопированной страницы. Каждая папка опциональная, то есть будет присутствовать на выходе только в том случае, если в ней оказался хотя бы один файл:

  • copy
    • audio
      • originals
    • css
    • fonts
    • html
    • images
      • originals
    • js
    • video
      • originals

Важно помнить, что при каждом старте скрипта нужно стереть папку copy и создать её структуру заново.

Алгоритм работы

На мой взгляд, работа скрипта после старта, то есть непосредственно копирование страницы должно происходить следующим образом. Этот алгоритм и надо реализовать:

  • 1. Создать пустые массивы css, img, js, fonts, audio, video. Они нужны для того, чтобы на шаге 2 собрать все URL-ы подключаемых медифайлов по типам, а на шаге 3 - ещё дособрать некоторые URL-ы прописанные в стилях, прежде чем начать скачивать медиафайлы на шагах 3-8.

    Не забудьте, что в стилях возможно подключение изображений, шрифтов, курсоров, а также импорт других стилей с помощью инструкции @import url(...).

  • 2. Извлечь исходную страницу
    • Получить HTML-код страницы из указанного входного параметра url.
    • Отформатировать согласно указанному входному параметру format.

    • Распарсить теги
      <link rel="stylesheet" href="..." *>
      • Заменить атрибут ... локальной ссылкой.
      • Извлечённую ссылку добавить в массив css.

    • Распарсить теги
      <link rel="*icon*" href="..." *>
      <link rel="apple-touch-icon" href="..." *>
      <img src="..." *>
      <svg src="..." *> - возможные атрибуты платформ: src, href, hc-svg-href, xlink:href
      <image src="..." *>
      <picture *>* <source srcset="..." *> *</picture>
      • Заменить атрибут ... локальной ссылкой.
      • Извлечённую ссылку добавить в массив img.

    • Распарсить теги
      <script src="..." *>
      • Заменить атрибут ... локальной ссылкой.
      • Извлечённую ссылку добавить в массив js.

    • Распарсить теги
      <audio src="..." *>
      <audio *>* <source src="..." *> *</audio>
      • Заменить атрибут ... локальной ссылкой.
      • Извлечённую ссылку добавить в массив audio.

    • Распарсить теги
      <video src="..." *>
      <video *>* <source src="..." *> *</video>
      • Заменить атрибут ... локальной ссылкой.
      • Извлечённую ссылку добавить в массив video.

    • Распарсить теговые атрибуты style
      • Найти все url(...).
      • Заменить ... локальной ссылкой.
      • Извлечённую ссылку добавить в соответствующий массив.

    • Сохранить HTML в папку copy/html.

  • 3. Извлечь исходные CSS
    • Получить каждый файл согласно массиву css.
    • Отформатировать согласно указанному входному параметру format.
    • Распарсить свойства стилей
      • Найти все url(...).
      • Заменить ... локальной ссылкой.
      • Извлечённую ссылку добавить в соответствующий массив.
    • Сохранить файл локально в папку copy/css.

  • 4. Извлечь исходные IMG
    • Получить каждый файл согласно массиву img.
    • Сохранить оригинал локально в папку copy/images/originals.
    • Заменить изображение на заставку placeholder WWW x HHH.
    • Сохранить файл локально в папку copy/images.

  • 5. Извлечь исходные JS
    • Получить каждый файл согласно массиву js.
    • Сохранить файл локально в папку copy/js.

  • 6. Извлечь исходные FONTS
    • Получить каждый файл согласно массиву fonts.
    • Сохранить файл локально в папку copy/fonts.

  • 7. Извлечь исходные AUDIO
    • Получить каждый файл согласно массиву audio.
    • Сохранить оригинал локально в папку copy/audio/originals.
    • Заменить звук на случайную запись из папки demo/audio.
    • Сохранить файл локально в папку copy/audio.

  • 8. Извлечь исходные VIDEO
    • Получить каждый файл согласно массиву video.
    • Сохранить оригинал локально в папку copy/video/originals.
    • Заменить видео на случайную запись из папки demo/video.
    • Сохранить файл локально в папку copy/video.

Обратите внимание на пункт 4 - как происходит скачивание и сохранение изображений, а также на пункты 7 и 8.

14:43
11 фев
#
?
написал:

200$. 4-5 дней.

Вопросы:

  • 1. Обязательно ли следовать правилу "собираем в массив, затем скачиваем по массиву"? Ведь можно файлы сразу сохранять при распарсивании ссылок, видео, аудио и т.д.
  • 2. Форматирование стилей, смотри пункт 3.2. Если, например, css.min - обязательно или можно игнорить?

Ну а так, все понятно.

19:13
11 фев
#
написал:
Денис написал: Обязательно ли следовать правилу "собираем в массив, затем скачиваем по массиву"?

На ваше усмотрение.

Денис написал: Форматирование стилей... - обязательно или можно игнорить?

Надо. Украшательство конечно, делается лишь для удобства того вебмастера, кто потом захочет быстрячком что-нибудь исправить в стилях.

00:17
12 фев
#
?
написал:

Задание понял. Сделаю за 7 дней, цена 14000 рублей.

Вы знаете меня по верстке. Тут задание чистое программирование. Будет написано в лучшем виде, не подведу.

13:26
12 фев
#
?
Progigaman написал:

Ну я могу написать copier.php так чтоб грамотно. Плюс продебажить, рефакторить код. 300$ и 12 дней.

Только с оплатой как. Может на fl.ru сперва запостите проект? Стремно читать "оплата через сейф" на форуме без регистрации. Я не знаю кто за ником "разработчик".

21:43
12 фев
#
написал:
Progigaman написал: Может на fl.ru сперва запостите проект?

Так о публикации проекта на фрилансе думают лишь в том случае, когда проект предназначен для категории работников нижайшей квалификации, чей мирок огранивается созданием сайтов в стиле "я на Вордпресе крокожу".

  • Ну сами подумайте, понту мне от проекта на FL, Weblancer, Freelancehunt и тому подобных биржах для ну-как-бы программистов. В проект сразу набежит до сотни галдящих "зуб даю, сделаю!", а по факту каждому придётся сначала объяснять что такое парсинг.

А есть другие специалисты, которые хотя бы чем-то интересуются, и кроме фриланса посещают тематические форумы разных современных систем управления сайтом. Разговаривая с такими специалистами о программировании скрипта copier.php, можно надеяться, что они во многих детялях понимают, о чём вообще идёт речь.

Как раз такие программисты мне и нужны для выполнения задания. Поэтому оно было опубликовано здесь, то есть на форуме хорошего сайтостроительного движка, потому что к разработке его элементов приглашалось множество лучших специалистов Рунета и Уанета. Пусть на опубликованное вверху задание откликнется 3 человека, зато это будут люди, реально понимающие задачу.

Progigaman написал: Только с оплатой как.

Да просмотрите хронологию фрилансовых заданий, выполненных на этом форуме хотя бы тем же Михаилом (он ссылку выше указал на свою страницу), и вы поймёте, что я сотрудничаю с исполнителями честно. Выполнил часть работы на совесть - получи оплату.

Вы можете выполнить задание целиком и получить оплату в конце. Ну а коли сотрудничество со мной для вас ещё в новинку, пожалуйста, я готов и на вариант разделения фронта работ на этапы по 100$ за каждый:

  • этап 1 - выполнить пункты 1, 2
  • этап 2 - выполнить пункт 3
  • этап 3 - выполнить пункты 4, 5, 6, 7, 8

То есть как закончили этап, сразу отписываете сообщение здесь, я проверяю, перевожу вам оплату на кошелёк и переходим к следующему этапу.

17:14
13 фев
#
?
Bambino Alex написал:

Я на Вордпресе крокожу - фраза в точку!

Мож на конкурс отправить? Достойна стать мемом 2019 года.

13:00
14 фев
#
?
Progigaman написал:

И что, как подписаться на проект, куда нажать чтобы приступить к работе? Или все будет в режиме форума? "Разработчик" подскажите.

14:38
14 фев
#
написал:

Если готовы, приступить к программированию скрипта можете прямо сейчас. Когда завершите оговоренную часть работы, отписываетесь в этой ветке и высылаете исходники архивным файлом на мой емейл (я сообщу его при первой личной переписке). И ещё в первой переписке вам понадобится сообщить номер банковской карты, или кошелёк Webmoney, или кошелёк Qiwi, или счёт Яндекс.Деньги куда перевести оплату. Начать личное общение можно с помощью формы Контакты.


Контакты »

Рабочее же общение по проекту происходит в той же ветке форума, где было опубликовано задание. Подобная практика непривычная, однако демонстрирует открытость обеих сторон, позволяет не вмешиваясь в общение видеть текущий прогресс любому серому кардиналу, который башляет бабки за проект и негласно управляет всем процессом.

Для удалённого наблюдения за сообщениями в проекте можно использовать приложение RSS Reader на телефоне, с такой целью наверху проекта есть кнопка Следить, где записана RSS-ссылка.

16:28
14 фев
#
?
Progigaman написал:
Разработчик написал: серому кардиналу, который башляет

à-la-guerre.comme/à-la-guerre

ладно, к делу

Там где запустят скрипт установлено расширение Xmlreader или свой парсер писать?

18:49
14 фев
#
написал:

XMLReader не проблема. Понадобится этот компонент - администратор сайта включит на хостинге соответствующий флажок в настройках расширений PHP. Так что из озвученных вариантов (системный, самописный) используйте парсер какой вам нравится.

Написание ответа

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


Обратите внимание! Для противодействия спаму новые посты форума проявляются с задержкой от нескольких минут, пока не пройдут модерацию.