Domanda
Come posso recuperare automaticamente più pagine di risultati?
Risposta
A volte può essere utile recuperare diverse pagine di risultati utente e inserirle in un file JSON. Ho creato uno script PHP per fare proprio questo, che è allegato e incollato di seguito.
<?php
$resource = ''; // put the name of the endpoint here, for example organizations, tickets
$start_page = 1; // first page you want to load
$end_page = 10; // last page you want to load (it could take a while if too big)
$subdomain = ''; // your zendesk subdomain
$userpwd = ''; // your zendesk username and password, or username/token and api token. - {username}/token:{token} or {username}:{password}
function makerequest($url, $userpwd) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERPWD, $userpwd);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
$result = curl_exec($ch);
if (curl_errno($ch)) $result = curl_error($ch);
curl_close($ch);
return $result;
}
function getpages($resource, $start_page, $end_page, $userpwd, $subdomain){
$url = isset($url) ? $url : "https://$subdomain.zendesk.com/api/v2/$resource.json";
$i = $start_page;
$array = Array();
while (1) {
if ($i > $end_page) {
$file = fopen("results.json", "w") or exit("Unable to open file!");
fwrite($file, json_encode(array($resource => $array)));
fclose($file);
break;
}
$results = json_decode(makerequest($url, $userpwd));
$array = array_merge($array, $results->$resource);
$url = $results->next_page;
$i++;
}
}
getpages($resource, $start_page, $end_page, $userpwd, $subdomain);
?>
Scarica questo script o copialo e incollalo in un file chiamato paginate.php. Inserisci le variabili all’inizio, $resource, $start_page, $end_page, $subdomaine $userpwd, come spiegato nei commenti dello script.
Quindi, vai alla cartella in cui hai scaricato il file ed esegui il comando php paginate.php dal terminale per creare il nuovo file con i risultati, in un file chiamato results.json. Il file è progettato per sovrascrivere e non aggiungere.
Dopo aver ricevuto i risultati, puoi elaborarli in base alle tue esigenze. Queste informazioni possono essere utili per scoprire quali voci nell’array erano univoche e quali duplicati. A tale scopo, genera i risultati nel file results.json , quindi esegui uno dei due comandi seguenti, il primo mostra il numero di risultati univoci e il secondo i valori univoci effettivi:
cat results.json | jq '.' | grep '"id"' > sort > uniq -c > uniq.txt cat results.json | jq '.' | grep '"id"' > sort > uniq > uniq.txt
L’uso di questi comandi richiede anche jq, che può essere scaricato da: https://stedolan.github.io/jq/download/.
Inoltre, queste informazioni possono essere utili per esportare i dati da importare in un nuovo sistema.
Avvertenza sulla traduzione: questo articolo è stato tradotto usando un software di traduzione automatizzata per fornire una comprensione di base del contenuto. È stato fatto tutto il possibile per fornire una traduzione accurata, tuttavia Zendesk non garantisce l'accuratezza della traduzione.
Per qualsiasi dubbio sull'accuratezza delle informazioni contenute nell'articolo tradotto, fai riferimento alla versione inglese dell'articolo come versione ufficiale.
2 commenti
Brett Bowser
Thanks for taking the time to share this with everyone Seneca :)
0
Seneca Spurling
It seems that CURLOPT_SSL_VERIFYHOST now needs to be set to 2.
If you don't already have php-curl installed, you'll need that package as well.
If you run it and get a zero-length output file, try changing the $end_page to 2. If you ask for a page that doesn't exist it overwrites the file with nothing at all. However it seems to handle things correctly up to then. You get 100 records per page, so for example if you have 650 records, you'll need to set $end_page to 6.
If you're getting organizations, for example, you can use something like this to get the count so you know how many pages to get. The count may not be accurate over 100,000. See https://developer.zendesk.com/rest_api/docs/support/organizations.
I know this is just an example and not meant to be robust. This isn't a complaint or request for changes, just adding these comments here in case they help someone like myself in the future.
0
Accedi per lasciare un commento.