duckducksearch について
Pythonの`duckduckgo-search`パッケージを使うウェブ検索スキルです。複数の種類の検索結果が必要なユーザー向けに、地域などの条件指定やCLIからの利用も提供します。
主な機能
- 01テキスト、画像、動画、ニュース検索
- 02地域やクエリのフィルター
- 03検索対象を絞る演算子
- 04プロキシ設定への対応
- 05CLI検索とCSV出力
活用シーン
- 01調査テーマに関するウェブページの検索
- 02地域や色を指定した画像検索
- 03クエリによる最新ニュースや動画の確認
- 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:pdf | PDF、ドキュメントなどを検索します |
| サイト | dogs site:example.com | 特定のサイトを検索します |
| サイトを除外 | cats -site:example.com | サイトを除外します |
| タイトル内 | intitle:dogs | タイトルに含まれる必要があります |
| URL 内 | inurl:cats | URL に含まれる必要があります |
プロキシのサポート
# 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"
}
ベストプラクティス
-
適切にリソースをクリーンアップするため、コンテキストマネージャーを使用します。
with DDGS() as ddgs: results = ddgs.text("query") -
待ち時間が長くならないよう、妥当な
max_resultsを設定します -
地域に合わせた結果を得るため、地域パラメーターを使用します
-
レート制限に対応するため、再試行ロジックを実装します。
import time for attempt in range(3): try: results = DDGS().text("query", max_results=10) break except RatelimitException: time.sleep(2 ** attempt) -
大量の検索では、IP ブロックを回避するためにプロキシを使用します
注意事項
- このライブラリは教育目的でのみ使用できます
- 商用利用を目的としていません
- DuckDuckGo の利用規約を遵守してください
- パッケージ名は
ddgsに変更されました(新しいバージョンにはpip install ddgsを使用してください)
コメント
Markdown 対応