[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で定期実行するようにしておけば、自動化できますね。

参考