TNG-RSS Plugin erzeugt WordPress-Beiträge aus dem TNG-Feed

Neulich kam mir eine weitere Idee, wie sich WordPress und The Next Generation of Genealogy Sitebuilding (oder kurz „TNG“) besser integrieren lassen. TNG selbst liefert mit der Datei tngrss.php einen RSS-Feed aus. Dieser Feed protokolliert sämtliche Änderungen an der Datenbank, die an Personen, Familien oder Medien durchgeführt werden. Daraus entstand die Idee für ein Plugin, welches diese Änderungen in WordPress-Beiträgen zusammen fasst.

Mangels Zeit und Programmierkenntnissen habe ich dieses Plugin bei Andreas Krischer in Auftrag gegeben. Das Plugin wurde so umgesetzt, dass es nun im Backend von WordPress einen Knopf gibt, um den Feed einzulesen. Das Plugin speichert jeweils die Zeit die Ausführungszeit in der Datenbank. So erkennt es die neuen Feed-Einträge seit der letzten Ausführung. Alle Änderungen eines Tages werden jeweils zu einem einzigen Beitrag zusammen gefasst. Es gibt (zur Zeit) keinerlei Einstellungen im Backend; aber die Feed-URL sowie Autor, Kategorie und Schlagworte können direkt in der PHP-Datei gesetzt werden.
Die Entscheidung zu Gunsten einer manuellen Bedienung ist gefallen, da die Änderungen an TNG so unregelmäßig durchgeführt werden, dass ein kontinuierliches Pollen des Feeds unnötig Ressourcen verschwendet hätte.

Das Plugin ist noch nicht komplett fertig. Allerdings erfüllt es seinen Zweck und funktioniert tadellos. Daher veröffentliche ich es hier für andere Hobby-Genealogen, die an dem Zusammenspiel von TNG und WordPress arbeiten. Als zukünftige Änderungen wäre eine Internationalisierung noch wünschenswert. Sofern jemand das Plugin weiter verbessert, würde ich mich über Rückmeldungen hier in den Kommentaren sehr freuen.

Quelltext:

<?php
/*
Plugin Name: TNG-RSS
Description: Loads a RSS Feed from TheNextGeneration (genealogy software) and creates WP articles from the feed
Version: 1.1
Author: Andreas Krischer, Marcus Zurhorst
Author URI: http://akbyte.com/
License: GPL3
*/
define('TNG_RSS_FEED_URL','https://www.die-zurhorsts.de/genealogie/tngrss.php');
define('TNG_RSS_CATEGORY','31');         //IDs comma separated
define('TNG_RSS_TAGS','tng-updates');    //Tag-names comma separated
define('TNG_RSS_AUTHOR','2');            //ID
add_action( 'wp_dashboard_setup', 'tng_rss_dashboard_widget' );
function tng_rss_dashboard_widget() {
    wp_add_dashboard_widget(
            'tng_rss_dashboard_widget',
            'TNG RSS',
            'tng_rss_dashboard_widget_content'
   );    
}
function tng_rss_dashboard_widget_content() {
    ?>
    <form method="post" action="index.php"> 
        <input type="hidden" name="tng_rss" value="true">
        <?php submit_button('Create new TNG Post'); ?>
    </form>
    <?php
    if($_POST['tng_rss'] == 'true') {
        if( !$xml = simplexml_load_file(TNG_RSS_FEED_URL) ) {
            echo 'Could not read RSS file!';
        }
        $last_update = intval(get_option('tng_rss_last_update','0'));
        $items = array();
        foreach($xml->channel[0]->item as $item) {
            $pubDate = strtotime(date('d.m.Y',strtotime($item->pubDate)));
            if($pubDate <= $last_update)
                break;
            $items[strtotime(date('d.m.Y',$pubDate))][] = $item;
        }
        $postcount = 0;
        foreach($items as $date => $date_items) {
            if($date > $last_update) {
                $last_update = $date;
            }
            $content = '<ul>';
            $strdate = date('l, d. F Y', $date);
            foreach($date_items as $item) {
                $title = preg_replace("#\([^\)]*\)#", "", $item->title);
                $content .= '<li>';
                $content .= '<a href="'.$item->link.'" target="_blank">'.$title.'</a> - '.$item->description;
                $content .= '</li>';
            }
            $content .= '</ul>';
            $content .= '<br><small>'.$strdate.'</small>';
            $title = 'TNG Updates vom '.date('d.m.Y',$date);
            $post = wp_insert_post(array(
                'post_content' => $content,
                'post_title' => $title,
                'post_status' => 'publish',
                'post_category' => explode(',',TNG_RSS_CATEGORY),
                'tags_input' => explode(',',TNG_RSS_TAGS),
                'post_author' => TNG_RSS_AUTHOR,
                'post_date' => date('Y-m-d H:i:s',$date)
            ));
            if($post > 0) {
                $postcount++;
            }
            else {
                echo 'Artikel '.$title.' konnte nicht erstellt werden.';
            }
        }
        update_option('tng_rss_last_update',$last_update);
        echo $postcount.' Artikel hinzugefügt.';
    }
}
?>

Download:

[wpdm_file id=1]
 

3 Gedanken zu “TNG-RSS Plugin erzeugt WordPress-Beiträge aus dem TNG-Feed”

  1. Hallo,
    bin durch Zufall auf dieses Plugin gestossen und nach einigen Anpassungen, auch mit Hilfe des Webmasters, läuft es auch bei mir. Vielen Dank für das Plugin und die Hilfe!
    Grüße Michael

Schreibe einen Kommentar

Ich akzeptiere