如何创建NewsML WordPress订阅源

时间:2010-09-28 00:15:56

标签: xml wordpress rss

我正在尝试从我的WordPress博客创建一个完全自定义的Feed,以便它可以被使用NewsML的内容管理系统摄取。 You can learn about NewsML and find a NewsML validator here

我的方法是创建一个生成xml而不是HTML的WP页面模板,由一个名叫Yoast的人描述(谷歌他,我不能发布太多链接b / c我是新来的)。但是,似乎没有什么能满足NewsML验证器。有没有人对创建NewsML提要有任何见解和/或使用WordPress做任何经验?似乎NewsML极其复杂,在我转向的任何地方都会绊倒我。

这是我用来创建Feed的模板。如果您愿意,请随意尝试。

<?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"/>
    <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">
            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>

1 个答案:

答案 0 :(得分:1)

从坟墓中复活 - 正在寻找这个。不确定您的Feed的验证程度有多严格,因为我无法获得提供的链接,但我能够通过在CDATA标记中包含正文和其他可能包含html的字段来验证我的目的。谢谢你的代码!