第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 DuckDuckGo 的搜索自動完成建議

如何使用 DuckDuckGo 的搜索自動完成建議

小怪獸愛吃肉 2023-03-24 14:12:49
我正在將我的個人搜索建議從 google 轉(zhuǎn)移到 duckduckgo,但我缺少一些簡單的方法來讓它發(fā)揮作用。我正在使用jQuery-UI 的自動完成框架。我的搜索表單<form action="https://duckduckgo.com/?q=" method="post" id="search">    <input type="text" name="query" value="" autocomplete="off">    <button type="submit">Search</button></form>我的查詢$( "#search input[type=text]" ).autocomplete({    delay: 0,    minLength: 1,    position: { my: "left top-3" },    source: function( request, response )    {     // var suggestURL = "https://www.google.com/complete/search?client=firefox&q=%QUERY";        var suggestURL = "https://duckduckgo.com/ac/?q=%QUERY&type=list";        suggestURL = suggestURL.replace( "%QUERY", request.term );        $.ajax({            method: "GET",            dataType: "jsonp",            jsonpCallback: "jsonCallback",            url: suggestURL,            success: function( data )            {                response( data[1] );            },            error: function( jqXHR, textStatus, errorThrown )            {                console.log( textStatus, errorThrown );            }    }});對 google 的查詢返回:https://suggestqueries.google.com/complete/search?client=firefox&q=foobar&callback=jsonCallback&_=1600956954436jsonCallback && jsonCallback(["foobar",["foobar","foobar meaning","foobar google","foobar challenge","foobar2000 skins","foobar2k","foobar2000 themes","foobar2000 download","foobar2000 mac","foobar themes"],[],{"google:suggestsubtypes":[[433],[],[],[],[],[],[],[],[],[]]}])對 duckduckgo 的查詢返回:https://ac.duckduckgo.com/ac/?q=foobar&type=list&callback=jsonCallback&_=1600956892202["foobar",["foobar2000","foobar","foobar2000 download","foobar ape","foobar2000 layout","foobar2000 decoder","foobar2000 tak","foobar2000 dsp"]]兩者之間的區(qū)別似乎jsonCallback && jsonCallback([data])包含在谷歌查詢中,我不明白為什么它們不同或如何解決。編輯 1向 js 添加一些錯誤處理后,我得到的錯誤是:parsererror Error: jsonCallback was not called編輯 2在深入研究之后,我認為 DDG 的服務(wù)器不允許這樣做。據(jù)我了解,他們的服務(wù)器需要發(fā)送適當?shù)捻憫?yīng),但我認為他們沒有這樣做。
查看完整描述

2 回答

?
慕森王

TA貢獻1777條經(jīng)驗 獲得超3個贊

請參閱: https: //duckduckgo.com/api

要自己使用它,您可以使用下面列出的語言庫之一,或者簡單地將“&format=json”(或 xml,如果您愿意)添加到 api 子域中的任何查詢 URL,例如

https://api.duckduckgo.com/?q=DuckDuckGo&format=json

以下是使用要求:

  • 在您使用我們的 API 的每個地方為我們和任何潛在來源注明出處。對于來源,您可以鏈接到來源的相關(guān)詳細信息頁面。對于我們,您可以使用我們的徽標說出來自 DuckDuckGo 的結(jié)果(并鏈接到特定結(jié)果頁面)。

  • 非商業(yè)用途,除非您獲得我們的電子郵件批準(盡管我們通??梢越邮苋魏尾淮致缘膬?nèi)容)。

  • 使用描述性 t 參數(shù),即將 &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 繞過它,但即使請求失敗或無法解析,這也只是繼續(xù)執(zhí)行 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"

  }

);

雖然這行得通,但對我們幫助不大,因為我們無法獲取其中包含的數(shù)據(jù)。

示例: https: //jsfiddle.net/Twisty/rqdtv9sn/89/

瀏覽器顯示響應(yīng),但隨后您收到解析錯誤。


查看完整回答
反對 回復(fù) 2023-03-24
?
MMTTMM

TA貢獻1869條經(jīng)驗 獲得超4個贊

這適用于任何想要使用jQueryUI 的自動完成框架在其服務(wù)器上設(shè)置 DuckDuckGo 的搜索自動完成建議的人。

默認情況下,您不允許使用 JavaScript 跨域抓取/獲取數(shù)據(jù),因此我不得不在我的服務(wù)器上創(chuàng)建一個代理文件來繞過這些限制。

在這種情況下,我的掛斷是如果您在請求中傳遞某些變量,谷歌的搜索自動完成建議服務(wù)器明確允許這些 CORS 違規(guī)。

這是讓 DuckDuckGo 的搜索自動完成建議在我的網(wǎng)頁上運行的代碼:

索引.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;


查看完整回答
反對 回復(fù) 2023-03-24
  • 2 回答
  • 0 關(guān)注
  • 442 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號