File: fetch-thumbnails

package info (click to toggle)
games-thumbnails 20100826
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 100,344 kB
  • ctags: 26
  • sloc: python: 56; makefile: 54; perl: 34
file content (96 lines) | stat: -rwxr-xr-x 3,636 bytes parent folder | download
1
2
3
4
5
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/usr/bin/env python

# fetch-thumbnails
# 
# Copyright 2010 Evgeni Golov <evgeni@debian.org>
# 
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
# 
# * Redistributions of source code must retain the above copyright
#   notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
#   copyright notice, this list of conditions and the following disclaimer
#   in the documentation and/or other materials provided with the
#   distribution.
# * Neither the name of the  nor the names of its
#   contributors may be used to endorse or promote products derived from
#   this software without specific prior written permission.
# 
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

from debian import debtags
import json
import urllib2
from PIL import Image
from os import path, mkdir

__BASE_DIR = 'games-thumbnails'
__ORIG_DIR = '%s/orig' % __BASE_DIR
__THUMB_DIR = '%s/thumbs' % __BASE_DIR

__JSON_URL = 'http://screenshots.debian.net/json/screenshots'
__DEBTAGS_FILE = '/var/lib/debtags/debtags-fetch-apt.tag'
__FACET = 'game'

if not path.exists(__BASE_DIR):
    mkdir(__BASE_DIR)
if not path.exists(__ORIG_DIR):
    mkdir(__ORIG_DIR)
if not path.exists(__THUMB_DIR):
    mkdir(__THUMB_DIR)

screenshots_json = json.load(urllib2.urlopen(__JSON_URL))
screenshots_json = screenshots_json['screenshots']
screenshots = {}
for s in screenshots_json:
    screenshots[s['name']] = s['large_image_url']

db = debtags.DB()
db.read(open(__DEBTAGS_FILE, "r"))
games = db.filter_tags(lambda t: t.startswith(__FACET))

work = []

for g in games.iter_packages():
    p = {}
    if 'role::program' in db.tags_of_package(g):
        p['name'] = g
        if p['name'] in screenshots.keys():
            p['screenshot'] = screenshots[p['name']]
        else:
            p['screenshot'] = None
        work.append(p)

for p in work:
    if p['screenshot']:
        orig_file_name = "%s/%s.png" % (__ORIG_DIR, p['name'])
        thumb_file_name = "%s/%s.png" % (__THUMB_DIR, p['name'])
        if not path.exists(orig_file_name):
            print "Fetching screenshot for %(name)s from %(screenshot)s" % p
            f = file(orig_file_name, "wb")
            f.write(urllib2.urlopen(p['screenshot']).read())
            f.close()
        if not path.exists(thumb_file_name):
            print "Creating thumbnail for %(name)s" % p
            img = Image.open(orig_file_name)
            scale = []
            scale.append(img.size[0]/320.0)
            scale.append(img.size[1]/240.0)
            scale = max(scale)
            new_size = (int(round(img.size[0]/scale)), int(round(img.size[1]/scale)))
            i = img.resize(new_size, Image.ANTIALIAS)
            i.save(thumb_file_name)
    else:
        print "WARNING: %(name)s has no screenshot!" % p