AI任せのWeb開発奮闘記【第87話】

「動画URLの取り扱いでハマった罠」

TAKA: 今日は動画データベースを更新するスクリプトを走らせてみたんだけど、KeyError: ‘url’ ってエラーが出ちゃったよ。どういうこと?

AI老師: うむ、それはデータベースの構造が原因じゃな。スクリプトが url フィールドを期待しているのに、データベースの中にそのフィールドがない可能性が高い。データベースの内容を確認してみよう。

TAKA: え、データベースの中身を直接確認するってどうやるの?

AI老師: 大丈夫じゃ。MongoDBなら、ターミナルやGUIツールを使って確認できるぞ。今日はターミナルで確認する方法を教えよう。
問題解決へのステップ

  1. データベースの確認

AI老師: まずはデータベースの中にあるドキュメントの構造を確認するぞ。以下のようなコマンドを使えば簡単じゃ。

データベースの内容を取得するスクリプト例

from pymongo import MongoClient

client = MongoClient(‘mongodb+srv://your-mongo-uri/’)
db = client[‘my-video-finder’]
videos = db[‘videos’]

動画コレクションをすべて取得

for video in videos.find():
print(video)

TAKA: なるほど、これでデータの中身が見えるんだね。でも、url がなかったらどうすればいいの?

  1. データの整合性を修正

AI老師: url がない場合は、データを修正する必要がある。例えば、ダミーデータや欠損値を埋めるためのロジックを加えるんじゃ。

‘url’ フィールドがない場合の処理を追加

for video in videos.find():
if ‘url’ not in video:
print(f”Missing ‘url’ in: {video[‘_id’]}”)
# 必要ならデータを修正
videos.update_one({‘_id’: video[‘_id’]}, {‘$set’: {‘url’: ‘https://example.com/default-url’}})

TAKA: おお、これなら動きそう!
実際の修正内容

  1. スクリプトの修正

update_videos.py に以下の処理を追加してエラーを防ぐ。

def extract_video_id(url):
if not url:
return None
match = re.search(r’v=([a-zA-Z0-9_-]+)’, url)
if match:
return match.group(1)
return None

for video in videos.find():
if ‘url’ not in video or not video[‘url’]:
print(f”Skipping video with missing URL: {video[‘_id’]}”)
continue
video_id = extract_video_id(video[‘url’])
if video_id:
videos.update_one({‘_id’: video[‘_id’]}, {‘$set’: {‘video_id’: video_id}})

  1. デバッグ

エラーログを確認して再実行。

AI老師: この修正で、url が欠けているデータは無視されるようになったぞ。今後のデータ挿入時にも整合性を確認する癖をつけると良いな。
解決したのか?

解決したこと: KeyError: 'url' の原因を特定し、データの欠損に対応できるよう修正。
未解決の課題: データ入力時のバリデーションを自動化する必要がある。

TAKA: 老師、ありがとう!今日は本当に勉強になったよ。

AI老師: これでひとまず前進じゃな。次回はもっと洗練された方法を学んでいこう!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です