API Alexa Top Sites topsites.php

Тема в разделе "PHP", создана пользователем absurdo, 15 мар 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. absurdo

    absurdo

    Регистр.:
    22 мар 2007
    Сообщения:
    314
    Симпатии:
    8
    У Амазона есть доступ к API Alexa Top Sites
    Кто нибудь сталкивался с получением данных от Alexa Top Sites?
    Не могу настроить topsites.php т.к. не программист, по инструкции не получается.
     
  2. zigumba

    zigumba Постоялец

    Регистр.:
    24 янв 2008
    Сообщения:
    61
    Симпатии:
    6
    Вы подробно опишите свою проблему:
    1. Что и в какой последовательности Вы делаете
    2. Какие ошибки вы получаете на выходе. Не работать же тоже может по-разному =)
    3. Приведите тут Ваш код.

    Вот тогда Вам обязательно помогут добрые люди... например я =)
     
    absurdo нравится это.
  3. absurdo

    absurdo

    Регистр.:
    22 мар 2007
    Сообщения:
    314
    Симпатии:
    8
    Идею понял, исправляюсь.

    PHP:
    <?php

    // Make a request to the Alexa Top Sites service to get lists of top sites

    define("ACCESS_KEY""******");
    define("SECRET_ACCESS_KEY""*********");
    define("SERVICE_ENDPOINT""http://ats.amazonaws.com/?");

    define("ACTION""TopSites");
    define("RESPONSE_GROUP""Country");

    $start 1;
    $count 10;  // Max value is 100
    $country "UA";

    echo(
    "For country: " $country."\n\n");

    $ats_url compose_url($country$start$count);

    echo (
    "Request: \n"$ats_url."\n\n");

    // Make request

    $result make_http_request($ats_url);

    // Display resulting XML

    //echo("Response:\n");
    //echo($result);

    // Parse XML and display sites list

    $sites_list = array();
    $current_tag "";
    $xml_parser  =  xml_parser_create();
    xml_parser_set_option ($xml_parserXML_OPTION_CASE_FOLDINGfalse);
    xml_set_element_handler($xml_parser"start_tag""end_tag");
    xml_set_character_data_handler($xml_parser"contents");
    xml_parse($xml_parser$resulttrue);
    xml_parser_free($xml_parser);

    // Print out the results

    $end $start $count -1;
    echo 
    "Sites: $start to $end from $country list:\n";

    foreach (
    $sites_list as $site) {
            echo 
    "$site\n";
    }

    function 
    contents($parser$data){
        global 
    $current_tag$sites_list;
        switch (
    $current_tag) {
            case 
    "aws:DataUrl":
                    
    array_push$sites_list$data);
        }
    }

    function 
    start_tag($parser$name) {
        global 
    $current_tag;
        
    $current_tag $name;
    }

    function 
    end_tag($parser$name) {
        global 
    $current_tag;
        
    $current_tag "";
    }

    // Returns the AWS url to get the top sites list for the given country starting at start,
    //  and returning 'count' results

    function compose_url($country$start$count) {

            
    $timestamp =  generate_timestamp();
            
    $timestamp_enc urlencode($timestamp);
            
    $signature_enc urlencode (
                
    calculate_RFC2104HMAC
                        
    (ACTION $timestampSECRET_ACCESS_KEY)
                );

            return  
    SERVICE_ENDPOINT
                            
    "Action=".ACTION
                            
    "&AWSAccessKeyId=".ACCESS_KEY
                            
    "&ResponseGroup=".RESPONSE_GROUP
                            
    "&Timestamp=$timestamp_enc"
                            
    "&Signature=$signature_enc"
                            
    "&Start=$start"
                            
    "&Count=$count"
                            
    "&CountryCode=$country";

    }


    // Calculate signature using HMAC: http://www.faqs.org/rfcs/rfc2104.html

    function calculate_RFC2104HMAC ($data$key) {
        return 
    base64_encode (
            
    pack("H*"sha1((str_pad($key64chr(0x00))
            ^(
    str_repeat(chr(0x5c), 64))) .
            
    pack("H*"sha1((str_pad($key64chr(0x00))
            ^(
    str_repeat(chr(0x36), 64))) . $data))))
         );
    }

    // Timestamp format: yyyy-MM-dd'T'HH:mm:ss.SSS'Z'

    function generate_timestamp () {
        return 
    gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z"time());
    }

    // Make an http request to the specified URL and return the result

    function make_http_request($url){
           
    $ch curl_init($url);
           
    curl_setopt($chCURLOPT_TIMEOUT4);
               
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
           
    $result curl_exec($ch);
           
    curl_close($ch);
           return 
    $result;
    }


    ?>
    По идее этот скрипт должен выдать ТОП10 сайтов по стране Украина.

    а выдает такое:


    PHP:
    For countryUA Requesthttp://ats.amazonaws.com/?Action=TopSites&AWSAccessKeyId=******&ResponseGroup=Country&Timestamp=2010-03-17T10%3A35%3A48.000Z&Signature=%2BrkDKh5yxe7TcZTsEsZemkkUB8o%3D&Start=1&Count=10&CountryCode=UA 

    инфа есть тут

    http://docs.amazonwebservices.com/AlexaTopSites/2005-11-21_2/
    http://docs.amazonwebservices.com/AlexaTopSites/2005-11-21/

    В итоге я хочу получить от Алексы, например, ТОП10000 сайтов Украины. Может есть более простые способы?
     
Статус темы:
Закрыта.