nameapi.org: Namen aus String inklusive Titel parsen

Julian Lang
Julian Lang

24. Okt, 2022 | 1 Min. Lesezeit

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;
}

geschrieben von

Autor Avatar
Julian Lang

ist PHP / WordPress Entwickler. Arbeitet außerdem als Allrounder bei docrelations.de und entwickelt zwei coole Projekte: jadento.de | lifeisabinge.com

Schreibe einen Kommentar

© 2015 - 2024 | Julian Lang Webentwickler | WordPress Entwickler | Webdesigner in Bayreuth und Umgebung
Glücksrad drehen
Wait Gif

Das Glücksrad erscheint jetzt nur einmal!

Nutze die Chance und gewinne einen Preis

Neukunden Preise

  • 🏆: kostenlose lokale Google Font Einbindung
  • ⚡: kostenlose Performance Analyse deiner Webseite
  • 🤲: 50% Rabatt auf Stundensatz für eine Programmierstunde
    (30 Minuten kostenlos)