vBulletin-1.1.3 to HTML

vBulletin-1.1.3 to HTML

vBulletin-1.1.3 to HTML

Однажды форум (vBulletin) стал загибаться, более того, он стал загибать пол сервера. Большое количество постов и большое количество пользователей одновременно работающих на форуме делали свое дело.

Появилась необходимость почистить базу сообщений форума и все старье сохранить в быстро доступный архив с легко настраиваемым внешним видом.

Вот что из этого получилось: http://forum.novgorod.ru/20021125/

А вот и код конвертера (Perl):

  1. #!/usr/bin/perl
  2.  
  3. use Mysql;
  4.  
  5. $dbh=Mysql->Connect("localhost","forum","root","");
  6.  
  7. $sth=$dbh->Query("SELECT smilietext,smiliepath from smilie");
  8. $i=0;
  9. while (@arr = $sth->FetchRow) {
  10. @smilest[$i]=@arr[0];
  11. @smilesp[$i]=@arr[1];
  12. $i++;
  13. }
  14. $scount=$i;
  15.  
  16. $sth=$dbh->Query("select forumid,title,threadcount,replycount from forum order by replycount desc;");
  17. open(FILE,">index.shtm") or die("open error");
  18. print FILE "<HTML>\n<TITLE>\n";
  19. print FILE "<!--#include virtual=\"top.htm\" -->\n";
  20. print FILE "<!--#include virtual=\"forum.htm\" -->\n";
  21. while (@arr = $sth->FetchRow) {
  22. if ($class ne "t1") {$class="t1";} else {$class="t2";}
  23. print FILE "<tr class=$class><td width=100%><a href=forum_".@arr["0"].".shtm>".@arr["1"]."</a></td><td align=right>".@arr[2]."</td><td align=right>".@arr[3]."</td></tr>\n";
  24.  
  25. $sth1=$dbh->Query("select threadid,title,postusername,lastposter,dateline,replycount from thread where forumid='".@arr["0"]."' order by dateline desc;");
  26. open(FILE1,">forum_".@arr["0"].".shtm") or die("open error");
  27. print @arr["1"]."\n";
  28. print FILE1 "<HTML>\n<TITLE>".@arr["1"]." / ";
  29. print FILE1 "<!--#include virtual=\"top.htm\" -->\n";
  30. print FILE1 "<!--#include virtual=\"thread.htm\" -->\n";
  31. while (@arr1 = $sth1->FetchRow) {
  32. $dname=substr(@arr1[0],-2);
  33. if ($class1 ne "t1") {$class1="t1";} else {$class1="t2";}
  34. ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=gmtime(@arr1[4]);
  35. print FILE1 "<tr class=$class1><td width=100% valign=top><a href=posts/$dname/thread_".@arr1["0"].".shtm>".@arr1["1"]."</a></td><td valign=top>".@arr1[2]."<br>".@arr1[3]."</td><td align=right valign=top nowrap>$hour:$min:$sec $mday/$mon/".(1900+$year)."</td><td align=right valign=top>".@arr1[5]."</td></tr>\n";
  36.  
  37. $sth2=$dbh->Query("select u.username,t.title,t.dateline,t.pagetext,t.signature from post t,user u where u.userid=t.userid and t.threadid='".@arr1[0]."' order by dateline");
  38. print $arr1[0]."\n";
  39.  
  40. if (! -d "posts/".$dname) {
  41. if (! -d "posts") {$a=`mkdir posts;touch index.htm`;}
  42. $a=`cd posts;mkdir $dname;touch index.htm;cd ..`;
  43. }
  44. open(FILE2,">posts/".$dname."/thread_".@arr1["0"].".shtm") or die("open error");
  45. print FILE2 "<HTML>\n<TITLE>".@arr1["1"]." / ".@arr["1"]." / ";
  46. print FILE2 "<!--#include virtual=\"../../top.htm\" -->\n";
  47. print FILE2 "<H1>".@arr1[1]." <a href=../../forum_".@arr[0].".shtm>(".@arr[1].")</a></H1>\n";
  48. print FILE2 "<!--#include virtual=\"../../post.htm\" -->\n";
  49.  
  50. while (@arr2 = $sth2->FetchRow) {
  51. if ($class2 ne "t1") {$class2="t1";} else {$class2="t2";}
  52. ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=gmtime(@arr2[2]);
  53. $msg=@arr2[3];
  54. $msg=~s/\[br\]/<br>/gim;
  55. $msg=~s/\[b\]/<b>/gim;
  56. $msg=~s/\[\/b\]/<\/b>/gim;
  57. $msg=~s/\[u\]/<u>/gim;
  58. $msg=~s/\[\/u\]/<\/u>/gim;
  59. $msg=~s/\[i\]/<i>/gim;
  60. $msg=~s/\[\/i\]/<\/i>/gim;
  61. $msg=~s/\[QUOTE\]/<blockquote><hr size=1>/gim;
  62. $msg=~s/\[\/QUOTE\]/<hr size=1><\/blockquote>/gim;
  63. $msg=~s/\[img\]/<br><img src=/gim;
  64. $msg=~s/\[\/img\]/><br>/gim;
  65. $msg=~s/^(.*)\[url\]([^\]\[]+)\[\/url\](.*)$/$1<a href=\"$2\">$2<\/a>$3/gim;
  66. $msg=~s/\n/<br>\n/gi;
  67.  
  68. for ($i=0;$i<$scount;$i++) {
  69. $text=@smilest[$i];
  70. $text=~s/\)/\\\)/gi;
  71. $text=~s/\(/\\\(/gi;
  72. $text=~s/\]/\\\]/gi;
  73. $text=~s/\[/\\\[/gi;
  74. $text=~s/\./\\\./gi;
  75. $text=~s/\:/\\\:/gi;
  76. $path=@smilesp[$i];
  77. $msg=~s/$text/<img src=\"http\:\/\/forum.novgorod.ru\/$path\"><\/a>/gim;
  78. }
  79.  
  80. print FILE2 "<tr class=$class2><td width=100% valign=top><b>".@arr2[0]."</b><br><i>\n".@arr2[1]." ($hour:$min:$sec $mday/$mon/".(1900+$year).")</i><br>\n<br>\n".$msg."</td></tr>\n";
  81. }
  82.  
  83. print FILE2 "</table>\n";
  84. print FILE2 "<!--#include virtual=\"../../bottom.htm\" -->\n";
  85. }
  86. print FILE1 "</table>\n";
  87. print FILE1 "<!--#include virtual=\"bottom.htm\" -->\n";
  88. }
  89. print FILE "</table>\n";
  90. print FILE "<!--#include virtual=\"bottom.htm\" -->\n";
  91. close(FILE);

Download this code: vbull_offline.pl

Комментарии