Заставить 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 пространство имен).

Другие вопросы по тегам