├── icons ├── res │ ├── ap.org.png │ ├── cbc.ca.jpg │ ├── qq.com.jpg │ ├── vk.com.png │ ├── 500px.com.png │ ├── baidu.com.jpg │ ├── bild.de.jpg │ ├── dpa.com.png │ ├── faz.net.jpg │ ├── gmail.com.png │ ├── npr.org.png │ ├── slate.com.png │ ├── time.com.png │ ├── tnw.com.png │ ├── vice.com.jpg │ ├── vox.com.png │ ├── weibo.com.jpg │ ├── yahoo.com.png │ ├── zeit.de.png │ ├── airbnb.com.png │ ├── cbsnews.com.jpg │ ├── ctvnews.ca.jpg │ ├── fcbayern.de.png │ ├── github.com.png │ ├── google.com.jpg │ ├── medium.com.png │ ├── nbcnews.com.jpg │ ├── nytimes.com.png │ ├── paypal.com.jpg │ ├── reddit.com.png │ ├── spiegel.de.png │ ├── taobao.com.jpg │ ├── thestar.com.jpg │ ├── tumblr.com.jpg │ ├── youtube.com.png │ ├── bloomberg.com.png │ ├── buzzfeed.com.png │ ├── facebook.com.png │ ├── instagram.com.png │ ├── mashable.com.jpg │ ├── messenger.com.png │ ├── pinterest.com.jpg │ ├── scholica.com.png │ ├── techcrunch.com.jpg │ ├── theverge.com.jpg │ ├── upworthy.com.png │ ├── usatoday.com.gif │ ├── wikipedia.org.jpg │ ├── arstechnica.com.png │ ├── fcbayern.de-512.png │ ├── motherjones.com.jpg │ ├── nationalpost.com.jpg │ ├── newrepublic.com.jpg │ ├── producthunt.com.png │ ├── sueddeutsche.de.png │ ├── telegraph.co.uk.png │ ├── theatlantic.com.png │ ├── theguardian.com.png │ ├── theintercept.com.png │ ├── businessinsider.com.jpg │ ├── gaming.youtube.com.png │ ├── huffingtonpost.com.jpg │ ├── stackoverflow.com.png │ ├── thedailybeast.com.png │ ├── washingtonpost.com.png │ ├── telegram.org.svg │ ├── microsoft.com.svg │ ├── apple.com-180.svg │ ├── spotify.com.svg │ ├── twitter.com.svg │ ├── kickstarter.com.svg │ ├── ebay.com.svg │ ├── tnw.com.svg │ └── snapchat.com.svg ├── index.js ├── urls.json └── icons.json ├── config.js ├── server.js ├── package.json ├── example ├── style.css └── index.html ├── update_db.js ├── api └── index.js └── README.md /icons/res/ap.org.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/ap.org.png -------------------------------------------------------------------------------- /icons/res/cbc.ca.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/cbc.ca.jpg -------------------------------------------------------------------------------- /icons/res/qq.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/qq.com.jpg -------------------------------------------------------------------------------- /icons/res/vk.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/vk.com.png -------------------------------------------------------------------------------- /icons/res/500px.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/500px.com.png -------------------------------------------------------------------------------- /icons/res/baidu.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/baidu.com.jpg -------------------------------------------------------------------------------- /icons/res/bild.de.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/bild.de.jpg -------------------------------------------------------------------------------- /icons/res/dpa.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/dpa.com.png -------------------------------------------------------------------------------- /icons/res/faz.net.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/faz.net.jpg -------------------------------------------------------------------------------- /icons/res/gmail.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/gmail.com.png -------------------------------------------------------------------------------- /icons/res/npr.org.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/npr.org.png -------------------------------------------------------------------------------- /icons/res/slate.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/slate.com.png -------------------------------------------------------------------------------- /icons/res/time.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/time.com.png -------------------------------------------------------------------------------- /icons/res/tnw.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/tnw.com.png -------------------------------------------------------------------------------- /icons/res/vice.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/vice.com.jpg -------------------------------------------------------------------------------- /icons/res/vox.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/vox.com.png -------------------------------------------------------------------------------- /icons/res/weibo.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/weibo.com.jpg -------------------------------------------------------------------------------- /icons/res/yahoo.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/yahoo.com.png -------------------------------------------------------------------------------- /icons/res/zeit.de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/zeit.de.png -------------------------------------------------------------------------------- /icons/res/airbnb.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/airbnb.com.png -------------------------------------------------------------------------------- /icons/res/cbsnews.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/cbsnews.com.jpg -------------------------------------------------------------------------------- /icons/res/ctvnews.ca.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/ctvnews.ca.jpg -------------------------------------------------------------------------------- /icons/res/fcbayern.de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/fcbayern.de.png -------------------------------------------------------------------------------- /icons/res/github.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/github.com.png -------------------------------------------------------------------------------- /icons/res/google.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/google.com.jpg -------------------------------------------------------------------------------- /icons/res/medium.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/medium.com.png -------------------------------------------------------------------------------- /icons/res/nbcnews.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/nbcnews.com.jpg -------------------------------------------------------------------------------- /icons/res/nytimes.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/nytimes.com.png -------------------------------------------------------------------------------- /icons/res/paypal.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/paypal.com.jpg -------------------------------------------------------------------------------- /icons/res/reddit.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/reddit.com.png -------------------------------------------------------------------------------- /icons/res/spiegel.de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/spiegel.de.png -------------------------------------------------------------------------------- /icons/res/taobao.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/taobao.com.jpg -------------------------------------------------------------------------------- /icons/res/thestar.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/thestar.com.jpg -------------------------------------------------------------------------------- /icons/res/tumblr.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/tumblr.com.jpg -------------------------------------------------------------------------------- /icons/res/youtube.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/youtube.com.png -------------------------------------------------------------------------------- /icons/res/bloomberg.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/bloomberg.com.png -------------------------------------------------------------------------------- /icons/res/buzzfeed.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/buzzfeed.com.png -------------------------------------------------------------------------------- /icons/res/facebook.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/facebook.com.png -------------------------------------------------------------------------------- /icons/res/instagram.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/instagram.com.png -------------------------------------------------------------------------------- /icons/res/mashable.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/mashable.com.jpg -------------------------------------------------------------------------------- /icons/res/messenger.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/messenger.com.png -------------------------------------------------------------------------------- /icons/res/pinterest.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/pinterest.com.jpg -------------------------------------------------------------------------------- /icons/res/scholica.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/scholica.com.png -------------------------------------------------------------------------------- /icons/res/techcrunch.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/techcrunch.com.jpg -------------------------------------------------------------------------------- /icons/res/theverge.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/theverge.com.jpg -------------------------------------------------------------------------------- /icons/res/upworthy.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/upworthy.com.png -------------------------------------------------------------------------------- /icons/res/usatoday.com.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/usatoday.com.gif -------------------------------------------------------------------------------- /icons/res/wikipedia.org.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/wikipedia.org.jpg -------------------------------------------------------------------------------- /icons/res/arstechnica.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/arstechnica.com.png -------------------------------------------------------------------------------- /icons/res/fcbayern.de-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/fcbayern.de-512.png -------------------------------------------------------------------------------- /icons/res/motherjones.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/motherjones.com.jpg -------------------------------------------------------------------------------- /icons/res/nationalpost.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/nationalpost.com.jpg -------------------------------------------------------------------------------- /icons/res/newrepublic.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/newrepublic.com.jpg -------------------------------------------------------------------------------- /icons/res/producthunt.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/producthunt.com.png -------------------------------------------------------------------------------- /icons/res/sueddeutsche.de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/sueddeutsche.de.png -------------------------------------------------------------------------------- /icons/res/telegraph.co.uk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/telegraph.co.uk.png -------------------------------------------------------------------------------- /icons/res/theatlantic.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/theatlantic.com.png -------------------------------------------------------------------------------- /icons/res/theguardian.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/theguardian.com.png -------------------------------------------------------------------------------- /icons/res/theintercept.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/theintercept.com.png -------------------------------------------------------------------------------- /icons/res/businessinsider.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/businessinsider.com.jpg -------------------------------------------------------------------------------- /icons/res/gaming.youtube.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/gaming.youtube.com.png -------------------------------------------------------------------------------- /icons/res/huffingtonpost.com.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/huffingtonpost.com.jpg -------------------------------------------------------------------------------- /icons/res/stackoverflow.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/stackoverflow.com.png -------------------------------------------------------------------------------- /icons/res/thedailybeast.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/thedailybeast.com.png -------------------------------------------------------------------------------- /icons/res/washingtonpost.com.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/psolbach/iconbin/HEAD/icons/res/washingtonpost.com.png -------------------------------------------------------------------------------- /config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | fallback_icon: "/static/img/fallback_icon.png", 3 | cdn_baseurl: "https://cdn.rawgit.com/psolbach/iconbin/master/", 4 | iconbin_api: "https://iconbin.com/api/" 5 | } -------------------------------------------------------------------------------- /icons/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 'use strict'; 3 | 4 | var debug = require('debug')('http') 5 | , reload = require('require-reload')(require) 6 | , icons = reload('./icons.json') 7 | , urls = reload('./urls.json'); 8 | 9 | 10 | // Refresh 11 | setInterval(function() { 12 | debug('[+] Delete, refresh of icon metadata fired.'); 13 | icons = reload('./icons.json'); // Reload metadata 14 | urls = reload('./urls.json'); // Reload paths 15 | }, 2*60*1000) 16 | 17 | module.exports = function() { 18 | return { 19 | icons: icons, 20 | urls: urls 21 | } 22 | } -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 'use strict'; 3 | 4 | /* 5 | Example webserver using the iconbin api module. 6 | */ 7 | 8 | var express = require('express') 9 | var api = require('./api') 10 | var app = express(); 11 | 12 | app.get([ 13 | "/api/:_url", // Returns JSON object with icon meta 14 | "/api/:_url/src" // Returns redirect to image source 15 | ], api) 16 | 17 | // Start Serving 18 | var server = app.listen(3007, function() { 19 | var host = server.address().address, 20 | port = server.address().port; 21 | 22 | console.log('listening at http://%s:%s', host, port) 23 | }) 24 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "iconbin", 3 | "version": "1.0.3", 4 | "description": "the dead-simple favicon API driving iconbin.com", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "minify:js": "echo '=> minify:js' && uglifyjs public/static/js/app.js -o public/static/js/app.js" 9 | }, 10 | "author": "Paul Solbach ", 11 | "license": "ISC", 12 | "dependencies": { 13 | "debug": "^2.2.0", 14 | "dirty": "^1.0.0", 15 | "memoizee": "^0.3.9", 16 | "request": "^2.69.0", 17 | "require-reload": "^0.2.2", 18 | "valid-url": "^1.0.9" 19 | }, 20 | "devDependencies": { 21 | "body-parser": "^1.15.0", 22 | "express": "^4.13.4", 23 | "filewalker": "^0.1.2", 24 | "github-webhook-middleware": "0.0.2", 25 | "image-size": "^0.5.0", 26 | "mime": "^1.3.4", 27 | "nunjucks": "^2.4.1" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /icons/res/telegram.org.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /example/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | font: 19px/24px "Helvetica Neue", Helvetica, Arial, sans-serif; 3 | background-color: #fafafa; 4 | -webkit-font-smoothing: antialiased; 5 | -moz-osx-font-smoothing: grayscale; 6 | color: #333; 7 | max-width: 720px; 8 | margin: 0px auto; 9 | } 10 | 11 | h2 { 12 | font-size: 1.3em; 13 | line-height: 1.1em; 14 | margin-bottom: .8em; 15 | margin-top: .1em; 16 | max-width: 390px; 17 | } 18 | 19 | .container { 20 | margin: 60px 15px; 21 | } 22 | 23 | .item { 24 | display: flex; 25 | flex-wrap: nowrap; 26 | justify-content: center; 27 | align-items: flex-start; 28 | margin-bottom: 30px; 29 | } 30 | 31 | .item__icon { 32 | width: 80px; 33 | height: 80px; 34 | display: block; 35 | border-radius: 50%; 36 | position: relative; 37 | margin: 5px 30px 0px 5px; 38 | } 39 | 40 | .content__author { 41 | font-size: .85em; 42 | font-style: italic; 43 | font-family: "Georgia", Times New Roman, serif; 44 | font-style: italic; 45 | color: #d34b4b; 46 | } 47 | 48 | .content__source { 49 | font-size: .8em; 50 | color: #888; 51 | } -------------------------------------------------------------------------------- /icons/res/microsoft.com.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Artboard 1 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /icons/res/apple.com-180.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /update_db.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 'use strict'; 3 | 4 | /* 5 | This checks every icon file in icons/res against 6 | the metadata and prints out all necessary JSON 7 | if new icons are found. 8 | */ 9 | 10 | var mime = require('mime') 11 | , sizeOf = require('image-size') 12 | , filewalker = require('filewalker') 13 | , icons = require('./icons/icons.json') 14 | , urls = require('./icons/urls.json'); 15 | 16 | var parseIconFile = function(p) { 17 | var fp = 'icons/res/' + p; 18 | var fname = p.split("."); 19 | var meta = {} 20 | 21 | fname.pop(); 22 | fname = fname.join("."); 23 | fname = fname.split("-")[0]; 24 | if (fname in icons) return false; // return early 25 | try { 26 | var d = sizeOf(fp); 27 | } 28 | catch(e) { 29 | console.log(e); 30 | console.log(fp) 31 | } 32 | 33 | return { 34 | "canonical_url": fname, 35 | "content_type": mime.lookup(fp), 36 | "path": fp, 37 | "w": d.width, 38 | "h": d.height 39 | } 40 | } 41 | 42 | var newMetadata = {} 43 | 44 | filewalker('./icons/res') 45 | .on('file', function(p, s) { 46 | // console.log('file: %s, %d bytes', p, s.size); 47 | var metadata = parseIconFile(p); 48 | if (metadata) newMetadata[metadata.canonical_url] = metadata; 49 | }) 50 | .on('done', function() { 51 | console.log('done parsing %d icon files.', this.files); 52 | console.log(JSON.stringify(newMetadata, null, 2)) 53 | }) 54 | .walk(); -------------------------------------------------------------------------------- /icons/res/spotify.com.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Spotify_Icon_RGB_Green 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /icons/res/twitter.com.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /api/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 'use strict'; 3 | 4 | /* 5 | Handles all API calls 6 | in either /api/ or /api//src form. 7 | */ 8 | 9 | var util = require('util') 10 | var validUrl = require('valid-url') 11 | var debug = require('debug')('http') 12 | var memoize = require('memoizee') 13 | var config = require('../config.js') 14 | var icons = require('../icons') 15 | 16 | 17 | // Icon lookup 18 | function getIconMeta(path) { 19 | var icondata = icons(); 20 | 21 | // Prepend CDN Url 22 | for (var key in icondata.icons) { 23 | var icon = icondata.icons[key]; 24 | if (!icon.hasOwnProperty("src")) { 25 | icon.src = config.iconbin_api + icon.canonical_url + "/src"; 26 | icon.cdn = config.cdn_baseurl + icon.path; 27 | } 28 | } 29 | 30 | debug("in-memory cache MISS.") 31 | if (!icondata.urls.hasOwnProperty(path)) return false 32 | else return icondata.icons[icondata.urls[path]]; 33 | } 34 | 35 | // Icon getter w/ in-memory cache 36 | var cachedIconMeta = memoize(getIconMeta, { 37 | maxAge: 2*60*1000, preFetch: true 38 | }); 39 | 40 | 41 | module.exports = function(req, res) { 42 | var path = req.params._url.toLowerCase(); 43 | var isRedirect = req.path.split("/")[3] == "src"; 44 | 45 | // Add CORS headers 46 | res.header("Access-Control-Allow-Origin", "*"); 47 | res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 48 | 49 | // Validate requests URL 50 | if (!validUrl.isUri("http://" + path) && !validUrl.isUri(path)) { 51 | res.status(404).jsonp({err: "Not a valid URL."}); 52 | } 53 | 54 | // Sanitize URL 55 | var protosubmatch = /^((https?|ftp):\/\/)?(www\.)?/; 56 | path = path.replace(protosubmatch, ''); 57 | 58 | // Get cached icon results 59 | var iconMeta = cachedIconMeta(path); 60 | 61 | if (isRedirect) { 62 | return iconMeta 63 | ? res.redirect(iconMeta.cdn) // icon in db! 64 | : res.redirect(config.fallback_icon) // fallback! 65 | } 66 | 67 | // Valid Call 68 | if (iconMeta) { 69 | return res.jsonp({ 70 | w: iconMeta.w, 71 | h: iconMeta.h, 72 | content_type: iconMeta.content_type, 73 | canonical_url: iconMeta.canonical_url, 74 | src: iconMeta.src 75 | }) 76 | } 77 | 78 | // Err 79 | var msg = { 80 | err: util.format("We couldn\'t find an icon for %s. " 81 | + "But you can add it at github.com/psolbach/iconbin!", path) 82 | }; 83 | 84 | res.status(404).jsonp(msg); 85 | } -------------------------------------------------------------------------------- /icons/res/kickstarter.com.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | kickstarter-logo-k-color 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /icons/res/ebay.com.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Artboard 1 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | iconbin.com - Example Page 5 | 6 | 7 | 8 | 9 |
10 |
11 |
12 | 13 |
14 |
15 |
Bloomberg Business
16 |

Pound Drops Most in Four Months as 'Leave' Leads New Brexit Poll

17 | by 18 |

The pound tumbled the most in almost four months after the latest poll showed the campaign for Britain to leave the European Union took a 10 percentage-point lead less than two weeks before the referendum.

19 |
20 |
21 |
22 |
23 | 24 |
25 |
26 |
The Atlantic
27 |

What's next for Gawker?

28 | by 29 |

Gawker Media, reeling from the $140 million awarded to former pro-wrestler Hulk Hogan in an invasion-of-privacy suit, has filed for Chapter 11 bankruptcy, and said it’s being sold to Ziff Davis, the media company that owns PC Magazine and other publications.

30 |
31 |
32 |
33 |
34 | 35 |
36 |
37 |
New York Times
38 |

The War of the Future? Picture Big Armies and Many Fronts

39 | by 40 |

After 15 years of fighting terrorists, American troops are training for hybrid wars: large conventional battles combined with insurgencies and cyberthreats.

41 |
42 |
43 |
44 |
45 | 46 |
47 |
48 |
Buzzfeed
49 |

Here's An Unexpected Way To Protect Yourself From Getting Hacked

50 | by 51 |

Did you know that someone only needs your name and the last four digits of your Social Security number to hack your phone number?

52 |
53 |
54 |
55 |
56 | 57 |
58 |
59 |
Washington Post
60 |

Trump's "Pocahontas" attack leaves GOP squirming again

61 | by 62 |

The real estate developer has repeatedly invoked the 17th-century Native American figure to refer to Sen. Elizabeth Warren, alarming some Republican lawmakers just as the furor over his barbs about a Latino judge was starting to subside.

63 |
64 |
65 |
66 | 67 | -------------------------------------------------------------------------------- /icons/res/tnw.com.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Artboard 1 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # iconbin 3 | 4 | - [x] Google larger site-icons for the gazillion-th time 5 | - [x] Build a favicon API instead because the standard is outdated 6 | - [x] Open the API to anyone as a favicon drop-in and design resource 7 | 8 | 9 | This is the repository for [iconbin.com](http://iconbin.com), mapping domain names to beautiful favicons of all variety – accessible as image URLs or via API, driven by the community and made available through a CDN. Iconbin functions as a "shim" or "polyfill" because the favicon standard won't change over night. The goal is to drive adoption of the HTML5 [favicon specification](https://www.w3.org/TR/html5/links.html#rel-icon). This very much hinges on contributions, so please go ahead. Read more about it [here](https://psolbach.com/write/icons-by-api-iconbin-image-assets-brands-logos-5). 10 | 11 | ## How it works 12 | Example: https://iconbin.com/api/google.com 13 | 14 | 15 | Unlike the few favicon services out there, iconbin does not scrape the `favicon.ico`. Instead it relies entirely on manual labor to provide nice, large and up-to-date icons via this repository. Borne out of frustration with looking up large site-icons to display news sources, this can be used in functional prototypes or any other templating situation. Throw a domain name at the API and it will yield. This is possible because arbitrary redirects are resolved to display `` as well as `` sources in most browsers. For delivery, icons are cached infinitely through [MaxCDN](https://www.maxcdn.com/). The caveat being that you might not receive updated icons if you use the CDN directly. Instead, you point your sources to `iconbin.com/api/foo.com/src`, which will redirect to the latest version. 16 | 17 | ## Contributing 18 | To add an icon, please follow these steps: 19 | 20 | 1. Place the image file in `/res` and add its metadata to `icons.json`. 21 | 2. Icons should be square, measure at least 300 pixels, use a reasonable filetype 22 | 3. Have a filename in the format `foo.com.png` or `xyz.foo.com.jpg`, where foo should be the canonical domain name. 23 | 4. Then you reference this canonical icon name in `urls.json` and map any additional short domains or commonly used CNAME domains to the canonical one, e.g. nyt.com maps to nytimes.com. We disregard www as its just a subdomain. 24 | 5. Before doing the PR you should remember to [sync your fork](https://help.github.com/articles/syncing-a-fork/) with any changes made upstream. To avoid any collisions, PRs will be processed in the order of their filing. 25 | 26 | ## FAQ 27 | **Q**: This will not scale! It's a bottleneck! 28 | **A**: You're right. Favicons need to live at their domains. But if this ever hits technical limits then the case for better favicons is made! At the moment, until we see bottlenecking, icon data is hosted on Github through [RawGit](https://rawgit.com/), the url mapping is cached through a Node express app in-memory. Github file quotas should allow for the next 5k icons or so. 29 | 30 | **Q**: Why mix different filetypes? 31 | **A**: As much as we all love SVG and would like for it to be the default, most icons out there are bitmaps. And to be fair, the different file types have their strengths. JPG may be more suited to detailed works while PNG has an alpha channel. A future scenario might be dynamic file types – e.g. WebP over JPEG based on the clients Accept-Content headers. 32 | 33 | ## License 34 | All icon resources in this repository are the property of their respective copyright holders. This is a (1) not-for-profit community driven offering with the sole aim of providing developers with a fast, easy way of displaying brand information in the best way possible and thus having a (2) positive effect on the recognition and potential market of these brands. In summary, this application of copyrighted material should be generally covered by Fair Use or comparable licence doctrines. Iconbin is not intended to be used in commercial environments. Should you find your corporate identity in any way misrepresented, please get in touch ASAP at a@iconbin.com or better still, do a Pull Request with the correct icon data and send us a corresponding license note to be displayed in context of this repository and iconbin.com. The metadata itself is licensed under MIT License (MIT). 35 | 36 | [[1]](https://ucomm.wsu.edu/fair-use/#toc-purpose-and-character-of-the-use) 37 | [[2]](https://ucomm.wsu.edu/fair-use/#toc-commercial-effect) 38 | 39 | ## Contact 40 | [@___paul](https://twitter.com/___paul) 41 | -------------------------------------------------------------------------------- /icons/urls.json: -------------------------------------------------------------------------------- 1 | { 2 | "apple.com": "apple.com", 3 | "ap.org": "ap.org", 4 | "bild.de": "bild.de", 5 | "bloom.bg": "bloomberg.com", 6 | "bloomberg.com": "bloomberg.com", 7 | "bloomberg": "bloomberg.com", 8 | "bloombergbusiness.com": "bloomberg.com", 9 | "bloomberg.com/asia": "bloomberg.com", 10 | "bloomberg.com/europe": "bloomberg.com", 11 | "businessinsider.com": "businessinsider.com", 12 | "read.bi": "businessinsider.com", 13 | "nyt.com": "nytimes.com", 14 | "nytimes.com": "nytimes.com", 15 | "newyorktimes.com": "nytimes.com", 16 | "newyorktimes": "nytimes.com", 17 | "nbcnews.com": "nbcnews.com", 18 | "nbcnews.to": "nbcnews.com", 19 | "theverge.com": "theverge.com", 20 | "theguardian.com": "theguardian.com", 21 | "guardian.co.uk": "theguardian.com", 22 | "theguardian.co.uk": "theguardian.com", 23 | "time.com": "time.com", 24 | "ti.me": "time.com", 25 | "gu.com": "theguardian.com", 26 | "google": "google.com", 27 | "google.com": "google.com", 28 | "google.ru": "google.com", 29 | "google.fr": "google.com", 30 | "google.es": "google.com", 31 | "google.it": "google.com", 32 | "google.co.uk": "google.com", 33 | "google.de": "google.com", 34 | "goo.gl": "google.com", 35 | "washingtonpost.com": "washingtonpost.com", 36 | "washingtonpost": "washingtonpost.com", 37 | "thewashingtonpost.com": "washingtonpost.com", 38 | "wpo.st": "washingtonpost.com", 39 | "yahoo.com": "yahoo.com", 40 | "buzzfeed.com": "buzzfeed.com", 41 | "bzfd.it": "buzzfeed.com", 42 | "huffingtonpost.com": "huffingtonpost.com", 43 | "huffingtonpost": "huffingtonpost.com", 44 | "newrepublic.com": "newrepublic.com", 45 | "zeit.de": "zeit.de", 46 | "reddit.com": "reddit.com", 47 | "reddit": "reddit.com", 48 | "redd.it": "reddit.com", 49 | "sueddeutsche.de": "sueddeutsche.de", 50 | "sueddeutsche": "sueddeutsche.de", 51 | "sz.de": "sueddeutsche.de", 52 | "spiegel.de": "spiegel.de", 53 | "spon.de": "spiegel.de", 54 | "arstechnica.com": "arstechnica.com", 55 | "arstechnica": "arstechnica.com", 56 | "techcrunch.com": "techcrunch.com", 57 | "arst.ch": "arstechnica.com", 58 | "mashable.com": "mashable.com", 59 | "on.mash.to": "mashable.com", 60 | "twitter.com": "twitter.com", 61 | "twitter": "twitter.com", 62 | "t.co": "twitter.com", 63 | "theatlantic.com": "theatlantic.com", 64 | "vice.com": "vice.com", 65 | "motherjones.com": "motherjones.com", 66 | "npr.org": "npr.org", 67 | "npr.com": "npr.org", 68 | "upworthy.com": "upworthy.com", 69 | "upwr.me": "upworthy.com", 70 | "u.pw": "upworthy.com", 71 | "vox.com": "vox.com", 72 | "usatoday.com": "usatoday.com", 73 | "usatoday": "usatoday.com", 74 | "faz.net": "faz.net", 75 | "faz.de": "faz.net", 76 | "faz.com": "faz.net", 77 | "cbsnews.com": "cbsnews.com", 78 | "thedailybeast.com": "thedailybeast.com", 79 | "thedailybeast": "thedailybeast.com", 80 | "fcbayern.de": "fcbayern.de", 81 | "fcb.de": "fcbayern.de", 82 | "telegraph.co.uk": "telegraph.co.uk", 83 | "dpa.com": "dpa.com", 84 | "dpa.de": "dpa.com", 85 | "theintercept.com": "theintercept.com", 86 | "theintercept": "theintercept.com", 87 | "youtube.com": "youtube.com", 88 | "youtube": "youtube.com", 89 | "facebook.com": "facebook.com", 90 | "facebook": "facebook.com", 91 | "gaming.youtube.com": "gaming.youtube.com", 92 | "messenger.com": "messenger.com", 93 | "instagram.com": "instagram.com", 94 | "instagram": "instagram.com", 95 | "vk.com": "vk.com", 96 | "cbc.ca": "cbc.ca", 97 | "nationalpost.com": "nationalpost.com", 98 | "nationalpost.ca": "nationalpost.com", 99 | "thestar.com": "thestar.com", 100 | "ctvnews.ca": "ctvnews.ca", 101 | "qq.com": "qq.com", 102 | "baidu.com": "baidu.com", 103 | "wikipedia.org": "wikipedia.org", 104 | "wikipedia": "wikipedia.org", 105 | "taobao.com": "taobao.com", 106 | "weibo.com": "weibo.com", 107 | "pinterest.com": "pinterest.com", 108 | "pinimg.com": "pinterest.com", 109 | "paypal.com": "paypal.com", 110 | "paypal": "paypal.com", 111 | "tumblr.com": "tumblr.com", 112 | "tumblr": "tumblr.com", 113 | "scholica.com": "scholica.com", 114 | "stackoverflow.com": "stackoverflow.com", 115 | "stackoverflow": "stackoverflow.com", 116 | "500px.com": "500px.com", 117 | "500px": "500px.com", 118 | "airbnb.com": "airbnb.com", 119 | "airbnb.de": "airbnb.com", 120 | "airbnb.co.uk": "airbnb.com", 121 | "airbnb.fr": "airbnb.com", 122 | "airbnb.es": "airbnb.com", 123 | "airbnb.it": "airbnb.com", 124 | "airbnb": "airbnb.com", 125 | "ebay.com": "ebay.com", 126 | "ebay.de": "ebay.com", 127 | "ebay.co.uk": "ebay.com", 128 | "ebay.fr": "ebay.com", 129 | "ebay.es": "ebay.com", 130 | "ebay.it": "ebay.com", 131 | "github.com": "github.com", 132 | "github": "github.com", 133 | "gmail": "gmail.com", 134 | "gmail.google.com": "gmail.com", 135 | "kickstarter.com": "kickstarter.com", 136 | "kck.st": "kickstarter.com", 137 | "kickstarter": "kickstarter.com", 138 | "medium.com": "medium.com", 139 | "microsoft.com": "microsoft.com", 140 | "microsoft": "microsoft.com", 141 | "producthunt.com": "producthunt.com", 142 | "producthunt": "producthunt.com", 143 | "snapchat.com": "snapchat.com", 144 | "snapchat": "snapchat.com", 145 | "spotify.com": "spotify.com", 146 | "spotify": "spotify.com", 147 | "telegram.org": "telegram.org", 148 | "telegram.me": "telegram.org", 149 | "telegram": "telegram.org", 150 | "tnw.com": "tnw.com", 151 | "thenextweb.com": "tnw.com", 152 | "thenextweb": "tnw.com" 153 | } 154 | -------------------------------------------------------------------------------- /icons/res/snapchat.com.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | snap-ghost-yellow 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /icons/icons.json: -------------------------------------------------------------------------------- 1 | { 2 | "nytimes.com": { 3 | "canonical_url": "nytimes.com", 4 | "content_type": "image/png", 5 | "path": "icons/res/nytimes.com.png", 6 | "w": 291, 7 | "h": 291 8 | }, 9 | 10 | "theverge.com": { 11 | "canonical_url": "theverge.com", 12 | "content_type": "image/jpeg", 13 | "path": "icons/res/theverge.com.jpg", 14 | "w": 512, 15 | "h": 512 16 | }, 17 | 18 | "theguardian.com": { 19 | "canonical_url": "theguardian.com", 20 | "content_type": "image/png", 21 | "path": "icons/res/theguardian.com.png", 22 | "w": 512, 23 | "h": 512 24 | }, 25 | 26 | "bloomberg.com": { 27 | "canonical_url": "bloomberg.com", 28 | "content_type": "image/png", 29 | "path": "icons/res/bloomberg.com.png", 30 | "w": 512, 31 | "h": 512 32 | }, 33 | 34 | "washingtonpost.com": { 35 | "canonical_url": "washingtonpost.com", 36 | "content_type": "image/png", 37 | "path": "icons/res/washingtonpost.com.png", 38 | "w": 300, 39 | "h": 300 40 | }, 41 | 42 | "reddit.com": { 43 | "canonical_url": "reddit.com", 44 | "content_type": "image/png", 45 | "path": "icons/res/reddit.com.png", 46 | "w": 512, 47 | "h": 512 48 | }, 49 | 50 | "zeit.de": { 51 | "canonical_url": "zeit.de", 52 | "content_type": "image/png", 53 | "path": "icons/res/zeit.de.png", 54 | "w": 175, 55 | "h": 175 56 | }, 57 | 58 | "usatoday.com": { 59 | "canonical_url": "usatoday.com", 60 | "content_type": "image/gif", 61 | "path": "icons/res/usatoday.com.gif", 62 | "w": 574, 63 | "h": 325 64 | }, 65 | 66 | "slate.com": { 67 | "canonical_url": "slate.com", 68 | "content_type": "image/png", 69 | "path": "icons/res/slate.com.png", 70 | "w": 200, 71 | "h": 200 72 | }, 73 | 74 | "buzzfeed.com": { 75 | "canonical_url": "buzzfeed.com", 76 | "content_type": "image/png", 77 | "path": "icons/res/buzzfeed.com.png", 78 | "w": 461, 79 | "h": 461 80 | }, 81 | 82 | "arstechnica.com": { 83 | "canonical_url": "arstechnica.com", 84 | "content_type": "image/png", 85 | "path": "icons/res/arstechnica.com.png", 86 | "w": 500, 87 | "h": 500 88 | }, 89 | 90 | "mashable.com": { 91 | "canonical_url": "mashable.com", 92 | "content_type": "image/jpeg", 93 | "path": "icons/res/mashable.com.jpg", 94 | "w": 500, 95 | "h": 500 96 | }, 97 | 98 | "techcrunch.com": { 99 | "canonical_url": "techcrunch.com", 100 | "content_type": "image/jpeg", 101 | "path": "icons/res/techcrunch.com.jpg", 102 | "w": 400, 103 | "h": 400 104 | }, 105 | 106 | "theatlantic.com": { 107 | "canonical_url": "theatlantic.com", 108 | "content_type": "image/png", 109 | "path": "icons/res/theatlantic.com.png", 110 | "w": 600, 111 | "h": 600 112 | }, 113 | 114 | "upworthy.com": { 115 | "canonical_url": "upworthy.com", 116 | "content_type": "image/png", 117 | "path": "icons/res/upworthy.com.png", 118 | "w": 484, 119 | "h": 484 120 | }, 121 | 122 | "vice.com": { 123 | "canonical_url": "vice.com", 124 | "content_type": "image/jpeg", 125 | "path": "icons/res/vice.com.jpg", 126 | "w": 500, 127 | "h": 500 128 | }, 129 | 130 | "vox.com": { 131 | "canonical_url": "vox.com", 132 | "content_type": "image/png", 133 | "path": "icons/res/vox.com.png", 134 | "w": 1000, 135 | "h": 1000 136 | }, 137 | 138 | "faz.net": { 139 | "canonical_url": "faz.net", 140 | "content_type": "image/jpeg", 141 | "path": "icons/res/faz.net.jpg", 142 | "w": 1024, 143 | "h": 1024 144 | }, 145 | 146 | "spiegel.de": { 147 | "canonical_url": "spiegel.de", 148 | "content_type": "image/png", 149 | "path": "icons/res/spiegel.de.png", 150 | "w": 300, 151 | "h": 300 152 | }, 153 | 154 | "sueddeutsche.de": { 155 | "canonical_url": "sueddeutsche.de", 156 | "content_type": "image/png", 157 | "path": "icons/res/sueddeutsche.de.png", 158 | "w": 1024, 159 | "h": 1024 160 | }, 161 | 162 | "motherjones.com": { 163 | "canonical_url": "motherjones.com", 164 | "content_type": "image/jpeg", 165 | "path": "icons/res/motherjones.com.jpg", 166 | "w": 476, 167 | "h": 476 168 | }, 169 | 170 | "businessinsider.com": { 171 | "canonical_url": "businessinsider.com", 172 | "content_type": "image/jpeg", 173 | "path": "icons/res/businessinsider.com.jpg", 174 | "w": 400, 175 | "h": 400 176 | }, 177 | 178 | "npr.org": { 179 | "canonical_url": "npr.org", 180 | "content_type": "image/png", 181 | "path": "icons/res/npr.org.png", 182 | "w": 512, 183 | "h": 512 184 | }, 185 | 186 | "cbsnews.com": { 187 | "canonical_url": "cbsnews.com", 188 | "content_type": "image/jpeg", 189 | "path": "icons/res/cbsnews.com.jpg", 190 | "w": 270, 191 | "h": 270 192 | }, 193 | 194 | "nbcnews.com": { 195 | "canonical_url": "nbcnews.com", 196 | "content_type": "image/jpeg", 197 | "path": "icons/res/nbcnews.com.jpg", 198 | "w": 500, 199 | "h": 500 200 | }, 201 | 202 | "time.com": { 203 | "canonical_url": "time.com", 204 | "content_type": "image/png", 205 | "path": "icons/res/time.com.png", 206 | "w": 500, 207 | "h": 500 208 | }, 209 | 210 | "thedailybeast.com": { 211 | "canonical_url": "thedailybeast.com", 212 | "content_type": "image/png", 213 | "path": "icons/res/thedailybeast.com.png", 214 | "w": 1024, 215 | "h": 1024 216 | }, 217 | 218 | "fcbayern.de": { 219 | "canonical_url": "fcbayern.de", 220 | "content_type": "image/png", 221 | "path": "icons/res/fcbayern.de-512.png", 222 | "w": 512, 223 | "h": 512 224 | }, 225 | 226 | "telegraph.co.uk": { 227 | "canonical_url": "telegraph.co.uk", 228 | "content_type": "image/png", 229 | "path": "icons/res/telegraph.co.uk.png", 230 | "w": 300, 231 | "h": 300 232 | }, 233 | 234 | "dpa.com": { 235 | "canonical_url": "dpa.com", 236 | "content_type": "image/png", 237 | "path": "icons/res/dpa.com.png", 238 | "w": 1024, 239 | "h": 1024 240 | }, 241 | 242 | "theintercept.com": { 243 | "canonical_url": "theintercept.com", 244 | "content_type": "image/png", 245 | "path": "icons/res/theintercept.com.png", 246 | "w": 400, 247 | "h": 400 248 | }, 249 | 250 | "ap.org": { 251 | "canonical_url": "ap.org", 252 | "content_type": "image/png", 253 | "path": "icons/res/ap.org.png", 254 | "w": 512, 255 | "h": 512 256 | }, 257 | 258 | "bild.de": { 259 | "canonical_url": "bild.de", 260 | "content_type": "image/jpeg", 261 | "path": "icons/res/bild.de.jpg", 262 | "w": 421, 263 | "h": 472 264 | }, 265 | 266 | "google.com": { 267 | "canonical_url": "google.com", 268 | "content_type": "image/jpeg", 269 | "path": "icons/res/google.com.jpg", 270 | "w": 512, 271 | "h": 512 272 | }, 273 | 274 | "twitter.com": { 275 | "canonical_url": "twitter.com", 276 | "content_type": "image/svg+xml", 277 | "path": "icons/res/twitter.com.svg", 278 | "w": 180, 279 | "h": 150 280 | }, 281 | 282 | "youtube.com": { 283 | "canonical_url": "youtube.com", 284 | "content_type": "image/png", 285 | "path": "icons/res/youtube.com.png", 286 | "w": 500, 287 | "h": 500 288 | }, 289 | 290 | "facebook.com": { 291 | "canonical_url": "facebook.com", 292 | "content_type": "image/png", 293 | "path": "icons/res/facebook.com.png", 294 | "w": 500, 295 | "h": 500 296 | }, 297 | 298 | "messenger.com": { 299 | "canonical_url": "messenger.com", 300 | "content_type": "image/png", 301 | "path": "icons/res/messenger.com.png", 302 | "w": 500, 303 | "h": 500 304 | }, 305 | 306 | "instagram.com": { 307 | "canonical_url": "instagram.com", 308 | "content_type": "image/png", 309 | "path": "icons/res/instagram.com.png", 310 | "w": 500, 311 | "h": 500 312 | }, 313 | 314 | "gaming.youtube.com": { 315 | "canonical_url": "gaming.youtube.com", 316 | "content_type": "image/png", 317 | "path": "icons/res/gaming.youtube.com.png", 318 | "w": 500, 319 | "h": 500 320 | }, 321 | 322 | "vk.com": { 323 | "canonical_url": "vk.com", 324 | "content_type": "image/png", 325 | "path": "icons/res/vk.com.png", 326 | "w": 512, 327 | "h": 512 328 | }, 329 | 330 | "cbc.ca": { 331 | "canonical_url": "cbc.ca", 332 | "content_type": "image/jpeg", 333 | "path": "icons/res/cbc.ca.jpg", 334 | "w": 512, 335 | "h": 512 336 | }, 337 | 338 | "nationalpost.com": { 339 | "canonical_url": "nationalpost.com", 340 | "content_type": "image/jpeg", 341 | "path": "icons/res/nationalpost.com.jpg", 342 | "w": 512, 343 | "h": 512 344 | }, 345 | 346 | "thestar.com": { 347 | "canonical_url": "thestar.com", 348 | "content_type": "image/jpeg", 349 | "path": "icons/res/thestar.com.jpg", 350 | "w": 512, 351 | "h": 512 352 | }, 353 | 354 | "ctvnews.ca": { 355 | "canonical_url": "ctvnews.ca", 356 | "content_type": "image/jpeg", 357 | "path": "icons/res/ctvnews.ca.jpg", 358 | "w": 512, 359 | "h": 512 360 | }, 361 | 362 | "qq.com": { 363 | "canonical_url": "qq.com", 364 | "content_type": "image/jpeg", 365 | "path": "icons/res/qq.com.jpg", 366 | "w": 512, 367 | "h": 512 368 | }, 369 | 370 | "baidu.com": { 371 | "canonical_url": "baidu.com", 372 | "content_type": "image/jpeg", 373 | "path": "icons/res/baidu.com.jpg", 374 | "w": 512, 375 | "h": 512 376 | }, 377 | 378 | "wikipedia.org": { 379 | "canonical_url": "wikipedia.org", 380 | "content_type": "image/jpeg", 381 | "path": "icons/res/wikipedia.org.jpg", 382 | "w": 512, 383 | "h": 512 384 | }, 385 | 386 | "taobao.com": { 387 | "canonical_url": "taobao.com", 388 | "content_type": "image/jpeg", 389 | "path": "icons/res/taobao.com.jpg", 390 | "w": 512, 391 | "h": 512 392 | }, 393 | 394 | "weibo.com": { 395 | "canonical_url": "weibo.com", 396 | "content_type": "image/jpeg", 397 | "path": "icons/res/weibo.com.jpg", 398 | "w": 512, 399 | "h": 512 400 | }, 401 | 402 | "pinterest.com": { 403 | "canonical_url": "pinterest.com", 404 | "content_type": "image/jpeg", 405 | "path": "icons/res/pinterest.com.jpg", 406 | "w": 512, 407 | "h": 512 408 | }, 409 | 410 | "paypal.com": { 411 | "canonical_url": "paypal.com", 412 | "content_type": "image/jpeg", 413 | "path": "icons/res/paypal.com.jpg", 414 | "w": 512, 415 | "h": 512 416 | }, 417 | 418 | "tumblr.com": { 419 | "canonical_url": "tumblr.com", 420 | "content_type": "image/jpeg", 421 | "path": "icons/res/tumblr.com.jpg", 422 | "w": 512, 423 | "h": 512 424 | }, 425 | 426 | "scholica.com": { 427 | "canonical_url": "scholica.com", 428 | "content_type": "image/png", 429 | "path": "icons/res/scholica.com.png", 430 | "w": 626, 431 | "h": 512 432 | }, 433 | 434 | "stackoverflow.com": { 435 | "canonical_url": "stackoverflow.com", 436 | "content_type": "image/png", 437 | "path": "icons/res/stackoverflow.com.png", 438 | "w": 158, 439 | "h": 158 440 | }, 441 | 442 | "apple.com": { 443 | "canonical_url": "apple.com", 444 | "content_type": "image/svg+xml", 445 | "path": "icons/res/apple.com-180.svg", 446 | "w": 180, 447 | "h": 180 448 | }, 449 | 450 | "huffingtonpost.com": { 451 | "canonical_url": "huffingtonpost.com", 452 | "content_type": "image/jpeg", 453 | "path": "icons/res/huffingtonpost.com.jpg", 454 | "w": 500, 455 | "h": 500 456 | }, 457 | 458 | "newrepublic.com": { 459 | "canonical_url": "newrepublic.com", 460 | "content_type": "image/jpeg", 461 | "path": "icons/res/newrepublic.com.jpg", 462 | "w": 447, 463 | "h": 447 464 | }, 465 | 466 | "yahoo.com": { 467 | "canonical_url": "yahoo.com", 468 | "content_type": "image/png", 469 | "path": "icons/res/yahoo.com.png", 470 | "w": 861, 471 | "h": 200 472 | }, 473 | 474 | "500px.com": { 475 | "canonical_url": "500px.com", 476 | "content_type": "image/png", 477 | "path": "icons/res/500px.com.png", 478 | "w": 512, 479 | "h": 512 480 | }, 481 | 482 | "airbnb.com": { 483 | "canonical_url": "airbnb.com", 484 | "content_type": "image/png", 485 | "path": "icons/res/airbnb.com.png", 486 | "w": 512, 487 | "h": 512 488 | }, 489 | 490 | "ebay.com": { 491 | "canonical_url": "ebay.com", 492 | "content_type": "image/svg+xml", 493 | "path": "icons/res/ebay.com.svg", 494 | "w": 374, 495 | "h": 374 496 | }, 497 | "github.com": { 498 | "canonical_url": "github.com", 499 | "content_type": "image/png", 500 | "path": "icons/res/github.com.png", 501 | "w": 560, 502 | "h": 560 503 | }, 504 | 505 | "gmail.com": { 506 | "canonical_url": "gmail.com", 507 | "content_type": "image/png", 508 | "path": "icons/res/gmail.com.png", 509 | "w": 128, 510 | "h": 128 511 | }, 512 | 513 | "kickstarter.com": { 514 | "canonical_url": "kickstarter.com", 515 | "content_type": "image/svg+xml", 516 | "path": "icons/res/kickstarter.com.svg", 517 | "w": 168, 518 | "h": 168 519 | }, 520 | 521 | "medium.com": { 522 | "canonical_url": "medium.com", 523 | "content_type": "image/png", 524 | "path": "icons/res/medium.com.png", 525 | "w": 855, 526 | "h": 855 527 | }, 528 | 529 | "microsoft.com": { 530 | "canonical_url": "microsoft.com", 531 | "content_type": "image/svg+xml", 532 | "path": "icons/res/microsoft.com.svg", 533 | "w": 316, 534 | "h": 316 535 | }, 536 | 537 | "producthunt.com": { 538 | "canonical_url": "producthunt.com", 539 | "content_type": "image/png", 540 | "path": "icons/res/producthunt.com.png", 541 | "w": 512, 542 | "h": 512 543 | }, 544 | 545 | "snapchat.com": { 546 | "canonical_url": "snapchat.com", 547 | "content_type": "image/svg+xml", 548 | "path": "icons/res/snapchat.com.svg", 549 | "w": 432, 550 | "h": 432 551 | }, 552 | 553 | "spotify.com": { 554 | "canonical_url": "spotify.com", 555 | "content_type": "image/svg+xml", 556 | "path": "icons/res/spotify.com.svg", 557 | "w": 168, 558 | "h": 168 559 | }, 560 | 561 | "telegram.org": { 562 | "canonical_url": "telegram.org", 563 | "content_type": "image/svg+xml", 564 | "path": "icons/res/telegram.org.svg", 565 | "w": 240, 566 | "h": 240 567 | }, 568 | 569 | "tnw.com": { 570 | "canonical_url": "tnw.com", 571 | "content_type": "image/png", 572 | "path": "icons/res/tnw.com.png", 573 | "w": 300, 574 | "h": 300 575 | } 576 | } 577 | --------------------------------------------------------------------------------