前提・実現したいこと
DuckDuckGoの静的ページからロケーションを日本にした検索結果を取得したいです。(URL: https://duckduckgo.com/html/ )
サーバーとのやり取りに関してはnode初級レベルです(HerokuとExpress.jsでGETとPOSTだけの簡単なAPIを立てられる程度)
発生している問題・エラーメッセージ
検索結果は取得できていますがロケーションが指定されていないため日本語では使い物にならない検索結果となっています。エラーは特に発生していませんが、まともな結果が返ってきません。
**「虫歯 原因」の検索結果(現状)** 巨大虫歯に挑む - YouTube 虫歯治療 - YouTube Eeデンタル【虫歯が原因で大量の膿!】 でも抜かない根管治療専門医 角化嚢胞性歯原性腫瘍 - Wikipedia ...
上記のように中国語が混じっています。
**ロケーションを日本に指定した場合の検索結果** 虫歯ができる7つの原因と自分にあった予防法 虫歯の原因は?虫歯はどうしてできるの? | 水天宮・人形町の ... 虫歯になりやすい習慣・環境とは?原因や検査、セルフ ... 虫歯の原因とは?歯を磨いてるのになぜ虫歯になるの?
該当のソースコード
javascript
1const client = require('cheerio-httpcli'), 2 $ = require('jquery'), 3 targetURL = 'https://duckduckgo.com/html'; 4 5async function duckGo (keyword) { 6 return await client.fetch(targetURL, { q: keyword, kl: 'jp-jp' }) 7 .then(result => { 8 //返ってきたDOMをトリムする処理が入っている 9 ... 10 }); 11 return duckObj; 12 }) 13 .catch((err) => { 14 console.log(err); 15 }) 16} 17exports.duckGo = duckGo
試したこと
1つ目は
client.set('headers', { 'x-duckduckgo-locale': 'ja_JP' });
上記をfetchの直前におきました。
2つ目はコードにあるようにパラメータの設定 q=hoge&kl=jp-jp(URLパラメータのページを参考に:https://duckduckgo.com/params)をfetchに指定してみました。(おそらくduckduckgoは動的ページと静的ページの2つあり、おそらく動的ページの場合でしか使えないパラメータのため日本語が返ってこなかったと思われます)
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
DuckDuckGoのPOST情報です。
**General** Request URL: https://duckduckgo.com/html/ Request Method: POST Status Code: 200 Remote Address: 54.254.135.186:443 Referrer Policy: origin **Response Headers** access-control-allow-origin: https://duckduckgo.com access-control-expose-headers: cache-control: max-age=1 content-encoding: br content-security-policy: default-src https: blob: data: 'unsafe-inline' 'unsafe-eval'; frame-ancestors 'self' content-type: text/html; charset=UTF-8 date: Sun, 24 May 2020 03:52:22 GMT expect-ct: max-age=0 expires: Sun, 24 May 2020 03:52:23 GMT referrer-policy: origin server: nginx server-timing: total;dur=349;desc="Backend Total" status: 200 strict-transport-security: max-age=31536000 vary: Accept-Encoding x-content-type-options: nosniff x-duckduckgo-locale: ja_JP x-frame-options: SAMEORIGIN x-xss-protection: 1;mode=block **Response Headers** :authority: duckduckgo.com :method: POST :path: /html/ :scheme: https accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 accept-encoding: gzip, deflate, br accept-language: ja,en-US;q=0.9,en;q=0.8 cache-control: max-age=0 content-length: 42 content-type: application/x-www-form-urlencoded cookie: kl=jp-jp; ah=jp-jp%2Cth-th; l=jp-jp; kl=ja-ja origin: https://duckduckgo.com referer: https://duckduckgo.com/ sec-fetch-dest: document
5/25追記:
26迄に回答なかった場合、こちらはクローズしてstack overflowに投げてみたいと思います。
あなたの回答
tips
プレビュー