mcpField
D
duckducksearch

duckducksearch

github.com/xsailor511生産性0155 回インストール34 週間前に更新
リポジトリ

duckducksearch について

Pythonの`duckduckgo-search`パッケージを使うウェブ検索スキルです。複数の種類の検索結果が必要なユーザー向けに、地域などの条件指定やCLIからの利用も提供します。

主な機能

  1. 01テキスト、画像、動画、ニュース検索
  2. 02地域やクエリのフィルター
  3. 03検索対象を絞る演算子
  4. 04プロキシ設定への対応
  5. 05CLI検索とCSV出力

活用シーン

  1. 01調査テーマに関するウェブページの検索
  2. 02地域や色を指定した画像検索
  3. 03クエリによる最新ニュースや動画の確認
  4. 04CLIから検索結果をCSVに出力

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/xsailor511/duckduck-web-search --skill duckducksearch

インストール後、Claude Code で/duckducksearchを入力して読み込まれたか確認します。

同梱ファイルREADME.md

詳細

DuckDuckGo 検索スキル

概要

このスキルは、duckduckgo-search Python パッケージを介して DuckDuckGo 検索エンジンを使用するウェブ検索機能を提供します。さまざまなフィルターオプションを使って、テキスト、画像、動画、ニュースを検索できます。

インストール

pip install -U duckduckgo_search

主な機能

テキスト検索
from duckduckgo_search import DDGS

# Basic text search
results = DDGS().text("python programming", max_results=10)

# Advanced text search with filters
results = DDGS().text(
    keywords="python programming",
    region="us-en",           # Region: us-en, uk-en, cn-zh, etc.
    safesearch="moderate",    # on, moderate, off
    timelimit="m",           # d (day), w (week), m (month), y (year)
    backend="auto",          # auto, html, lite, bing
    max_results=10
)
画像検索
from duckduckgo_search import DDGS

results = DDGS().images(
    keywords="butterfly",
    region="wt-wt",
    safesearch="off",
    size=None,               # Small, Medium, Large, Wallpaper
    color="Monochrome",      # Color filters
    type_image=None,         # photo, clipart, gif, transparent, line
    layout=None,             # Square, Tall, Wide
    license_image=None,      # any, Public, Share, ShareCommercially, Modify, ModifyCommercially
    max_results=100
)
動画検索
from duckduckgo_search import DDGS

results = DDGS().videos(
    keywords="cars",
    region="wt-wt",
    safesearch="off",
    timelimit="w",
    resolution="high",       # high, standard
    duration="medium",      # short, medium, long
    license_videos=None,    # creativeCommon, youtube
    max_results=50
)
ニュース検索
from duckduckgo_search import DDGS

results = DDGS().news(
    keywords="technology",
    region="us-en",
    safesearch="moderate",
    timelimit="d",          # d, w, m
    max_results=20
)

利用可能な地域

地域コード説明
wt-wt世界全体(地域指定なし)
us-enアメリカ合衆国
uk-enイギリス
cn-zh中国
jp-jp日本
kr-kr韓国
de-deドイツ
fr-frフランス
in-enインド
au-enオーストラリア
ca-enカナダ
br-ptブラジル
ru-ruロシア

検索演算子

高度な検索クエリには、DuckDuckGo の検索演算子を使用してください。

演算子例説明
完全一致"cats and dogs"完全一致するフレーズを検索します
除外cats -dogs用語を除外します
必須cats +dogs用語を必須にします
ファイル形式cats filetype:pdfPDF、ドキュメントなどを検索します
サイトdogs site:example.com特定のサイトを検索します
サイトを除外cats -site:example.comサイトを除外します
タイトル内intitle:dogsタイトルに含まれる必要があります
URL 内inurl:catsURL に含まれる必要があります

プロキシのサポート

# Using Tor Browser
ddgs = DDGS(proxy="tb", timeout=20)

# Using custom proxy
ddgs = DDGS(proxy="socks5://user:password@host:port", timeout=20)

# Via environment variable
import os
os.environ["DDGS_PROXY"] = "socks5://user:password@host:port"

エラー処理

from duckduckgo_search import DDGS
from duckduckgo_search.exceptions import (
    DuckDuckGoSearchException,
    RatelimitException,
    TimeoutException,
    ConversationLimitException,
)

try:
    results = DDGS().text("query", max_results=10)
except RatelimitException:
    print("Rate limit exceeded. Try using a proxy or waiting.")
except TimeoutException:
    print("Request timed out.")
except DuckDuckGoSearchException as e:
    print(f"Search error: {e}")

CLI の使用方法

# Text search
ddgs text -k "python tutorial"

# Search with region
ddgs text -k "news" -r cn-zh

# Search and save to CSV
ddgs text -k "research filetype:pdf" -m 50 -o results.csv

# Image search
ddgs images -k "landscape" -m 100 -d

# News search
ddgs news -k "technology" -m 50 -t d -o json

結果の形式

テキスト検索結果
{
    "title": "Page Title",
    "href": "https://example.com",
    "body": "Page description..."
}
画像検索結果
{
    "title": "Image Title",
    "image": "https://original-image-url.jpg",
    "thumbnail": "https://thumbnail-url.jpg",
    "url": "https://source-page.com",
    "height": 3860,
    "width": 4044,
    "source": "Bing"
}
動画検索結果
{
    "content": "https://youtube.com/watch?v=...",
    "title": "Video Title",
    "description": "Video description...",
    "duration": "8:22",
    "provider": "YouTube",
    "published": "2024-07-03"
}
ニュース検索結果
{
    "date": "2024-07-03T16:25:22+00:00",
    "title": "News Headline",
    "body": "News article description...",
    "url": "https://news-site.com/article",
    "image": "https://image-url.jpg",
    "source": "News Source Name"
}

ベストプラクティス

  1. 適切にリソースをクリーンアップするため、コンテキストマネージャーを使用します。

    with DDGS() as ddgs:
        results = ddgs.text("query")
    
  2. 待ち時間が長くならないよう、妥当な max_results を設定します

  3. 地域に合わせた結果を得るため、地域パラメーターを使用します

  4. レート制限に対応するため、再試行ロジックを実装します。

    import time
    
    for attempt in range(3):
        try:
            results = DDGS().text("query", max_results=10)
            break
        except RatelimitException:
            time.sleep(2 ** attempt)
    
  5. 大量の検索では、IP ブロックを回避するためにプロキシを使用します

注意事項

  • このライブラリは教育目的でのみ使用できます
  • 商用利用を目的としていません
  • DuckDuckGo の利用規約を遵守してください
  • パッケージ名は ddgs に変更されました(新しいバージョンには pip install ddgs を使用してください)

コメント