Skip to content

Instantly share code, notes, and snippets.

@petrbela
Created February 3, 2014 22:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save petrbela/8793592 to your computer and use it in GitHub Desktop.
Save petrbela/8793592 to your computer and use it in GitHub Desktop.
Remove broken assets from Chute album.
#!/usr/bin/env ruby
require 'FileUtils'
require 'net/http'
require 'open-uri'
require 'parallel'
require 'rest_client'
require 'json'
print "Chute ID: "
chute_id = gets.chomp
print "Auth Token: "
auth_token = gets.chomp
per_page = 50
page = 0
url = "https://api.getchute.com/v2/albums/#{chute_id}/assets?per_page=#{per_page}&oauth_token=#{auth_token}"
assets = []
broken_assets = []
begin
page = page + 1
response = URI.parse(url).read
puts "Checking assets... page #{page}"
assets = JSON.parse(response)['data']
Parallel.map(assets, :in_threads => 8) do |asset|
begin
open(asset['url']).read
rescue StandardError => e
puts "Broken asset: #{asset['id']} -> #{asset['url']} -> #{e}"
broken_assets << asset['id']
end
end
url = JSON.parse(response)['pagination']['next_page']
end while assets.size == per_page and url
if broken_assets.size == 0
puts "No broken assets found."
exit
end
puts "#{(broken_assets.size)} broken assets in total."
begin
puts "What would you like to do?"
puts " 'd': delete all broken assets"
puts " 'p': print broken asset ids"
puts " 'x': exit the script"
print "Your choice [d/p/x]: "
cont = gets.chomp
puts broken_assets.join(',') if cont.downcase == 'p'
exit if cont.downcase == 'x'
end while cont.downcase != 'd'
puts "Deleting assets, please wait..."
RestClient.post "https://api.getchute.com/v2/albums/#{chute_id}/remove_assets?oauth_token=#{auth_token}", { asset_ids: broken_assets }.to_json, content_type: :json
puts "Assets were successfully removed."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment