critify API: Eine kleine Übung

Peter hat über Google einen Post von Florian gefunden, in dem er die metacritic.com-Wertungen der verschiedenen Konsolen vergleicht – und gleichzeitig (zurecht) beklagt, dass man bei uns nicht nach Wertung sortieren kann, was die ganze Prozedur etwas mühsam machen würde.

Nun stehen bessere Listings bei uns definitiv auf der Todo-Liste. Bis die aber Realität werden gibt es immerhin unsere API, und ich dachte es wäre doch eine nette kleine Übung ein kleines Skript zu schreiben dass darüber Florian’s Auswertung mit dem critify-Datensatz durchführt.

Also schnell den treuen Python-Interpreter geschnappt und während der langweiligeren Momente in The Fortune Cookie ein paar Zeilen hingeklatscht:

from django.utils.simplejson import loads, dumps
from urllib2 import urlopen
from urllib import quote

items_to_check = 2000
check_at_once = 100
apikey = "..."

i = 1;
counts = {}
while (i < = items_to_check):
    # Liste der Items, die wir in diesem Durchgang abfragen
    query = range(i, min(i+check_at_once, items_to_check))
    i += check_at_once

    # API abfragen
    url = "http://critify.de/api/2.0/rest/games/%s?apikey=%s"
    response = urlopen(url % (quote(dumps(query)), dumps(apikey),))
    data = loads(response.read())

    # Einträge mit >75 zählen
    for item in data:
        platform = item.get('platform', False)
        if item.get('score', 0) > 75:
            counts[platform['repr']] = 
                 counts.setdefault(platform['repr'], 0) + 1

# Sortiert ausgeben
counts = [(v, k) for k, v in counts.items()]
counts.sort(reverse=True)
for v, k in counts: print "%20s: %s" % (k,v)

Leider gibt es aktuell keine Möglichkeit eine Liste der verfügbaren Einträge zu bekommen, oder das gar mit einem Filter. Stattdessen überprüfen wir einfach blind die ersten 2000 IDs – und zwar in mehreren Anfragen, von jeweils 100 Stück, um keine Probleme mit URL-Längen oder anderen Limits zu bekommen. Und 2000 deshalb, weil ich zufällig weiß dass noch keine höheren IDs in Verwendung sind 😉

Der Rest ist dann einfach: Alle Ergebnisse einmal durchlaufen, und Spiele mit einer Metawertung über 75 nach Plattformen gesplittet zählen.

So sieht dann das Ergebnis aus:

XBox 360: 66
Playstation 3: 64
Wii: 41
Nintendo DS: 40
Playstation 2: 37
Playstation Portable: 36

Wir sehen also, für welche Plattformen die meisten guten Spiele erschienen sind. Ganz fair ist das natürlich nicht, denn:

  • Manche Konsolen gibt es schon länger als andere, daher sind auch mehr Spiele insgesamt verfügbar (der prozentuale Anteil wäre für einen Vergleich wohl interessanter).
  • Unsere Datenbank geht aktuell nicht weiter zurück als 2007.

Das erklärt auch zum größten Teil, warum die Unterschiede zu Florian’s Daten von metacritic teilweise so deutlich sind. Ohne die Spiele, die 2006 und früher erschienen sind, kann die Xbox z.B. ihren Release-Vorteil nicht ausspielen. Genauso die große Zahl an PSP-Titeln. Das war aber zu erwarten. Lediglich die Wii-Zahl verwundert mich etwas – sie ist bei uns viel höher, obwohl wir in etwa die gleiche Zahl an Wii-Einträgen verzeichnet haben – seltsam.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s