こんにちは、TAKAです。今日も懲りずにAI老師と奮闘しながら「MyTubeNavi」の開発を進めています。今回の課題は、検索結果ページから動画詳細ページへのリンクが正しく動作しない問題の解決です。
TAKA:
「老師、検索結果の動画リンクをクリックしても、詳細ページに飛ばないんですけど……これ、また僕の設定ミスですか?」
AI老師:
「またはデータベースのデータ不足だな。まずは問題を一緒に追跡してみよう!」
問題の現象
検索ページで「料理」や「cooking」といったキーワードを入力すると、検索結果が表示される。しかし、リンクをクリックすると、なぜかトップページに戻ってしまう。なにかがおかしい。
AI老師:
「TAKA、まずはログを使って問題の原因を絞り込むぞ。」
TAKA:
「ログ? どこに追加するんですか?」
AI老師:
「video_detailのルートに動画IDが見つからない場合のログを追加しよう。」
デバッグログの追加
app.pyの該当箇所を修正し、デバッグログを仕込むことにしました。
@app.route(‘/video/’, methods=[‘GET’, ‘POST’])
@login_required
def video_detail(video_id):
video = videos.find_one({‘video_id’: video_id})
if not video:
print(f”Video with ID {video_id} not found.”)
return redirect(url_for(‘index’))
…
このコードにより、指定された動画IDがデータベースに存在しない場合、コンソールに「Video with ID … not found.」というメッセージが表示されるようになります。
原因の特定
TAKA:
「老師、ログを仕込んで再度動かしたら、エラーが大量に出ました! ほとんどの動画IDが見つからないって……」
AI老師:
「ふむ、これは検索結果で返されるYouTube APIのデータと、データベースに保存されているデータが一致していないのが原因だな。」
データベースに保存されている動画IDは以下の通り:
[{“video_id”: “aP50PKo4hOI”, “title”: “お料理大好き 1”},
{“video_id”: “dummy_video”, “title”: “英語教育 1”},
…
]
しかし、検索結果で返される動画IDは「PPLV2P8vRB0」「68m0HJKQBbs」など、データベースに存在しないものばかり。
解決策
原因が分かったので、解決策を実施しました。
データベースに動画を追加 検索結果で得られる動画IDを確認し、不足しているデータをデータベースに手動で追加。
video_data = {
‘video_id’: ‘PPLV2P8vRB0’,
‘title’: ‘新しい料理動画’,
‘description’: ‘料理を紹介する動画です。’,
‘statistics’: {
‘viewCount’: ‘1500’,
‘likeCount’: ‘200’
},
‘comments’: [],
‘ratings’: []
}
videos.insert_one(video_data)
検索結果のリンク確認 テンプレートsearch_results.htmlでリンクが正しく生成されているか確認。
修正後の結果
修正後、再度アプリを実行して以下を確認しました。
検索結果に表示される動画のリンクをクリックすると、対応する詳細ページが正しく表示される。
存在しない動画IDでアクセスするとトップページにリダイレクトされる。
TAKA:
「老師、動きました! 今度はちゃんとリンク先に行けます!」
AI老師:
「よくやったぞTAKA。データベースとAPIの連携をしっかり整えたのが成果だな。」
TAKA:
「次は検索結果にもっと多くの情報を載せたいです。」
AI老師:
「良い心掛けだ。だが、まずは動作確認を怠るなよ。」
今回のまとめ
問題点: 検索結果から詳細ページへのリンクが機能しない。
原因: YouTube APIの動画データとデータベースの動画データが一致していなかった。
解決策: デバッグログの活用、データベースへのデータ追加、リンク生成の確認を実施。
結果: 詳細ページへのリンクが正常に動作するようになった。
MyTubeNaviの成長はまだまだ続きます。次回は、検索結果により詳細な情報を表示する機能に挑戦予定です。お楽しみに!