2 回答

TA貢獻1777條經驗 獲得超3個贊
請參閱: https: //duckduckgo.com/api
要自己使用它,您可以使用下面列出的語言庫之一,或者簡單地將“&format=json”(或 xml,如果您愿意)添加到 api 子域中的任何查詢 URL,例如
https://api.duckduckgo.com/?q=DuckDuckGo&format=json
以下是使用要求:
在您使用我們的 API 的每個地方為我們和任何潛在來源注明出處。對于來源,您可以鏈接到來源的相關詳細信息頁面。對于我們,您可以使用我們的徽標說出來自 DuckDuckGo 的結果(并鏈接到特定結果頁面)。
非商業用途,除非您獲得我們的電子郵件批準(盡管我們通??梢越邮苋魏尾淮致缘膬热荩?。
使用描述性 t 參數,即將 &t=nameofapp 附加到您的請求中。
我們的總體目標是讓更多人使用 DuckDuckGo,所以請記住這一點。
q: query
format: output format (json or xml)
If format=='json', you can also pass:
callback: function to callback (JSONP format)
這適用于 JSONP:https ://jsfiddle.net/Twisty/rqdtv9sn/86/
這里的問題是,這些不是建議,而且這些建議的 URL https://ac.duckduckgo.com/ac/不想與 CORS 很好地配合。您可以使用 FETCH API 繞過它,但即使請求失敗或無法解析,這也只是繼續執行 Promise。
因此,在 DDG 提供 Suggestion API 之前,您多半是運氣不好。
此處討論了一些潛在的其他選項:https ://www.sitepoint.com/jsonp-examples/
var script = $("<script />", {
src: "https://ac.duckduckgo.com/ac/?q=" + req.term,
type: "application/json"
}
);
雖然這行得通,但對我們幫助不大,因為我們無法獲取其中包含的數據。
示例: https: //jsfiddle.net/Twisty/rqdtv9sn/89/
瀏覽器顯示響應,但隨后您收到解析錯誤。

TA貢獻1869條經驗 獲得超4個贊
這適用于任何想要使用jQueryUI 的自動完成框架在其服務器上設置 DuckDuckGo 的搜索自動完成建議的人。
默認情況下,您不允許使用 JavaScript 跨域抓取/獲取數據,因此我不得不在我的服務器上創建一個代理文件來繞過這些限制。
在這種情況下,我的掛斷是如果您在請求中傳遞某些變量,谷歌的搜索自動完成建議服務器明確允許這些 CORS 違規。
這是讓 DuckDuckGo 的搜索自動完成建議在我的網頁上運行的代碼:
索引.php
<form action="https://duckduckgo.com/?q=" method="post" id="search">
<input type="text" name="query" value="" autocomplete="off">
<button type="submit">Search</button>
</form>
javascript.js
$( "#search input[type=text]" ).autocomplete(
{
delay: 0,
minLength: 1,
position: { my: "left top-3" },
source: function( request, response )
{
var suggestURL = "https://www.example.com/proxy-duckduckgo.php?q=%QUERY";
suggestURL = suggestURL.replace( "%QUERY", request.term );
suggestURL = suggestURL.replace( / /g, "+" )
$.ajax({
method: "GET",
dataType: "json",
url: suggestURL,
success: function( data )
{
response( data[1] );
},
error: function( jqXHR, textStatus, errorThrown )
{
console.log( textStatus, errorThrown );
}
});
}
});
代理-duckduckgo.php
<?php
$query = isset( $_GET['q'] ) ? str_replace( ' ', '+', $_GET['q'] ) : 'example';
$url = 'https://duckduckgo.com/ac/?q='.$query.'&type=list';
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE );
curl_setopt( $ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
$html = curl_exec( $ch );
curl_close( $ch );
echo $html;
添加回答
舉報