Come depositare un immagine tramite API

Come depositare un immagine tramite API

Come depositare un immagine tramite API

gestionidautore.it è interfacciabile direttamente con il Vs sito web tramite l'utilizzo di CURL. L'URL verso cui puntare il post è https://www.gestionidautore.it/api/put.

Ad ogni lotto di attestazione viene associata una API Key che consente l'autenticazione dell'utente tramite un unica stringa alfanumerica. 

Per poter effettuare il post delle immagini da un sito remoto occorre seguire i seguenti passaggi:

STEP 1
$post = array(
'apikey' => $apikey,
'url' => $url_to_jpeg,
'title' => $title,
'year' => $year_photo,
);

Creare un array che contenga l'API key, l'url all'immagine da depositare, il titolo e l'anno di pubblicazione secondo le schema sopra riportato. Nell'array sopra riprodotto tali valori sono valorizzati in quattro variabili distinte: $apikey, $url_to_jpeg, $title, e $year_photo.

STEP 2
$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://www.gestionidautore.it/api/put",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => $post,
]);
$response = curl_exec($curl);
$info = curl_getinfo($curl);
$err = curl_error($curl);

if($response === false){
echo "Errore: ". curl_error($curl)." - Codice errore: ".curl_errno($curl);
}

curl_close($curl);

$result = json_decode($response, true);

$success = $result['success'];

Effettuare il post con CURL dell'array creato con il primo step. L'output al post viene restituito in formato json e per prima cosa andremo a verificare il contenuto del parametro "SUCCESS" che ci consentirà di verificare se l'operazione ha avuto successo.

STEP 3

Se il json di risposta ha restituito la variabile $result['success']; popolata con il valore TRUE si può procedere a memorizzare all'interno di un database l'esito e tutte le informazioni inerenti il deposito dell'immagine:

if ($success == "true"){

$cert = $result['cert'];
$timestamp = $result['timestamp'];
$image_watermarked = $result['image_watermarked'];
$zip_cert = $result['zip_cert'];
$tsr = $result['tsr'];
$url_crt_pdf = $result['url_crt_pdf'];
$url_crt_web = $result['url_crt_web'];
$lot = $result['lot'];
$free_lots = $result['free_lots'];
$success = $result['success'];
$message = $result['message'];
$error = $result['error'];

$sql = "INSERT INTO gestionidautore_crt (id_photo, cert, timestamp, image_watermarked, zip_cert, tsr, url_crt_pdf, url_crt_web, lot, free_lots,
success, message, error) "
. "VALUES ($id_photo, '$cert', '$timestamp', '$image_watermarked', '$zip_cert', '$tsr', '$url_crt_pdf', '$url_crt_web',
'$lot', '$free_lots', '$success', '$message','$error')";
$con->query($sql) or die(mysqli_error($con));
$ritorno="URL DI RITORNO";
header('Location: '.$ritorno);
}

STEP 4

Nel caso in cui il json abbia risposto, tramite la variabile  $result['success']; con il valore FALSE vi è stato qualche errore nell'esecuzione del deposito. È sempre buona norma registrare l'errore al fine di poter monitorare ed intervenire su eventuali problematiche.

if ($success == "false"){

$success = $result['success'];
$timestamps = $result['timestamps'];
$message = $result['message'];
$error = $result['error'];

$sql = "INSERT INTO gestionidautore_err (success, timestamps, message, error) "
. "VALUES ('$success', '$timestamps', '$message, '‘'$error')";
$con->query($sql) or die(mysqli_error($con));

echo "Error " . $message;
}

***

Qui di seguito sono riportate le strutture delle due tabelle Mysql utilizzate negli esempi.

Lo schema della tabella gestionidautore_crt è il seguente:

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";

CREATE TABLE `gestionidautore_crt` (
`id` int(11) NOT NULL,
`id_photo` int(11) NOT NULL,
`cert` text NOT NULL,
`timestamp` date NOT NULL,
`image_watermarked` text NOT NULL,
`zip_cert` text NOT NULL,
`tsr` text NOT NULL,
`url_crt_pdf` text NOT NULL,
`url_crt_web` text NOT NULL,
`lot` text NOT NULL,
`free_lots` int(11) NOT NULL,
`success` text NOT NULL,
`message` text NOT NULL,
`error` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ALTER TABLE `gestionidautore_crt`
ADD PRIMARY KEY (`id`);

ALTER TABLE `gestionidautore_crt`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;


Lo schema della tabella gestionidautore_err è il seguente:

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


CREATE TABLE `gestionidautore_err` (
`id` int(11) NOT NULL,
`data_errore` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`message` text NOT NULL,
`error` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ALTER TABLE `gestionidautore_err`
ADD PRIMARY KEY (`id`);

ALTER TABLE `gestionidautore_err`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;


Guida, FAQ, PHP, API gestionidautore.it, CURL, Attestazione titolarità dei diritti d'autore, Dimostrare la paternità dell'opera, Dimostrare paternità dei diritti d'autore