Frage
Wie kann ich mehrere Seiten mit Ergebnissen automatisch abrufen?
Antwort
Manchmal empfiehlt es sich, mehrere Seiten mit Benutzerergebnissen in einer JSON-Datei abzurufen. Ich habe dafür ein PHP-Skript erstellt, das unten angefügt ist.
<?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);
?>
Laden Sie dieses Skript herunter oder kopieren Sie es und fügen Sie es in die Datei paginate.php ein. Setzen Sie die Variablen am Anfang, $resource, $start_page, $end_page, $subdomain, and $userpwd, wie in den Kommentaren des Skripts erklärt ein.
Navigieren Sie dann zum Ordner, in den Sie die Datei heruntergeladen haben, und führen Sie vom Terminal aus den Befehl php paginate.php aus, um die neue Datei mit den Ergebnissen in einer Datei namens results.json zu erstellen. Die Datei wird überschrieben und nicht angehängt.
Nachdem Sie die Ergebnisse erhalten haben, können Sie sie wie gewünscht bearbeiten. Anhand dieser Informationen können Sie herausfinden, welche Einträge im Array eindeutig oder doppelt waren. Geben Sie hierzu die Ergebnisse in der Datei results.json aus und führen Sie dann einen der beiden folgenden Befehle aus: Der erste zeigt die Anzahl eindeutiger Ergebnisse an, der zweite die tatsächlichen Werte:
cat results.json | jq '.' | grep '"id"' > sort > uniq -c > uniq.txt
cat results.json | jq '.' | grep '"id"' > sort > uniq > uniq.txt
Für die Verwendung dieser Befehle ist außerdem jq erforderlich, das Sie unter https://stedolan.github.io/jq/download/ herunterladen können.
Außerdem können diese Informationen nützlich sein, um die Daten für den Import in ein neues System zu exportieren.
Hinweis zur Übersetzung: Dieser Beitrag wurde mit automatischer Übersetzungssoftware übersetzt, um dem Leser ein grundlegendes Verständnis des Inhalts zu vermitteln. Trotz angemessener Bemühungen, eine akkurate Übersetzung bereitzustellen, kann Zendesk keine Garantie für die Genauigkeit übernehmen.
Sollten in Bezug auf die Genauigkeit der Informationen im übersetzten Beitrag Fragen auftreten, beziehen Sie sich bitte auf die englische Version des Beitrags, die als offizielle Version gilt.
2 Kommentare
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
Anmelden, um einen Kommentar zu hinterlassen.