tags:

views:

20

answers:

0

I'm trying to create a fully custom feed from my WordPress blog so that it can be ingested by a content management system that uses NewsML. You can learn about NewsML and find a NewsML validator here.

My approach has been to create a WP page template that produces xml rather than HTML, described by a guy named Yoast (google him, I can't post too many links b/c I'm new here). However, nothing seems to satisfy the NewsML validator. Does anyone out there have any insights into creating NewsML feeds and/or any experience doing it with WordPress? It seems like NewsML is extremely complicated and tripping me up everywhere I turn.

Here's the template I've come up with to create the feed. Feel free to try it out if you want.

<?php

$numposts = 10;

function yoast_rss_date( $timestamp = null ) {
  $timestamp = ($timestamp==null) ? time() : $timestamp;
  echo date(DATE_RSS, $timestamp);
}

function yoast_rss_text_limit($string, $length, $replacer = '...') { 
  $string = strip_tags($string);
  if(strlen($string) > $length) 
    return (preg_match('/^(.*)\W.*$/', substr($string, 0, $length+1), $matches) ? $matches[1] : substr($string, 0, $length)) . $replacer;   
  return $string; 
}

$posts = query_posts('showposts='.$numposts);
$lastpost = $numposts - 1;

header("Content-Type: application/rss+xml; charset=UTF-8");
echo '<?xml version="1.0"?>';
?>
<NewsML>
    <Catalog Href="http://www.iptc.org/std/catalog/catalog.IptcMasterCatalog.xml"/&gt;
    <NewsEnvelope>
        <DateAndTime><?php echo mysql2date('Ymd', get_lastpostmodified('GMT'), false); ?>T<?php echo mysql2date('His', get_lastpostmodified('GMT'), false); ?></DateAndTime>
        <NewsService FormalName="Thumbnail" link-url="http://example.com"&gt;
            http://example.com/images/example.gif
        </NewsService>
    </NewsEnvelope>


<?php foreach ($posts as $post) { ?>
    <?php setup_postdata($post); ?>

    <NewsItem LinkType="normal">
        <Identification>
            <NewsIdentifier>
                <ProviderId><?php the_author(); ?></ProviderId>
            </NewsIdentifier>
        </Identification>
        <NewsManagement>
            <NewsItemType FormalName="News"/>
            <FirstCreated><?php the_time(Ymd); ?>T<?php the_time(His); ?></FirstCreated>
            <ThisRevisionCreated><?php the_modified_time(Ymd); ?>T<?php the_modified_time(Ymd); ?></ThisRevisionCreated>
            <Status FormalName="Usable"/>
        </NewsManagement>
        <NewsComponent Duid="<?php echo get_permalink($post->ID); ?>copyright" Essential="no" EquivalentsList="no">
            <NewsLines>
                <CopyrightLine>Placeholding</CopyrightLine>
            </NewsLines>
            <NewsComponent Duid="<?php echo get_permalink($post->ID); ?>">
            <DateLine><?php the_time(Ymd); ?>T<?php the_time(His); ?></DateLine>
            <Author><?php the_author(); ?></Author>
                <NewsComponent>
                    <Role FormalName="Main"/>
                    <NewsLines>
                        <HeadLine><?php echo get_the_title($post->ID); ?></HeadLine>
                        <SlugLine> 
                            <?php the_excerpt(); ?>
                        </SlugLine>
                        <MoreLink> 
                            <?php echo get_permalink($post->ID); ?>
                        </MoreLink>
                    </NewsLines>
                    <ContentItem link-url="<?php echo get_permalink($post->ID); ?>">
                        <DataContent>
                            <nitf>
                                <body>
                                    <body.head>
                                        <hedline>
                                            <hl1><?php echo get_the_title($post->ID); ?></hl1>
                                        </hedline>
                                    </body.head>
                                    <body.content>
                                        <?php echo apply_filters('the_content',$post->post_content);  ?>
                                    </body.content>
                                </body>
                            </nitf>
                        </DataContent>
                    </ContentItem>
                </NewsComponent>
            </NewsComponent>    
        </NewsComponent>
    </NewsItem>
<?php } ?>
</NewsML>