こんにちは。
皆さん、物価高や円安が続いて色々と節約する方法をお考えではないでしょうか?
開発コストも、なんとか抑えられないかとお考えではないでしょうか?
今回はそんなときにオススメなDuckDuckGoについて紹介しようと思います。
PythonでWEB検索機能を実装する際、Google Search APIなどの有料APIを使っているかと思います。
DuckDuckGoは完全無料で、APIキーを取得する必要もなく、またセキュリティ面でも優れるAPIです。
どんな感じのコードで、実行結果がどんなものなのかを簡単に確認できるデモアプリもご用意しましたので、そちらを使ってご紹介しようと思います。
DuckDuckGoとは?
DuckDuckGoとは、Google ChromeやMicrosoft Edgeのようなインターネットの検索エンジンのひとつです。
特徴としてあげられるのはプライバシー保護機能です。
ChromeやEdgeでは、ユーザーの検索履歴などの行動情報を追跡されています。
DuckDuckGoではその心配はありません。
また余計な広告も表示されないので、この辺も安心です。
単純に検索機能だけを使いたい(ChromeやEdgeのように拡張機能が豊富なものを使わない)場合、DuckDuckGoは多くの人にとって有効な手段となるかもしれません。
なのでChromeやEdgeの代わりのブラウザとしてもご利用いただけます。
今回はブラウザではなく、アプリに組み込むAPI側の機能としてご紹介します。
DuckDuckGo Search APIをインストールしてみよう
APIもPythonでインストールできます。
お使いの仮想環境に以下のコマンドでインストールします。
pip install duckduckgo-search
デモアプリもご用意しましたので、Docker環境をお持ちの方はこちらですぐ実行できます。
公式のGitを元ネタとして作成しています。こちらもご参考ください。
DuckDuckGo Search APIを使ってみよう
ではインストールもできたところで、さっそく使ってみましょう。
冒頭でも書いた通り、APIの利用料金は完全無料です。
さらにAPIキーも必要ないので、アカウント作成したり、APIキーを取得する手間もありません。
これが実は結構面倒なんですよね。
API使うのが嫌いな人は大体料金がかかるかAPIキーの作成の手間が面倒かだと思うんです。(偏見?)
DuckDuckGoはこの時点でかなり有利な立場ですよね。
そしてコードもめちゃくちゃシンプルで簡単なんです。
なんとこれだけで書けてしまいます。
引数も直感的でとてもいいですよね。
検索キーワードを渡して、地域を指定して、検索結果をいくつ出したいのかを与えてあげればよいです。
実行結果はこのようになっております。
辞書型で情報を抽出できるので、データの形式としてもとても扱いやすいものとなっております。
そしてこのAPIが個人的にいいなと思ったポイントは、メソッドによって検索したいものを絞り込めるところです。
メソッドは8つ提供されております。
text以外にも例えば画像データを検索したい場合はimagesを使います。
こちらもほとんど直感的に書けます。
結果は同様に辞書型です。
またStreamlitだと画像データを表示できるので、こんな使い方もできます。
本記事のサムネイルのできあがり。(笑)
最後にもうひとつ、動画を検索したいときはvideosを使うと良いです。
こちらも結果は辞書型でかえってきます。
Streamlitは動画も埋め込めるので、こんな風に使えます。
YouTube動画だって埋め込めます。
とても書きやすくて使いやすいので、皆さんもぜひ活用してみてください。
まとめ
今回はDuckDuckGoについて紹介してみました。
コストがかからないだけでなく、APIも手間が少なく直感的に書きやすいのが特徴です。
さらに検索結果はデータとして扱いやすく、アプリにとても組み込みやすいものとなっております。
特に昨今はChatGPTをはじめとした生成AIの活用も盛んになっており、インターネットで情報を検索して参照させる、いわゆるRAGシステムを構築するとコスト増が想定されるかと思います。
そんな時に、少しでもコストを抑えて開発を進める上でも、DuckDuckGoを導入してみてはいかがでしょうか?
実際、私がDuckDuckGoを知ったきっかけは、LangChainでRAGシステムを構築していた際に、たまたまDuckDuckGoのラッパー関数を見かけたのがきっかけでした。
インターネットで自動で検索する機能は様々なユースケースが考えられるので、ぜひDuckDuckGoでコストを抑えて快適な開発を進めてみてください。
ここまでご覧いただきありがとうございました。