[rails]YouTube動画の削除チェックを行うRakeタスクを作ってみる
YouTubeは様々な理由で動画が削除されてしまうことがあるので、YouTubeを使ったサービスでは、動画の削除チェックが必要になると思います。
そんな時に使えそうな動画削除チェックRakeタスクを作ってみました。
前提
- 動画IDをVideoモデルで管理しているとします
Rakeタスク作成
./bin/rails g task youtube
タスク作成
# lib/tasks/youtube.rake
namespace :youtube do
desc "check Youtube video"
task :deleted_check => :environment do
logger = Logger.new(File.join(Rails.root, "log", "#{Rails.env}_youtube_deleted_info.log"))
Video.all.each do |video|
result = Net::HTTP.get_response(URI.parse("http://gdata.youtube.com/feeds/api/videos/#{video.id}"))
# ステータスコードが200以外の場合は削除
if result.code != "200"
video.is_deleted = true
video.save
logger.info "deleted video_id:#{video.id}"
end
end
end
end
そのままdestroyしてしまうと、YouTubeサーバが落ちた場合にタスクを実行した際に全動画が消えてしまうので論理削除にしてあります。
タスク実行
./bin/rake youtube:deleted_check
これで削除チェックできそうです。
whenever等を使ってcronで定期実行するようにしておけば、自動化できますね。