How can I fetch information about the app/song/video etc. from iTunes Store?

后端 未结 5 1450
生来不讨喜
生来不讨喜 2020-12-28 11:05

I need to get an info about the app/song/video by item id from iTunes Store.

I\'ve found this

But it doesn\'t work with apps.

Is there any public API

相关标签:
5条回答
  • 2020-12-28 11:17

    There is a public API into iTunes called "iTunes Store Web Service Search API" that returns quite a bit of information. Some of it is documented here but that documentation is incomplete.

    You can use the API to get information about everything for sale in iTunes Store and App Store including urls for the artwork, links directly into iTunes, all the apps by a developer, and so on. It's very robust and I'd love to find updated documentation.

    I'm currently writing an article at the iPhone Dev FAQ to show how a few things are done and extend the available documentation.

    0 讨论(0)
  • 2020-12-28 11:23

    Apple now seems to offer a friendlier search service returning JSON. NB: the documentation does stipulate that the API is for use in connection with promoting the search results (i.e. it's designed for affiliate links).

    Example, fetching info about an app if you know its Apple ID:

    http://itunes.apple.com/lookup?id=[appleID]
    

    General keyword search

    http://itunes.apple.com/search?term=[query]
    
    0 讨论(0)
  • 2020-12-28 11:24

    I wrote this script for myself. It's not optimized or future-proof, but it's working for me in the meantime...

    <?php
    ini_set('display_errors', false);
    
    if(isset($_GET['appID']) && isset($_GET['format']))
    {
        $appID = (int)stripslashes($_GET['appID']);
        $format = stripslashes($_GET['format']);
    
        $url = "http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=$appID&mt=8";
        $useragent = "iTunes/4.2 (Macintosh; U; PPC Mac OS X 10.2";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url); 
        curl_setopt($ch, CURLOPT_FAILONERROR, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
        curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
    
        $result = curl_exec($ch); 
        curl_close($ch); 
    
        $temp = str_replace("&#189;","",strip_tags(substr($result,
                        strpos($result,"Average rating for the current version:"),
                        strpos($result,"Rate this application:")-strpos($result,"Average rating for the current version:"))));
    
        $temp1 = explode("ratings",$temp);
    
        if(strpos($temp1[2], "Average rating for all versions:"))
                $temp1[2] = substr($temp1[2],0,stripos($temp1[2],"Average rating for all versions:"));
    
        $temp1[2] = preg_replace('/\s\s+/', ' ', $temp1[2]);
        $temp2 = explode(" ",$temp1[2]);
    
        $ratings[0] = $temp2[1];
        $ratings[1] = $temp2[2];
        $ratings[2] = $temp2[3];
        $ratings[3] = $temp2[4];
        $ratings[4] = $temp2[5];
    
        if($format == "prettyPrint")
            printRatings($ratings);
        else if($format == "XML");
            getXML($ratings);
    }
    else
    {
        echo "Enter the app id and format (http://iblackjackbuddy.com/getAppRatings.php?appID=###&format=###";  
    }
    
    function printRatings($ratings)
    {
        echo "Five stars: " . $ratings[0];
        echo "<br>Four stars: " . $ratings[1];
        echo "<br>Three stars: " . $ratings[2];
        echo "<br>Two stars: " . $ratings[3];
        echo "<br>One star: " . $ratings[4];
    
        echo "<hr>Total ratings: " . getTotalRatings($ratings);
    
        echo "<br>Average rating: " . getAverageRating($ratings);
    }
    
    function getTotalRatings($ratings)
    {
        $temp = 1;
    
        for($i=0; $i < count($ratings); ++$i) 
            $temp+=$ratings[$i];
    
        return $temp;
    }
    
    function getAverageRating($ratings)
    {
        $totalRatings = getTotalRatings($ratings);
        return round(5*($ratings[0]/$totalRatings) 
                                    + 4*($ratings[1]/$totalRatings) 
                                        + 3*($ratings[2]/$totalRatings)
                                            + 2*($ratings[3]/$totalRatings) 
                                                + 1*($ratings[4]/$totalRatings),2);
    }
    
    function getXML($ratings)
    {   
        header('Content-type: text/xml');
        header('Pragma: public');        
        header('Cache-control: private');
        header('Expires: -1');
        echo '<?xml version="1.0" encoding="utf-8"?>';
        echo '<Rating>';
        echo '<FiveStars>'.$ratings[0].'</FiveStars>';
        echo '<FourStars>'.$ratings[1].'</FourStars>';
        echo '<ThreeStars>'.$ratings[2].'</ThreeStars>';
        echo '<TwoStars>'.$ratings[3].'</TwoStars>';
        echo '<OneStar>'.$ratings[4].'</OneStar>';
        echo '<TotalRatings>'.getTotalRatings($ratings).'</TotalRatings>';
        echo '<AverageRating>'.getAverageRating($ratings).'</AverageRating>';
        echo '</Rating>';
    }
    
    ?>
    
    0 讨论(0)
  • 2020-12-28 11:25

    As far as I know (and I've done a lot of looking), there isn't a public API.

    You're right that the HTML isn't semantically structured, so parsing it won't be very robust. But I think it's your only option. Here are a few links which might help :-

    A Python script which parses reviews.

    An Ars Technica article: Linking to the stars: hacking iTunes to solicit reviews.

    An Inside iPhone article: Scraping AppStore Reviews.

    0 讨论(0)
  • 2020-12-28 11:34

    That link you have there is JSON! You've got the solution right here. You just need JSON.framework

    0 讨论(0)
提交回复
热议问题