地域の教育移住に関する情報は、移住を検討している私にとって非常に有用です。そこで、Pythonのライブラリ「duckduckgo_search」を活用して、リアルタイムな検索結果を自動的に収集し、DynamoDBに記録する仕組みを実装しました。
このスクリプトは、環境変数管理(dotenv)、DuckDuckGoの検索結果取得、データの整形、そしてDynamoDBへのデータ投入までを一貫して行います。 DuckDuckGoは、プライバシーに配慮した検索エンジンです。以下の点が特徴です: Amazon DynamoDBは、AWSが提供するNoSQLデータベースサービスです。 本記事で実装するスクリプトでは、検索結果をDynamoDBに記録し、後から時系列でデータを確認できるように設計しています。 search_word関数では、以下のポイントに注目しています: 取得した検索結果をループ処理で整形し、DynamoDB用のPut形式に変換しています。 DynamoDBへの登録は、AWS SDK(boto3)を利用しています。 ※ マークダウンで表を書くの慣れてきました。 今回紹介したコードは、特定のキーワードで検索した結果を自動的にDynamoDBへ保存する基本的な仕組みです。
今後の改善点としては、以下が考えられます:
1. はじめに
2. DuckDuckGoとは?
3. DynamoDBとは?
4. 主な機能の解説
4.1 検索結果の取得
def search_word(query: str):
'''
検索ワードを指定して、DDGSで検索結果を取得する
'''
with DDGS() as ddgs:
results = list(ddgs.text(
keywords=query, # 検索ワード
region='jp-jp', # リージョン 日本
safesearch='on', # セーフサーチON
timelimit="w", # 過去1週間の結果
max_results=20 # 取得件数20件
))
return results
4.2 データの整形
put_data = {}
for i, result in enumerate(results):
# 01件目, 02件目, ... という形でデータを格納
put_data[f'{str(i+1).zfill(2)}件目'] = {
"M" : {
"title": { "S": result.get('title', "") },
"body": { "S": result.get('body', "") },
"url": { "S": result.get('url', "") }
}
}
4.3 DynamoDBへのデータ投入
項目
説明
テーブル名
kunio-relocate
パーティションキー
固定値
relocating#2025
ソートキー
実行時のタイムスタンプ(
date_str
)
データマップ
整形済みの検索結果データをそのまま投入
client = boto3.client(
'dynamodb',
region_name='', #リージョンを指定
aws_access_key_id=os.getenv("aws_access_key_id", None),
aws_secret_access_key=os.getenv("aws_secret_access_key", None)
)
# 現在の日時を取得し、ソートキーに設定
now = datetime.now()
date_str = now.strftime('%Y-%m-%d_%H:%M:%S')
response = client.put_item(
TableName='kunio-relocate',
Item={
'id': {
'S': 'relocating#2025'
},
'sortKey': {
'S': date_str
},
'dataMap': {
'M': put_data
}
}
)
5. まとめと今後の展開