我正在尝试查看是否可以在主要DuckDuckGo网站的上下文之外使用DuckDuckHack Instant Answers中的代码。毕竟,Instant Answer大多是一个独立的组件,由一些HTML,CSS和Javascript组成,应该相对独立且可重用。
由于DuckDuckHack项目处于维护模式,因此获取信息似乎有点困难:Developer Guide上提到的Slack和Forum已被禁用。我试图找出其他人是否试图使“即时答案”在其他情况下起作用,但我什么也找不到。有一些有关编写即时答案的教程,例如使用Perl和DuckPAN工具编写的this。我尝试使用这些工具来获取现有的即时答案,但无法正常工作(不确定是否仍在维护它们)。
由于这些工具似乎有点重量级,我认为有可能完全绕过它们并尝试直接使用Instant Answer中的HTML,CSS和JS。
我已经给Calculator提供了第一枪。我在duckduckgo/zeroclickinfo-goodies存储库的目录share/goodie/calculator中标识了相关的源代码。 HTML似乎在content.handlebars
中,然后是calculator.css
和calculator.js
。我创建了一个plain HTML file,将content.handlebars
中的HTML放入其中,并包括对CSS文件和JS文件的引用。起初,CSS不起作用,因为CSS规则在不添加更多包装div的情况下不适用,在使用可见的即时答案查看DuckDuckGo网站时可以轻松找到更多包装div。添加这些包装div后,计算器UI appears more or less intact。但是,UI的按钮根本无法使用。
查看Javascript控制台,我收到此错误:
Uncaught ReferenceError: DDH is not defined
at calculator.js:1
显然,calculator.js需要一个对象
DDH
,但是我不知道该对象应该是什么以及如何创建它。有人知道这个
DDH
变量通常是如何初始化的,或更笼统地说如何使它起作用吗?任何对在自己的站点上重用DuckDuckHack的代码的项目的引用也将受到高度赞赏。 最佳答案
我认为关于DDH
对象如何组合的细节可能不会通过DDG的开源部分公开。
我还做了一些尝试来重新利用一些内置的DDG IA功能(例如,通过编程方式访问通过API无法获得的许多有用的即时答案)。
在此过程中,我克隆了goodie repo并戳了戳。模式似乎是,对于大多数商品,要显示的有效载荷为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 docs中引用了此过程(请参阅其中的标题为“设置Goodie显示选项”的部分)。但是,在文档中没有任何地方记录了
content
的DDH.<goodie>
属性是如何组合在一起的。我克隆了docs repo并对DDH
进行了grep处理,结果没有发现任何结果。但是,goodie repo的
.js
文件夹中的share/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
文件根本不包含该字符串。编辑
但是另一方面,我看到您确实设法使calculator与
.js
file进行了一些修改(例如,通过插入缺少的DDH
命名空间)。关于javascript - 使DuckDuckHack Instant Answer在自己的网站上工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56865420/