API Alexa Top Sites topsites.php

Статус
В этой теме нельзя размещать новые ответы.

absurdo

Участник
Регистрация
22 Мар 2007
Сообщения
317
Реакции
9
У Амазона есть доступ к API Alexa Top Sites
Кто нибудь сталкивался с получением данных от Alexa Top Sites?
Не могу настроить topsites.php т.к. не программист, по инструкции не получается.
 
Вы подробно опишите свою проблему:
1. Что и в какой последовательности Вы делаете
2. Какие ошибки вы получаете на выходе. Не работать же тоже может по-разному =)
3. Приведите тут Ваш код.

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

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_parser, XML_OPTION_CASE_FOLDING, false);
xml_set_element_handler($xml_parser, "start_tag", "end_tag");
xml_set_character_data_handler($xml_parser, "contents");
xml_parse($xml_parser, $result, true);
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 . $timestamp, SECRET_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($key, 64, chr(0x00))
        ^(str_repeat(chr(0x5c), 64))) .
        pack("H*", sha1((str_pad($key, 64, chr(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($ch, CURLOPT_TIMEOUT, 4);
           curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       $result = curl_exec($ch);
       curl_close($ch);
       return $result;
}


?>

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

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



инфа есть тут


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