Der Apfel-Appstore-Reader

Amazon

apple_appstore_reader_screen1Aufgrund der Tatsache das Apple sich bezüglich der App-Rankings (Positionierung im Appstore) sehr gedeckt hält, und auch im Report-Tool (ITC / iTunes-Connect -> Sales & Trends) keinerlei Informationen auftauchen, an welcher Position man sich mit der jeweiligen App in z.B. einer Kategorie wie "Dienstprogramme" befindet, habe ich ein kleines Java-Tool (mit dem einfallsreichen Name Appstore-Reader) geschrieben.

Ziel war es, eine Übersicht zu bekommen, welche Apps an welcher Position im Appstore auftauchen, und das Ganze nicht nur im deutschen Appstore, sondern auch weltweit in den anderen Stores.

Da die Firma mit dem Apfel keine solchen Informationen den Entwicklern bereitstellt, habe ich einen alternativen Weg gesucht, um an die erforderlichen Daten zu kommen, und bin über Apples öffentlich verfügbaren RSS-Generator gestolpert. Dieser liefert XML-Dateien welche z.B. die aktuellen App-Neuerscheinungen wiedergeben. Über Anpassung der entsprechenden Parameter kann man sich also Listen herunterladen, welche die verschiedenen Geräte-Kategorien und Appstore-Genres wiederspiegeln. Eine Auswahl ob Top10, Top100 oder gar Top300 geladen werden soll, ist ebenfalls möglich.

Genau hier setzt der Appstore-Reader an! Das Tool lädt die entsprechenden XML-Dateien von Apple herunter und sucht nach den eigenen Bundle-IDs des Entwicklers.

Code und Erklärungen zum Appstore-Reader

Die Developer-IDs bzw. Prefixes werden in der Variable sDeveloperPrefixes definiert. Wenn man nur einen Entwickler-Account hat, kann man natürlich auch nur nach diesem einen suchen lassen.

private static String[] sDeveloperPrefixes = {"com.entwickler."};

Nun brauchen wir noch die Pfade zu den entsprechenden XML-Dateien von Apple. Für diese legen wir globale Variablen an und fügen Platzhalter für den Store (also das entsprechende Land), das Limit (um z.B. Top100 oder nur Top20 laden zu können), und das Genre (Kategorie im Appstore) ein.

private static String sUrlAppstoreGratis = "https://itunes.apple.com/<STORE>/rss/topfreeapplications/limit=<LIMIT>/genre=<GENRE>/xml";

private static String sUrlAppstoreGratisIPAD = "https://itunes.apple.com/<STORE>/rss/topfreeipadapplications/limit=<LIMIT>/genre=<GENRE>/xml";

private static String sUrlAppstoreTop = "https://itunes.apple.com/<STORE>/rss/toppaidapplications/limit=<LIMIT>/genre=<GENRE>/xml";

private static String sUrlAppstoreUmsatzstark = "https://itunes.apple.com/<STORE>/rss/topgrossingapplications/limit=<LIMIT>/genre=<GENRE>/xml";

private static String sUrlAppstoreUmsatzstarkIPAD = "https://itunes.apple.com/<STORE>/rss/topgrossingipadapplications/limit=<LIMIT>/genre=<GENRE>/xml";

Jetzt benötigen wir noch eine kleine Funktion, welche die Kategorie-Namen und die entsprechenden Genre-IDs zurückgibt. So sind wir flexibel und können definieren, in welchen Kategorien gesucht werden soll.

private static String[][] getAppstoreGenres()
{
        String[][] sRes =  {
                {"Essen und Trinken", "6023"},
                {"Lifestyle", "6012"},
                {"Produktivität", "6007"},
                {"Sport", "6004"},
                {"Dienstprogramme", "6002"},
                {"Gesundheit und Fitness", "6013"},
                {"Spiele", "6014"}
        };
        return sRes;
}

Jetzt noch fix eine Funktion geschrieben, welche die Landes-Kürzel der entsprechenden Stores zurückgibt, welche ausgelesen werden sollen. Ich habe mich hier erstmal für Deutschland, Österreich, Schweiz, USA, Großbritannien und China entschieden.

private static String[] getAppstoresRegions()
{
        String[] sRes = {"de", "ch", "at", "us", "cn", "gb"};  
        return sRes;
}

Nun können wir mit Hilfe einer weiteren Funktion namens checkGenre(...) die entsprechenden Informationen auslesen und ausgeben lassen. Die Parameter sollten selbsterklärend sein. Im Prinzip ist das Alles eine ganz einfache Sache. Die URL zum RSS-Generator wird gebildet und die XML-Datei heruntergeladen und in einem String zwischengespeichert. Dann werden in der For-Schleife die einzelnen Einträge durchlaufen und mitgezählt. Ist der Eintrag eine App des Entwicklers wird dies zusammen mit der Kategorie und der Plazierung ausgegeben.

private static void checkGenre(String sAppstoreURL, String sAppstoreTitle, String[] sGenre, int iTopCount, String sStore)
    {
        String sURL = sAppstoreURL;
        String sData;
        int iCount = 0;
        int iPos = 0;
        
        sURL = sURL.replace("<GENRE>", sGenre[1]);
        sURL = sURL.replace("<LIMIT>", String.valueOf(iTopCount));
        
        sURL = sURL.replace("<STORE>", sStore);
        
        sData = downloader.downloadAsString(sURL);
        
        String[] tmp = sData.split("<entry>");
        
        for (String sEntry : tmp)
        {
            iCount++;
            
            for (String sDeveloperPrefix :sDeveloperPrefixes)
            {
                if (sEntry.indexOf(sDeveloperPrefix)>0)
                {
                    iPos = sEntry.indexOf("<title>");
                    sEntry = sEntry.substring(iPos + 7);
                    iPos = sEntry.indexOf("<");
                    sEntry = sEntry.substring(0, iPos);
                    
                    downloader.echo(sAppstoreTitle + " (" + sStore + "): Platz " + String.valueOf(iCount) + " | " + sEntry + " | Kategorie: " + sGenre[0]);
                }
            }
        }
    }

Da wir natürlich keine Lust haben, jeden Store und jede Kategorie/Genre einzelnt zu prüfen bauen wir hierzu noch eine kleine Hilfsfunktion, welche einfach alle definierten Stores, Länder und Genres durchsucht. Der erste Parameter definiert das Limit (z.B. 100 für die Top100, oder 20 für die Top20). Der zweite Parameter gibt an, welche Stores durchsucht werden sollen, wobei 'false' für 'nur Deutschland' und 'true' für 'Alle' (siehe getAppstoresRegions()) steht.

public static void checkTopApps(int iCount, boolean bAll)
    {
        String[][] genres = getAppstoreGenres();
        
        String[] stores = getAppstoresRegions();
        if (!bAll)
        {
            String[] tmp = {"de"};
            stores = tmp;
        }
        
        for (String[] genre : genres)
        {
            for (String store : stores)
            {
                checkGenre(sUrlAppstoreGratis, "Top-Apps Gratis / iPhone", genre, iCount, store);
                checkGenre(sUrlAppstoreGratisIPAD, "Top-Apps Gratis / iPad", genre, iCount, store);
                checkGenre(sUrlAppstoreTop, "Top-Apps / iPhone", genre, iCount, store);
            
                checkGenre(sUrlAppstoreUmsatzstark, "Umsatzstark / iPhone", genre, iCount, store);
                checkGenre(sUrlAppstoreUmsatzstarkIPAD, "Umsatzstark / iPad", genre, iCount, store);
            }
        }
    }

Möchten wir nun die Top100-Apps Gratis, Gratis-IPad, Meist-Geladen, Umsatzstark und Umsatzstark-IPad aller Stores auslesen, erfolgt dies durch den einfachen Aufruf der Funktion checkTopApps(...).

checkTopApps(100, true);

Heraus kommt eine Liste der Apps, die im jeweiligen Store und Genre eine Platzierung erreicht haben.
apple_appstore_reader_screen2

Schlußwort und Download-Links zum Code

Hier gibt es die entsprechenden Klassen und den sonst noch benötigten Code zum Download.
Viel Spaß damit! :-)

Hier geht es zum Update V2.

Bei Fragen, Anmerkungen oder Erweiterungsvorschlägen nutze bitte das Kontaktformular.

Zuletzt bearbeitet: 23. Mai, 2019
Tags: , , , ,

Weitere interessante Beiträge

3 Gründe warum es App-Entwickler nicht einfach haben

Aus gegebenem Anlass heute mal ein kleiner Beitrag aus der Sektion "Nicht ganz so ernst gemeinte Beiträge". Hier nun einige Überlegungen warum es App-Entwickler heute schwieriger haben, als noch vor einigen Jahren. Eines vorweg: Wer in diesem Beitrag einen Hauch von Ironie und Sarkasmus findet, darf ihn behalten! ;-) Inhaltsverzeichnis:Problem 1: Die Masse an Apps [...] Weiterlesen »


App-Suchmaschine für iOS und Android

In den letzten Wochen habe ich mich viel mit dem Lesen, Auswerten und Visualisieren von Daten aus den verschiedenen Appstores auseinander gesetzt. Dabei entstanden einige nette kleine Tools die zum Teil hier veröffentlicht wurden, wie z.B. der Apfel-Appstore-Reader und der ITC-Umsatz-Rechner. Irgendwann bin ich dann über diverse App-Suchmaschinen wie AppTicker oder AppGefahren gestolpert. Schön finde [...] Weiterlesen »


App des Tages: Hunter & Co. - Dein digitaler Jagdgefährte

Heute mal eine kostenfreie App aus dem Bereich Sport - genauer gesagt aus dem Bereich der Jagd. Dein digitaler Jagdgefährte ist eine kostenlose App für iOS (iPhone) sowie Android-Mobilgeräte. Obwohl die App noch relativ "jung" ist, wurde Sie bereits weit über 10.000 mal in den Appstores heruntergeladen und auch schon knapp 100mal bewertet (nahezu positiv; [...] Weiterlesen »


Kleine Helfer für den erfolgreichen Börsenhandel

BÖRSE ONLINE ist das etablierteste unabhängige Anlegermagazin in Deutschland. Seit mehr als 25 Jahren hilft es Anlegern Woche für Woche bei ihren Anlageentscheidungen. BÖRSE ONLINE richtet sich gleichermaßen an institutionelle Leser in Banken, Versicherungen, Vermögensverwaltungen und Kapitalanlagegesellschaften sowie an selbstentscheidende, kapitalmarktaffine Privatanleger. • Informiert schwerpunktmäßig über deutsche und internationale Aktien. • Fokussiert die Berichterstattung auf [...] Weiterlesen »


iTunes-Connect - Sales-Reports

Wer Apple und iTunes-Connect (ITC) kennt, weiß von den Problemchen welche ITC teilweise mit sich bringt. Mich persönlich hat immer gestört, das die Sales-Reports / Verkaufszahlen des Vortages manchmal erst am späten Abend des Folgetages verfügbar waren. Das liegt wohl daran, das die Apple-Server die Reports für jeden Entwickler aufbereiten müssen und es hier öfter [...] Weiterlesen »