hello-world
webエンジニアのメモ。とりあえずやってみる。

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

参考


Related #Rails

[rails]ELB使用時にヘルスチェック用のアクションを作成する

ELBにrailsアプリをぶら下げる場合、railsアプリが落ちたらELBから外れてもらいたいです。

[rails]carrierwaveで保存した画像のurlを取得する

carrierwave 0.10.0 で確認 imageカラムにcarrierwaveで保存した画像を保存している場合、デフォルトのままだとだとurlメソッドを実行してもpublic以下のパスのみで http://~ が設定されていません。