Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Integrare i plugin di WordPress con i Web services

Impariamo le procedure necessarie per l'integrazione dei plugin di WordPress con i Web services e le loro API; analizziamo un esempio pratico sull'impiego delle interfacce per la programmazione di AWS nell'interrogazione del catalogo di Amazon
Impariamo le procedure necessarie per l'integrazione dei plugin di WordPress con i Web services e le loro API; analizziamo un esempio pratico sull'impiego delle interfacce per la programmazione di AWS nell'interrogazione del catalogo di Amazon
Link copiato negli appunti

WordPress può interagire facilmente con i Web services messi a disposizione dalle varie piattaforme. In questo articolo vedremo come implementare un esempio di tale integrazione nei plugin.

Come funziona un Web service

Un Web service funziona mediante un’architettura client-server. L'utente effettua una richiesta lato client e il server remoto esegue un’azione restituendo solitamente un output che informa sull’esito dell’azione oppure fornisce dei dati che sono stati richiesti.

Solitamente i metodi HTTP utilizzati in questi casi sono GET e POST. Un Web service può anche scegliere di far eseguire le sue azioni solo tramite POST se il suo design è concepito in tale modo.

Per esempio, per inserire un file su Amazon S3 effettueremo una richiesta e il Web service ci comunicherà se il trasferimento ha avuto successo. Come avviene tutto questo? Tramite le API, interfacce per la programmazione messe a disposizione dal Web service di cui dovremmo studiare esempi e documentazione ed eventualmente scaricare un SDK per lo sviluppo in PHP.

Quando si usa un Software Development Kit occorre verificare la compatibilità con la versione di PHP in uso sul server, infatti, alcune feature potrebbero funzionare solo da una determinata versione del linguaggio in poi, come accade per i namespace introdotti soltanto con la release 5.3 di PHP.

Usare le API di Amazon per reperire informazioni sui prodotti

Possiamo usare le API AWS (Amazon Advertising API) per reperire informazioni relative ai prodotti presenti nel catalogo del noto sito Web per il commercio elettronico; per far questo occorrono però le credenziali di accesso alle API.

Quindi, per prima cosa definiamo una funzione per effettuare la richiesta. Ci serviranno anche i dati relativi al codice ASIN (Amazon Standard Identification Number) del prodotto e alla regione di riferimento.

function my_aws_signed_request( $region, $params ) {
	$public_key = "chiave pubblica";
	$private_key = "chiave privata";
	$method = "GET";
	$host = "ecs.amazonaws." . $region;
	$host = "webservices.amazon." . $region;
	$uri = "/onca/xml";
	$params["Service"] = "AWSECommerceService";
	$params["AssociateTag"] = "affiliate-20"; // Il vostro codice Affiliate
	$params["AWSAccessKeyId"] = $public_key;
	$params["Timestamp"] = gmdate( "Y-m-d\TH:i:s\Z" );
	$params["Version"] = "2015-06-20";
	ksort( $params );
	$canonicalized_query = array();
	// Prepariamo la query con i parametri passati
	foreach ( $params as $param => $value ) {
		$param = str_replace( "%7E", "~", rawurlencode( $param ) );
		$value = str_replace("%7E", "~", rawurlencode( $value ) );
		$canonicalized_query[] = $param . "=" . $value;
	}
	$canonicalized_query = implode( "&", $canonicalized_query );
	$string_to_sign = $method . "\n" . $host . "\n" . $uri . "\n" . $canonicalized_query;
	// Prepariamo la firma (signature)
	$signature = base64_encode( hash_hmac( "sha256", $string_to_sign, $private_key, true ) );
	$signature = str_replace( "%7E", "~", rawurlencode( $signature ) );
	$request = "http://" . $host . $uri . "?" . $canonicalized_query . "&Signature=" . $signature;
	$response = wp_remote_get( $request );
	if( !is_wp_error( $response ) ) {
		$pxml = @simplexml_load_string( $response["body"] );
		if ( $pxml === false ) {
			return false;
		} else {
			return $pxml;
		}
	} else {
		return false;
	}
}

Amazon restituisce una risposta in formato XML, dobbiamo quindi effettuare il parsing del documento XML restituito:

function my_aws_get_product_info( $region, $asin ) {
	$xml = my_aws_signed_request( $region, array(
		"Operation" => "ItemLookup", // Richiediamo informazioni
		"ItemId" => $asin, // Codice ASIN
		"IncludeReviewsSummary" => false, // Nessuna recensione
		"ResponseGroup" => "Medium,OfferSummary" // Informazioni di base
	));
	$info = null;
	$item = $xml->Items->Item;
	$title = htmlentities( ( string ) $item->ItemAttributes->Title );
	$url = htmlentities( ( string ) $item->DetailPageURL );
	$image = htmlentities( ( string ) $item->MediumImage->URL );
	$price = htmlentities( ( string ) $item->OfferSummary->LowestNewPrice->Amount );
	$code = htmlentities( ( string ) $item->OfferSummary->LowestNewPrice->CurrencyCode );
	$qty = htmlentities( ( string ) $item->OfferSummary->TotalNew );
	if ( $qty !== "0" ) { // Solo se il prodotto è disponibile
		$info = array(
			"code" => $code,
			"price" => number_format( ( float ) ( $price / 100 ), 2, '.', '' ),
			"image" => $image,
			"url" => $url,
			"title" => $title
		);
	}
	return $info;
}

Abbiamo così ottenuto il titolo del prodotto, l'URL della sua pagina, l'URL della sua immagine, il prezzo, la valuta e la quantità; la funzione scritta potrà essere utilizzata in questo modo:

$product_info = my_aws_get_product_info( "com", "B00KQPGRRE" );
if( !is_null( $product_info ) ) {
	//...
}

Ti consigliamo anche