WordPress: servire un feed RSS come JSON in AJAX

WordPress: servire un feed RSS come JSON in AJAX

In WordPress possiamo servire un feed RSS come JSON al codice lato client tramite AJAX.

Possiamo implementare la seguente soluzione.


function my_get_blog_feed() {
    $url = trim( $_POST['url'] );

    if( !filter_var( $url, FILTER_VALIDATE_URL ) ) {
        wp_send_json( array( 'error' => 'Invalid URL.' ) );
    }
    
    $per_page = isset( $_POST['n'] ) && ctype_digit( $_POST['n'] ) ? (int) $_POST['n'] : 3;
    
    $response = wp_remote_get( $url, array( 'timeout' => 5 ) );
    $output = array();
    $output['items'] = array();
    $posts = array();

    if( is_wp_error( $response ) ) {
        wp_send_json( array( 'error' => 'Request error.' ) );
    }

    $feed = $response['body'];
    $dom = new DOMDocument();
    $dom->loadXML( $feed );
    $items = $dom->getElementsByTagName( 'item' );
    
    foreach( $items as $item ) {
        $title = $item->getElementsByTagName( 'title' )->item( 0 )->firstChild->nodeValue;
        $link =  $item->getElementsByTagName( 'link' )->item( 0 )->firstChild->nodeValue;

        $posts[] = compact( 'title', 'link' );
    }

    $length = ( $per_page > 0 && $per_page <= count( $posts ) ) ? $per_page : 3;
    $output['items'] = array_slice( $posts, 0, $length );

    wp_send_json( $output );

}

add_action( 'wp_ajax_my_get_blog_feed', 'my_get_blog_feed' );
add_action( 'wp_ajax_nopriv_my_get_blog_feed', 'my_get_blog_feed' );

Il client invia l'URL del feed RSS da reperire e facoltativamente il numero di elementi da restituire. Se l'URL è valido e non ci sono errori nella richiesta HTTP, il feed viene elaborato usando l'estensione DOM di PHP. Viene quindi restituito un oggetto JSON la cui proprietà items è un array di oggetti contenenti il titolo e l'URL di ciascun articolo.

Torna su