нужд и для удобства, я хочу добавить функцию быстрого поиска фотографий в интернете, чтобы драгендропом перетаскивать их в программу. Каким образом это можно сделать? Если встраивать браузер, то какой самый минимальный вариант, чтобы программа сильно не прибавила в весе?
Можете помочь пожалуйста?
Если ты готов платить денюжку, то используй API гугла, яндекса и т.д. по поиску изображений. Там будет REST API (или что-то подобное). А дальше можешь хоть на нативных формах/канвасах это выводить
Ответ сообщением выше
Тогда тоже самое, но можешь попробовать сэмулировать фронт самого сайта-поисковика с точки зрения сетевого взаимодействия. Но это крайне нестабильный вариант. P.S. посмотри тарифы, можно сделать разные способы оплаты/монетизации и т.д. взаимодействия с API. Для опен-сорс решений тоже могут быть отдельные тарифы со спец. условиями.
Мне в принципе это не так важно. Я просто хочу, чтобы в идеале всё было компактно и получить интересные и полезные знания по этому поводу. Заниматься парсингом поисковика (при этом просто получить HTML-код страницы будет не достаточно) я не сильно хочу, потому что не люблю эту сферу. Мне в принципе, хочется найти хорошее решение, для эстетического удовольствия и создания впечатления компактности программы, когда я выложу исходники на GitHub (не пропадать же добру). В общем говоря, мне бы хотелось другие решения
Посмотри в сторону бесплатных тарифов поисковиков. Там м.б. лимиты, но ответы по REST парсятся через boost/qt/....
можешь использовать халявные ключи от апи (гугл точно выдавал). Просто перед использованием юзеру придётся получить себе ключ и ввести
Та не. Лучше не заниматься подобным, потом к тому же придётся встраивать систему в свой пользовательский интерфейс. А потом ещё и тарифы поменяются и программу придётся переделывать. В общем говоря, лучше бы какой-то другой вариант
Ну тогда зависит от твоего gui-фреймворка. Например, в Qt есть QWebView. Реализовать drag&drop из него также тривиально.
Я использую FLTK . Там, насколько я знаю, нету такого. Но в целом, можно встроить QWebView. Я о нём слышал, но в нём все функции самого полноценного браузера, а мне нужно просто открыть страницу с картинками, чтобы можно было картинки перетаскивать в программу FLTK, мне кажется, его функциональность и вес будут излишними. Но в целом, если это простой и хороший вариант, то можно попробовать встроить его в свою программу
дешевый по ресурсам вариант в этом плане - апи, а обходные пути в любом случае будут излишними. Тем более это qt, вон vscode вообще почти полноценный браузер по сути, но легковесный редактор кода
Я боюсь, что нынче для любой web-страницы с картинками потребуется js. Что означает, что и для этого и нужен будет полноценный браузер. Вариант простой в плане реализации, но, конечно, по размеру бинарника не легковесный. С другой стороны, даже десктопный телеграм уже выедает сотни мегабайт. Так ли это принципиально? Легковесная альтернатива - это, как уже сказали, API и своя реализация лэйаута для отображения всего этого.
На счёт vscode не совсем понял
штука называется electron
Да, но для простого отображения страницы с картинками, не нужно будет наверное большая часть штук, которые есть в qtwebview , да и как я говорил ранее у них какие-то дела с лицензированием. а я решил как минимум отречься от пиратства, но и платить за это я тоже не хочу) Поэтому, раз уж нету хорошей альтернативы кроме API, парсинга и qtwebview , то если у них всё в порядке с лицензией, я выберу третий вариант
Может быть, вам реализовать только поддержку drop в приложение, а drag пусть делают из браузера?
По такому принципу, я могу просто открывать браузер по умолчанию в зависимости от системы. Но такой способ не позволяет открывать отдельное окно, а заставляет пользователя выходить в браузер, делать маленькое окошко (чтобы при нажатии, браузер не перекрывал окно программы) и только потом перетаскивать из браузера картинку. Как-то костыльно, не удобно и не по феншую
Какие штуки имеются ввиду? Он умеет рендерить html, отправлять запросы, получать ответы и процессить js. Это всё будет необходимо для реальной вебстраницы. Если продукт некоммерческий, то лицензия lgpl. Альтернатив масса, просто неясны хотелки.
Во многих оконных менеджерах перетаскивать можно на application bar, который и откроет нужное окно. Про невозможность открытия отдельного окна не понял.
Особых хотелок нету, просто хочу нащупать идеальный вариант в сложившихся условиях. Но в целом, желательно, чтобы это был достаточно минималистичный вариант без использования API и парсинга
Я имею ввиду, если браузер открыт, он просто откроет в нём дополнительную вкладку и (поскольку браузер скорее всего на весь экран) перекроет приложений. Потом браузер нужно будет уменьшать, ставить рядышком окно с приложением и перетаскивать туда картинку. Встроенный же браузер, может позволить открыть отдельное маленькое окно, которое будет хорошо вписываться в "микрофлору приложения", не заставляющее отвлекаться от создания изображения и в целом создающего хорошее впечатление маленькой полезной утилиты
Эмм, перечислю свои варианты: 1) Встройка API поисковиков 2) Встройка WebView 3) Встройка js движка и оборачивание запросов, парсить придётся не так много, но повозится всё-таки придётся с тем, чтобы обеспечить движок необходимым минимумом данных и постобработкой ответов. Примерно такой вариант является самым толковым, при сохранении независимости, но в целом его например придерживаются авторы youtube-dl и многих других программ-утилит для скачивания или создания безбраузерного API для своих нужд.
Программы в 3 пункте, насколько мне известно, переодически нужно обновлять, поскольку HTML код страницы время-от-времени меняется и то, что было актуально раньше, уже не работает сейчас. Скорей всего использую 2 пункт, если вы про QtWebView
Это в целом верно для всех случаев, ибо и API может меняться и WebView от API зависим. А касательно обработки html и пр. там не такие катастрофичные изменения получаются, ибо суть либо остаётся прежней и нужно подправить имена/ссылки, либо переделывать тупо нужно столько же как и в остальных случаях. В случае движка основная возьня - начать, т.е. затащить движок и научить с его помощью получать динамическое содержимое + что не менее важно нужно грамотно играть с частотой и содержанием запросов, дабы либо грамотно обходить проверки на ботов, либо их даже решать. Короче с движком трудно начать, но дальше технический долг примерно одинаковый становится.
Но ведь мне нужно просто отобразить картинки любым способом. QtView просто открывает сайт и сайт может меняться сколько ему влезет, QtView будет всё равно, главная чтобы ссылка не поменялась, а если содержимое HTML будет меняться, ему разве есть разница, если он переходит по ссылке?
Если вы только в строку поиска человека собрались отправлять, то это одно, если же вы собрались взаимодействовать с каким-нибудь сервисом, то это другое, т.е. если вы хотите отправить пользователя чисто найти картинку по запросу, то тут и движок загружать не придётся, а просто более замороченный запрос сделать и учесть подводные камни, WebView же по сути будет работать как браузер и тут с одной стороны - да, вам не придётся возится с формированием запросов, но всё же сами переходы например вам нужно будет ограничить, фильтровать содержимое, типы ссылок и пр., в противном случае пользователь может будет перейти на какой-нибудь youtube и не знать как с него обратной уйти, потом не забывайте, что содержимое WebView довольно плотное, поэтому может так оказаться, что при перетягивании может перетягиваться не ссылка на изображение, а лишь ссылка на изображение в каких-нибудь Яндекс.Картинках, на кэшированную версию изображения и на много чего ещё. С запросом(или обёрткой js движка) проще вы сразу предоставляете пользователю только то, что необходимо и не больше, попутно выполняя необходимую постобработку.
В любом случаи, я так понимаю, встроенный браузер самый стабильный и простой вариант? На счёт ограничения прав на переход по ссылкам, маловероятно, что он куда-то перейдёт и если уж перейдёт, маловероятно, что он не поймёт, что нужно перезапустить окно. По поводу картинок, да, проблема, нужно будет исследовать какой сайт для этого подходит больше других. - Парсинг - Требует обхода защиты и в зависим от HTML кода (притом он не такой простой). - API - Для того, чтобы его использовали много пользователей, нужно либо покупать подписку, либо заставлять пользователей при запуске получать ключ. При этом также зависит от лицензирования. Сегодня всё работает бесплатно, а завтра они решили поменять условия лицензирования. - Открывать браузер по умолчанию - В целом, можно. Но в этом есть свои минусы. Если открывать через linux, то вместо маленького компактного окна сбоку, он будет раскрывать браузер на весь экран с кучей лишних ссылок и отвлекающих от процесса факторов, а потом ещё и придётся манипулировать окнами, чтобы перетаскивать картинки. В некоторых браузеров насколько я знаю, есть возможность с консоли открывать маленькое окошко, но кроме подключения поддержки кучи браузеров, это может работать не всегда. В Windows аналогично, но через терминал насколько я знаю, вообще нельзя управлять никакими браузерами. Других способов я не знаю. В итоге, максимально хороший вариант в данных реалиях, это подключить встроенный браузер и найти подходящий сайт или поисковик, чтобы открывать эту ссылку при нажатии на кнопку "поиск"
Обсуждают сегодня