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

头像
523066680
Administrator
Administrator
帖子: 357
注册时间: 2016年07月19日 12:14
拥有现金: 锁定
储蓄: 锁定
Has thanked: 32 times
Been thanked: 31 times
联系:

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

帖子 #1 523066680 » 2016年10月29日 16:20

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

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


选择导出-> 自定义 -> 在数据表中,按住ctrl键选择
phpbb_forums
phpbb_topics
phpbb_posts
export.png
export.png (48.76 KiB) 查看 552 次
export.png
export.png (48.76 KiB) 查看 552 次


导出格式选YAML,然后导出

再用以下Perl脚本导出sitemap.xml, 需要安装 YAML::Tiny 模块
Code: [全选] [展开/收缩] [Download] (Untitled.pl)
  1. use YAML::Tiny;
  2. use Encode;
  3. use IO::Handle;
  4. STDOUT->autoflush(1);
  5.  
  6. my $yaml = YAML::Tiny->read( 'datebasename.yml' );
  7. my $ref;
  8. my $first;
  9.  
  10. my $SITMAP;
  11. open $SITEMAP, ">:encoding(utf8)", "sitemap.xml";
  12. print $SITEMAP '<?xml version="1.0" encoding="utf-8"?>'."\n";
  13. print $SITEMAP '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'."\n";
  14.  
  15. for my $i ( 0.. $#{$yaml->[0]})
  16. {
  17.     $ref = $yaml->[0][$i];
  18.  
  19.     if ( exists $ref->{'forum_last_post_time'} )
  20.     {
  21.         printf($SITEMAP "   <url>\n");
  22.         printf
  23.         (
  24.             $SITEMAP
  25.             "      <loc>http://www.code-by.org/viewforum.php?f=%d<\/loc>\n",
  26.             $ref->{'forum_id'},
  27.         );
  28.         sameprint( $SITEMAP, $ref->{'forum_last_post_time'}, "0.8" );
  29.     }
  30.  
  31.     if ( exists $ref->{'topic_last_post_time'} )
  32.     {
  33.         printf($SITEMAP "   <url>\n");
  34.         printf
  35.         (
  36.             $SITEMAP
  37.             "      <loc>http://www.code-by.org/viewtopic.php?f=%d&amp;t=%d<\/loc>\n",
  38.             $ref->{'forum_id'},
  39.             $ref->{'topic_id'},
  40.         );
  41.         sameprint( $SITEMAP, $ref->{'topic_last_post_time'}, "1.0" );
  42.     }
  43.  
  44.     if ( exists $ref->{'post_id'} )
  45.     {
  46.         printf($SITEMAP "   <url>\n");
  47.         printf
  48.         (
  49.             $SITEMAP
  50.             "      <loc>http://www.code-by.org/viewtopic.php?f=%d&amp;t=%d#p%d<\/loc>\n",
  51.             $ref->{'forum_id'},
  52.             $ref->{'topic_id'},
  53.             $ref->{'post_id'},
  54.         );
  55.         sameprint( $SITEMAP, $ref->{'post_time'}, "0.9" );
  56.     }
  57. }
  58.  
  59. print $SITEMAP '</urlset>'."\n";
  60. close $SITEMAP;
  61.  
  62. sub sameprint
  63. {
  64.     my ($OUT, $time, $prior) = @_;
  65.     if ($time == 0)
  66.     {
  67.         $time = time();
  68.     }
  69.     printf($OUT "      <lastmod>%s</lastmod>\n", YYYYMMDD(  $time ) );
  70.     printf($OUT "      <changefred>daily</changefred>\n" );
  71.     printf($OUT "      <priority>$prior</priority>\n");
  72.     printf($OUT "   </url>\n");
  73. }
  74.  
  75. sub YYYYMMDD
  76. {
  77.     my ($sec,$min,$hour,$day,$mon,$year) = localtime( $_[0] );
  78.     $mon += 1;
  79.     $year += 1900;
  80.     return sprintf("%04d-%02d-%02d",$year,$mon,$day);
  81. }

回到 “phpBB论坛配置笔记”

在线用户

用户浏览此论坛: 没有注册用户 和 1 访客