Пидоры-Кодеры помогите!
Дорогие Пидоры! Давеча мой старый заказчик, которому я много лет разрабатываю сайты, медиаконтент и настраиваю рекламу, стал нуждаться в генерации xml - карточек для их импорта в стороннюю базу: https://turk.estate/instructions/xml-import-description/
"Что может быть проще?" - подумал я. И согласился разработать для него десктопное приложение с окошками, которые он будет заполнять нужной информацией, чтобы потом приложение генерировало файл по ТУ.
Когда-то давно, в школьные времена, я принимал участие в олимпиадах по программированию (там где нужно разработать оптимальный код и соревноваться с другими командами в скорости выполнения алгоритма), писал примитивные изометрические игрушки, потом (больше 10 лет назад) написал на коммерческой основе несколько офисных приложений для учета, и до сих пор периодически помогаю детям друзей с курсовыми работами на Pascal, так что, сейчас, соглашаясь на работу, я был полностью уверен в своих силах: "Сгенерировать xml - проще простого, а с визуальной средой уж как-нибудь разберусь, наверняка есть гора готовых решений. Или на крайний случай скачаю модуль мышки, модуль работы с буфером обмена, буду считывать координаты кликов мыши, напишу систему ввода с клавиатуры, чтобы работали все служебные кнопки и по пикселям из линий соберу окошко, чтобы было похоже на нормальный фронт".
Проблема, как вы уже могли догадаться по ходу мысли выше, что я консольщик в чистом виде и знаю только Pascal. Ни смотря на то, что занимаюсь разработкой сайтов, php и js я тоже не знаю. Ну, я могу поправить чужой код, чтобы он делал ровно то, что мне требуется, но написать его с нуля - невыполнимая задача (мне это и не требуется, коды понимаю, а при современном количестве плагинов под WP можно сделать буквально любой функционал на сайте с нынешними навыками).
Ну, и, да, еще лет 5 назад во время отпуска сел за Unity, подучил C#, и тоже что-то смог написать, но про семейство C уже не помню ничего.
За задачу я взялся за бесценок, просто потому, что хотел "тряхнуть стариной", люблю кодить, задача выглядела нереально простой, а в обычной жизни возможность что-то написать представляется нечасто.
План был такой:
1) Загуглить готовый код для какой-нибудь понятной среды, и его поправить, ведь, задача тривиальная и, наверняка, ее решили до меня 100 раз. Но оказалось, что то ли гугл-выдача неудачно эволюционировала, то ли запросы неправильные ввожу.
2) Подумать, как собрать самому. Подумал. Оказалось, что даже чтобы подключить к Паскалю буфер обмена - нужно вынести себе мозг. Учитывая, что я уверен, что существует готовое решение, хочется браться за этот вариант в последнюю очередь.
3) Нейросети??? Не знаю я как ими воспользоваться с моими вводными и никогда этого не делал.
4) Прийти жаловаться на Реактор.
ТЗ:
Манагер садится за комп, копипастит с сайта в приложку описание из карточки товара и ссылки на картинки, нажимает кнопку "сгенерировать" и получает на выходе xml, который импортирует на сторонний сайт. Приложка может быть десктопной или в вебе - всем насрать.
Бэкенд на любом языке по примеру если уже есть функция записи переменных в файл, я напишу. Откуда взять фронт с минимальными трудозатратами - не понимаю и, вообще, как оказалось, в нем не разбираюсь.
Я все еще уверен, что в современном мире все уже готово и я могу решить задачу за вечер, но не понимаю, в какую сторону двинуться. Помогите идеями как решить проблему без масштабного изучения новых сред разработки, языков или написания кучи кода с нуля. При этом что-то простое новенькое с большим удовольствием освою - в том числе, чтобы это сделать, и взялся за задачу.
А я пока что ковыряю Delphi и смотрю, могу ли я в нем быстро разобраться, так что надеюсь на идеи не про Delphi.
Заранее спасибо за вашу мудрость, Пидоры :3
Подробнее
ИСПОЛЬЗОВАТЬ ТОЛЬКО В СЛУЧАЕ КРАЙНЕЙ НЕОБХОДИМОСТИ Ж
пидоры помогите,реактор помоги,фронтенд
А то по описанию у тебя XML из пары строчек, чего там гегерировать-то?
https://developer.mozilla.org/en-US/docs/Web/API/XMLSerializer
Для тебя наверное будет самый простой вариант.
import tkinter as tk
import xml.etree.ElementTree as ET
import tkinter.messagebox
class ProductGenerator:
def __init__(self, master):
self.master = master
master.title("Генератор продукта")
self.label = tk.Label(master, text="Введите описание товара:")
self.label.pack()
self.description_entry = tk.Entry(master, width=50)
self.description_entry.pack()
self.links_label = tk.Label(master, text="Введите ссылки (до 5):")
self.links_label.pack()
self.link_entries = []
for i in range(5):
entry = tk.Entry(master, width=50)
entry.pack()
self.link_entries.append(entry)
self.generate_button = tk.Button(master, text="Сгенерировать", command=self.generate_xml)
self.generate_button.pack()
def generate_xml(self):
description = self.description_entry.get()
links = [entry.get() for entry in self.link_entries if entry.get()]
if not description or not links:
return
product = ET.Element("product")
description_element = ET.SubElement(product, "description")
description_element.text = description
for link in links:
link_element = ET.SubElement(product, "link")
link_element.text = link
tree = ET.ElementTree(product)
tree.write("product.xml", encoding="utf-8", xml_declaration=True)
self.description_entry.delete(0, tk.END)
for entry in self.link_entries:
entry.delete(0, tk.END)
self.show_success_message()
def show_success_message(self):
success_message = "XML файл успешно создан: product.xml"
tk.messagebox.showinfo("Успех", success_message)
def main():
root = tk.Tk()
app = ProductGenerator(root)
root.mainloop()
if __name__ == "__main__":
main()
Кнопки для стандартных значений, текст, ссылки текстом.
Я сам давно зарёкся что-то копипастить из броузера, кроме чистого текста, потому что скопированный из отрендеренной веб-страницы контент оказывается попердоленным до неузнаваемости. А если парсер работает в броузере, с исходным материалом - там всё более-менее понятно и предсказуемо.
Поэтому и родилась ситуация и решаю, чему, чтобы ее решить, научиться.
Ееебааать...
(вообще, тут похоже тот уникальный случай, когда может пригодиться XSLT, которым нас давным давно в универе мучили - как раз из html можно выдернуть текст в разных полях и выдать это ввиде XML. Но, это та еще муть).
У js есть доступ к DOM, смотрите какие части вам нужны, в цикле выдерайте из них текст и в виде xml впихивайте в какое-нибудь текстовое поле. Пусть пользователь уже это просто копипастит в xml файл. А вообще есть возможность, что оттуда можно прям в xml файл сохранить сразу. jKelly image downloader же как-то с реактора картинки сохраняет в файлы. Делайте текстовое поле невидемим. Тогда вообще будет одна кнопка "сделать зашибись" на сайте. Но я тут не специалист.
Правда, чтобы это работало, надо чтобы разметка сайта не менялась. Вообще, если сайт принадлежит заказчику, то самый простой вариант изменить прямо код сайта. Какая-нибудь особая ссылка вроде сайт/товар/xml работает только для админа или авторизированного пользователя, а там код бакенда вместо генерации html страницы с товаром сразу генерирует xml файл. Из кода вообще почти на любом языке/фреймворке там в итоге будет только один шаблон их xml тегов, где будут расставлены имена полей из базы данных.
Часть того, что на сайте заказчика находится в описании - у принимающей стороны существует в виде атрибутов. И наоборот.
Нужно было бы автоматизировать анализ текста и на его основе заполнять переменные.
И после этого все равно потребовался бы менеджер, чтобы проверить, что все сделано правильно.
Ну, наоборот - вообще не проблема. Объединить разные поля - для компьютера тривиальная задача.
Тогда еще вариант все-равно с сайтом: выдаете внутреннюю страницу, где все есть несколько Input-ов - соответствующих полям выходного формата в xml файле. Все поля из вашей базы туда куда-то заполнены. Юзер руками часть данных из одних полей, где оно намешано, вырезает в другие пустые, жмет кнопку и или сервер выдает xml файл из этих Input-ов, или js скрипт его локально генерирует и сохраняет. Этот вариант устойчив к разметке сайта. Пока формат БД не поменяется - все будет работать.
Qt вполне подойдет, гуи для десктопов, xml writer/reader классы уже есть, но надо в плюсы понимать чутка.