Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Retrieve a 512 x 512px icon for an iOS app
#!/usr/bin/ruby
# encoding: utf-8
#
# Updated 2017-10-25:
# - Defaults to large size (512)
# - If ImageMagick is installed:
# - rounds the corners (copped from @bradjasper, https://github.com/bradjasper/Download-iTunes-Icon/blob/master/itunesicon.rb)
# - replace original with rounded version, converting to png if necessary
#
# Retrieve an iOS app icon at the highest available resolution
# All arguments are combined to create an iTunes search
# The icon for the first result, if found, is written to a filename
# based on search terms
#
# If ImageMagick is installed (available through Homebrew), rounded
# corners will be added and a transparent PNG will be output.
#
# example:
# $ itunesicon super monsters ate my condo
#
# http://brettterpstra.com/2013/04/28/instantly-grab-a-high-res-icon-for-any-ios-app/
# http://brettterpstra.com/2013/12/18/icon-grabber-updated-to-search-any-platform/
%w[net/http open-uri cgi fileutils].each do |filename|
require filename
end
def find_icon(terms, entity, size)
url = URI.parse("http://itunes.apple.com/search?term=#{CGI.escape(terms)}&entity=#{entity}")
res = Net::HTTP.get_response(url).body
match = res.match(/"#{size}":"(.*?)",/)
unless match.nil?
return match[1]
else
return false
end
end
terms = ARGV.join(" ")
entity = "iPadSoftware"
type = "_ipad"
if terms =~ /[\#@](ipad|iphone|mac)/i
if terms =~ /[\#@]iphone/i
entity = "software"
type = "_iphone"
elsif terms =~ /[\#@]mac/i
entity = "macSoftware"
type = "_mac"
end
terms.gsub!(/[\#@](ipad|iphone|mac)/i, "").gsub!(/\s+/," ")
end
format = "artworkUrl512"
size = "l"
if terms =~ /~(s(mall)?|m(edium)?|l(arge)?)/i
size = $1[0]
format = case size
when /s(mall)?/ then "artworkUrl60"
when /m(edium)?/ then "artworkUrl100"
else "artworkUrl512"
end
terms.gsub!(/~(s(mall)?|m(edium)?|l(arge)?)/i, "").gsub!(/\s+/," ")
end
def magick(filename, size)
begin
i = case size
when /s/ then 60
when /m/ then 100
else 512
end
rect = "#{i.to_s}x#{i.to_s}"
round = (i * 0.15625 + 3).round.to_s
target = filename.sub(/\.\w+$/,'_round.png')
%x{convert -size #{rect} xc:none -fill white -draw 'roundRectangle 0,0 #{i},#{i} #{round},#{round}' #{filename} -compose SrcIn -composite #{target} &> /dev/null}
if File.exists? target
FileUtils.rm(filename)
filename.sub!(/\.\w+$/,'.png')
FileUtils.mv(target,filename)
end
return filename
rescue
return filename
end
end
terms.strip!
icon_url = find_icon(terms, entity, format)
unless icon_url
puts "Error: failed to locate iTunes url. You may need to adjust your search terms."
exit
end
url = URI.parse(icon_url)
target = File.expand_path("~/Desktop/"+terms.gsub(/[^a-z0-9]+/i,'_')+"_"+size+"."+icon_url.match(/\.(jpg|png)$/)[1])
begin
open(url) do |f|
File.open(target,'w+') do |file|
file.puts f.read
end
target = magick(target,size)
print target
end
rescue Exception => e
# puts e.backtrace
# p e
puts "Error: failed to save icon."
end
@vigo

This comment has been minimized.

Show comment
Hide comment
@vigo

vigo Jun 10, 2014

super kool! thank you!

vigo commented Jun 10, 2014

super kool! thank you!

@jroes

This comment has been minimized.

Show comment
Hide comment
@jroes

jroes Sep 11, 2014

Hi! I've forked a slightly rewritten version that pulls 1136x1136 screenshots for a list of terms:

https://gist.github.com/jroes/8cb48afd924bfa1b849d

jroes commented Sep 11, 2014

Hi! I've forked a slightly rewritten version that pulls 1136x1136 screenshots for a list of terms:

https://gist.github.com/jroes/8cb48afd924bfa1b849d

@touchthedesign

This comment has been minimized.

Show comment
Hide comment
@touchthedesign

touchthedesign Sep 19, 2014

Hello, I can't seem to get this working.

After downloading the file, navigating to file directory, making it executable (chmod a+x itunesicon.rb), and attempting to run - 'itunesicon.rb twitter'; I subsequently get this: "-bash: itunesicon.rb: command not found"

Please help!

Hello, I can't seem to get this working.

After downloading the file, navigating to file directory, making it executable (chmod a+x itunesicon.rb), and attempting to run - 'itunesicon.rb twitter'; I subsequently get this: "-bash: itunesicon.rb: command not found"

Please help!

@bradjasper

This comment has been minimized.

Show comment
Hide comment
@bradjasper

bradjasper Sep 21, 2014

I've forked this to round the corners in ImageMagick and generate @2x and @3X assets, which I needed for my use case:

https://github.com/bradjasper/Download-iTunes-Icon

Thanks for the snippet @ttscoff

I've forked this to round the corners in ImageMagick and generate @2x and @3X assets, which I needed for my use case:

https://github.com/bradjasper/Download-iTunes-Icon

Thanks for the snippet @ttscoff

@pkotla

This comment has been minimized.

Show comment
Hide comment
@pkotla

pkotla Jan 15, 2015

@bradjasper Thank you for the tool but i am not getting the rounded icons nor 2x, 3x images. Am i doing anything wrong?

pkotla commented Jan 15, 2015

@bradjasper Thank you for the tool but i am not getting the rounded icons nor 2x, 3x images. Am i doing anything wrong?

@ttscoff

This comment has been minimized.

Show comment
Hide comment
@ttscoff

ttscoff Oct 25, 2017

@bradjasper I added a simple version of your code (just adds rounded corners to whatever size was downloaded, converting to png if needed). If ImageMagick isn't installed, it will just silently fail that call and proceed as normal.

Thanks for that!

Owner

ttscoff commented Oct 25, 2017

@bradjasper I added a simple version of your code (just adds rounded corners to whatever size was downloaded, converting to png if needed). If ImageMagick isn't installed, it will just silently fail that call and proceed as normal.

Thanks for that!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment