Mit der kostenlosen API nameapi.org kannst du Vorname, Nachname, Titel (z.B. Prof. Dr., etc.), Suffixtitel und das Geschlecht “herausparsen”. Ich habe die API ausgiebig getestet. Mein Fazit: es klappt in 99% der Fälle extrem gut! Erfahre jetzt wie du die API mit einer WordPress Funktion verwenden kannst.
Account / API Key erstellen
Gehe zunächst du die Homepage der API: www.nameapi.org und erstelle dir einen Benutzeraccount.
Du erhälst deinen Login per E-Mail. Sobald du eingeloggt bist erhälst du deinen apiKey
.
Komplett PHP Funktion – erhalte deinen $namestring geparst als Array
/**
* @author Julian Lang <[email protected]>
* @link https://julianlang.net
*/
function jl_nameapi_parse_name( $name ) {
// Ersetze deinen apiKey
$auth = 'https://api.nameapi.org/rest/v5.3/parser/personnameparser?apiKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-user1';
// siehe API Dokumentation für weitere Möglichkeiten
// https://www.nameapi.org/index.php?id=217
$body_data = [
'inputPerson' => [
'type' => 'NaturalInputPerson',
'personName' => [
'nameFields' => [
[
'string' => $name,
'fieldType' => 'FULLNAME'
]
]
]
]
];
// Setze einen Transient um die API zu entlasten
$transient_name = 'nameapi/name/'.md5($name);
$transient_time = DAY_IN_SECONDS * 30;
$response = get_transient( $transient_name );
if ( false === $response ) {
// remote post Funktion / erhalte das Ergebnis
$response = wp_remote_post( $auth, [
'method' => 'POST',
'timeout' => 45,
'headers' => [ 'Content-Type' => 'application/json' ],
'body' => json_encode( $body_data, true ),
'data_format' => 'body',
]);
set_transient( $transient_name, maybe_serialize( $vars ), $transient_time );
} else {
$response = maybe_unserialize( $response );
}
if ( is_wp_error( $response ) ) {
if ( defined('WP_DEBUG_LOG') && true === WP_DEBUG_LOG ) {
error_log( $response->get_error_message() );
}
return 0;
}
$response = wp_remote_retrieve_body( $response );
$response = json_decode( $response );
// Bail, wenn es ein problem gab und keine Ergebnisse vorliegen
if ( !array_key_exists('matches', $response) ) {
return 0;
}
if ( empty( $response ) ) {
return 0;
}
$title = '';
$firstname = '';
$lastname = '';
$suffixtitle = '';
$parsed = $response->bestMatch->parsedPerson;
$gender = $parsed->gender->gender;
$nameitems = $parsed->outputPersonName->terms;
foreach ( $nameitems as $nameitem ) {
if ( 'TITLE' === $nameitem->termType ) {
$title .= ' '.$nameitem->string;
}
if ( 'GIVENNAME' === $nameitem->termType ) {
$firstname .= ' '.$nameitem->string;
}
if ( 'SURNAME' === $nameitem->termType ) {
$lastname .= ' '.$nameitem->string;
}
if ( 'SUFFIX' === $nameitem->termType ) {
$suffixtitle .= ' '.$nameitem->string;
}
}
$parsed_data = [
'gender' => $gender,
'title' => rtrim(ltrim($title)),
'suffix' => $suffixtitle,
'firstname' => rtrim(ltrim($firstname)),
'lastname' => rtrim(ltrim($lastname))
];
return $parsed_data;
}