[论坛收录][Perl]从数据库导出的YAML文件中生成sitemap.xml

回复
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

[论坛收录][Perl]从数据库导出的YAML文件中生成sitemap.xml

帖子 523066680 »

以下内容仅适用于PHPBB论坛:

用 phpMyAdmin 网站在线登录/管理论坛的数据库,
http://mysql.myhostadmin.net


选择导出-> 自定义 -> 在数据表中,按住ctrl键选择
phpbb_forums
phpbb_topics
phpbb_posts
export.png
(48.76 KiB) 已下载 729 次
导出格式选YAML,然后导出

再用以下Perl脚本导出sitemap.xml, 需要安装 YAML::Tiny 模块
use YAML::Tiny;
use Encode;
use IO::Handle;
STDOUT->autoflush(1);

my $yaml = YAML::Tiny->read( 'datebasename.yml' );
my $ref;
my $first;

my $SITMAP;
open $SITEMAP, ">:encoding(utf8)", "sitemap.xml";
print $SITEMAP '<?xml version="1.0" encoding="utf-8"?>'."\n";
print $SITEMAP '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'."\n";

for my $i ( 0.. $#{$yaml->[0]})
{
$ref = $yaml->[0][$i];

if ( exists $ref->{'forum_last_post_time'} )
{
printf($SITEMAP " <url>\n");
printf
(
$SITEMAP
" <loc>http://www.code-by.org/viewforum.php?f=%d<\/loc>\n",
$ref->{'forum_id'},
);
sameprint( $SITEMAP, $ref->{'forum_last_post_time'}, "0.8" );
}

if ( exists $ref->{'topic_last_post_time'} )
{
printf($SITEMAP " <url>\n");
printf
(
$SITEMAP
" <loc>http://www.code-by.org/viewtopic.php?f=%d&t=%d<\/loc>\n",
$ref->{'forum_id'},
$ref->{'topic_id'},
);
sameprint( $SITEMAP, $ref->{'topic_last_post_time'}, "1.0" );
}

if ( exists $ref->{'post_id'} )
{
printf($SITEMAP " <url>\n");
printf
(
$SITEMAP
" <loc>http://www.code-by.org/viewtopic.php?f=%d&t=%d#p%d<\/loc>\n",
$ref->{'forum_id'},
$ref->{'topic_id'},
$ref->{'post_id'},
);
sameprint( $SITEMAP, $ref->{'post_time'}, "0.9" );
}
}

print $SITEMAP '</urlset>'."\n";
close $SITEMAP;

sub sameprint
{
my ($OUT, $time, $prior) = @_;
if ($time == 0)
{
$time = time();
}
printf($OUT " <lastmod>%s</lastmod>\n", YYYYMMDD( $time ) );
printf($OUT " <changefred>daily</changefred>\n" );
printf($OUT " <priority>$prior</priority>\n");
printf($OUT " </url>\n");
}

sub YYYYMMDD
{
my ($sec,$min,$hour,$day,$mon,$year) = localtime( $_[0] );
$mon += 1;
$year += 1900;
return sprintf("%04d-%02d-%02d",$year,$mon,$day);
}
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 0 访客