Domanda
Come posso recuperare automaticamente più pagine di risultati?
Risposta
A volte può essere utile recuperare diverse pagine di risultati per gli utenti e inserirle in un file JSON. Ho creato uno script PHP proprio per fare questo, che è allegato e incollato qui sotto.
<?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. Compila 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 e dal tuo terminale esegui il comando php paginate.php per creare il nuovo file con i risultati, in un file chiamato requirements.json. Il file è stato progettato per sovrascrivere e non per aggiungere file.
Dopo aver ricevuto i risultati, è possibile elaborarli secondo necessità. Queste informazioni possono essere utili per individuare le voci nell'array univoche e quelle duplicate. A tal fine, invia i risultati al file results.json , quindi esegui uno dei due comandi seguenti, il primo che 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 il possesso di jq, che può essere scaricato da: https://stedolan.github.io/jq/download/.
Inoltre, queste informazioni possono essere utili per esportare i dati per l'importazione 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 aggiungere un commento.