Заставить DuckDuckHack Instant Answer работать на собственном сайте
Я пытаюсь понять, возможно ли использовать код мгновенных ответов DuckDuckHack вне контекста основного веб-сайта DuckDuckGo. В конце концов, Instant Answer - это в основном автономный компонент, который состоит из некоторого HTML, CSS и Javascript и должен быть относительно автономным и многократно используемым.
Поскольку проект DuckDuckHack находится в режиме обслуживания, кажется, что получить информацию немного сложно: Slack и Forum, упомянутые в Руководстве для разработчиков, были отключены. Я пытался выяснить, пытались ли другие люди заставить Мгновенные ответы работать в других контекстах, но я ничего не мог найти. Существуют учебные пособия по написанию мгновенных ответов, например, с использованием Perl и инструментов DuckPAN. Я пытался заставить существующий Мгновенный ответ работать с использованием этих инструментов, но мне не удалось заставить его работать должным образом (не уверен, что они все еще поддерживаются).
Поскольку эти инструменты кажутся немного тяжелыми, я подумал, что можно было бы полностью обойти их и попытаться просто использовать HTML, CSS и JS из Instant Instant.
Я дал Калькулятор первый выстрел. Я нашел соответствующий исходный код в общей папке каталога / goodie / calculator хранилища https://github.com/duckduckgo/zeroclickinfo-goodies. HTML, кажется, находится в content.handlebars
и есть calculator.css
а также calculator.js
, Я создал простой HTML-файл, поместил HTML из content.handlebars
там и включены ссылки на файл CSS и файл JS. Во-первых, CSS не будет работать, потому что правила CSS не применяются без добавления дополнительных div-пакетов-оберток, которые можно легко найти при проверке сайта DuckDuckGo с видимым калькулятором Instant Answer. После добавления этих элементов оболочки пользовательский интерфейс калькулятора выглядит более или менее невредимым. Однако кнопки пользовательского интерфейса вообще не работают.
Глядя на консоль Javascript, я получаю эту ошибку:
Uncaught ReferenceError: DDH is not defined
at calculator.js:1
Видимо объект DDH
требуется calculator.js, однако я понятия не имею, каким должен быть этот объект и как я могу его создать.
Кто-нибудь знает, как это DDH
переменная обычно инициализируется или вообще как это сделать? Любая ссылка на проекты, использующие код из DuckDuckHack для своих сайтов, также будет высоко оценена.
0 ответов
Я думаю, что детали того, как DDH
собранный объект может быть недоступен через часть DDG с открытым исходным кодом.
Я также предпринял несколько попыток перепрофилировать некоторые встроенные функции DDG IA (например, получить программный доступ ко многим полезным мгновенным ответам, недоступным через их API).
В процессе я клонировал репозиторий вкусностей и покопался. Похоже, что в большинстве случаев полезная нагрузка отображается так:DDH.<goodie>.content
. В моей локальной копииgoodie
репо:
$ grep -rE 'DDH' ./lib/
./lib/DDG/Goodie/Conversions.pm: content => 'DDH.conversions.content'
./lib/DDG/Goodie/Conversions.pm: content => 'DDH.conversions.content'
./lib/DDG/Goodie/Game2048.pm: content => 'DDH.game2048.content'
./lib/DDG/Goodie/PublicDNS.pm: list_content => 'DDH.public_dns.content',
./lib/DDG/Goodie/JsBeautifier.pm: content => 'DDH.js_beautifier.content'
./lib/DDG/Goodie/SassToCss.pm: content => 'DDH.sass_to_css.content'
./lib/DDG/Goodie/Constants.pm: title_content => 'DDH.constants.title_content'
...
На стороне javascript вы найдете соответствующий .js
файлы в share/goodie
каталог, как вы это делали с калькулятором.
В <goodie>.js
файлы, кажется, вводят DDH.<goodie>
пространства имен (обычно прямо в верхней части файла) и определяют DDH.<goodie>.build
функции. На эту процедуру есть ссылки в документации по goodie-display (см. Раздел " Настройка параметров отображения Goodie на передней панели").
Однако нигде в документации не описывается, как content
свойство DDH.<goodie>
собирается вместе. Я клонировал репозиторий документов и искалDDH
, ничего по этому поводу не обнаружив.
Ни один из .js
файлы в share/goodie
папка репозитория Goodie, похоже, дает представление о том, какDDH.<goodie>.content
тоже собирается. Действительно, некоторые из этих.js
файлы даже не содержат строки content
. Для списка всехshare*.js
файлы, которые делают содержать строкуcontent
, Я сделал (в локальной копии goodie
репо):
$ find ./share -name "*.js" |xargs grep -l 'content'
./share/goodie/countdown/countdown.js
./share/goodie/text_converter/text_converter.js
Другой .js
файлы вообще не содержат эту строку..
редактировать
С другой стороны, я вижу, вам удалось запустить калькулятор с некоторыми изменениями в.js
файл (например, вставив отсутствующийDDH
пространство имен).