Alex Mielus

  • Asa gandesc EU. Nu-ti convine? Ghinion (!), nu poti decat sa comentezi :)


Amazon AssociatesScriam inainte de a intra in concediu ca Amazon va introduce incepand cu 15 august autentificarea pentru folosirea API-ului lor. Drept urmare m-am trezit pe siteul meu de versuri cu o problema …

The request must contain the parameter Signature.

Am cautat si in forumul lor, am si googalit … si-am dat de solutia lui Brandon Checketts (THANK YOU, Brandon! winking ).

function signAmazonUrl($url)
{
    global $CONFIG;
    $original_url = $url;
    // Decode anything already encoded
    $url = urldecode($url);
    // Parse the URL into $urlparts
    $urlparts       = parse_url($url);
    // Build $params with each name/value pair
    foreach (split('&', $urlparts['query']) as $part) {
        if (strpos($part, '=')) {
            list($name, $value) = split('=', $part, 2);
        } else {
            $name = $part;
            $value = '';
        }
        $params[$name] = $value;
    }
    // Include a timestamp if none was provided
    if (empty($params['Timestamp'])) {
        $params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z');
    }
    // Sort the array by key
    ksort($params);
    // Build the canonical query string
    $canonical = '';
    foreach ($params as $key => $val) {
        $canonical  .= "$key=".rawurlencode($val)."&";
    }
    // Remove the trailing ampersand
    $canonical = preg_replace("/&$/", '', $canonical);
    // Some common replacements and ones that Amazon specifically mentions
    $canonical = str_replace(array(' ', '+', ',', ';'), array('%20', '%20', urlencode(','), urlencode(':')), $canonical);
    // Build the si
    $string_to_sign = "GET\n{$urlparts['host']}\n{$urlparts['path']}\n$canonical";
    // Calculate our actual signature and base64 encode it
    $signature = base64_encode(hash_hmac('sha256', $string_to_sign, $CONFIG['AMAZON_SECRET_KEY'], true));
    // Finally re-build the URL with the proper string and include the Signature
    $url = "{$urlparts['scheme']}://{$urlparts['host']}{$urlparts['path']}?$canonical&Signature=".rawurlencode($signature);
    return $url;
}

Tot ce trebuie facut acum este sa setati o variabila globala $CONFIG['AMAZON_SECRET_KEY'] si apoi sa chemati functia signAmazonUrl() in orice loc aveati un URL de la Amazon API; ca in exemplul meu:

$rss_parser_nuebun = "http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&amp;AWSAccessKeyId=<AWSAccessKeyId>&amp;Version=2008-04-07&amp;AssociateTag=<tagul-tau>&amp;Operation=ItemSearch&amp;SearchIndex=Music&amp;Title=<cuvinte-pentru-cautare>&amp;ResponseGroup=Images,ItemAttributes,OfferSummary";

$rss_parser = signAmazonUrl($rss_parser_nuebun);

Si iata-l si in actiune (in partea stanga pe fundal albastru, unde sunt plasate 3 produse de la Amazon).

PS: Nu stii ce e Amazon? Vezi aici.

RSS Feed IconDaca ti-a placut acest articol te poti abona la feed-ul RSS al acestui blog. Nu stii ce este RSS si cum te poti abona la RSS? Poti afla aici.
    blog comments powered by Disqus

    In aceeasi categorie

    Chat

    Blog Hosting

      HostGator

    Sustin

      Adoptii Caini

      Forum Club Opel

      LoNero



      CityFM - La Rock Comanda!

      METALHEAD.ro - Online Rock and Metal Magazine

      Universitatea Craiova

      Loz in plic

    Statistici




    • fane: da ,se fac dar e mult de invatat
    • Alex Mielus: Despre ce pachet vorbesti tu acolo, Sebi?
    • Sebi: Salut Alex, Ce parere ai despre pachetul adsense cu tot ce e de facut contra cost?(49ron la oferta)


    Ce este un feed RSS?

    Primeste articole recente prin email

    * Si eu urasc spamul ca si tine. Adresa ta de email va fi folosita DOAR pentru a primi posturile publicate pe acest blog.

    Reclame