[sb]トラックバックチェッカー対応

[sb]重複トラックバック防止にて重複トラックバックに対応していますが、sbをトラックバックチェッカーに対応していませんので、対応させる修正方法を公開してみます。本家にマージしてもらえると幸いです。
どういうことか簡単に説明しますと、TrackBackのパラメータとして__mode=rssをつけるとトラックバック一覧をRSSで取得できる機能に対応します。
ex. http://blog.underdone.net/sb.cgi/480?__mode=rss
__mode=viewにも対応させたいところですが、css対応などが大変なので、今回は行っていません。

まずlib/sbres.plのsbres_tb関数を以下のように書き換えます。
sub sbres_tb {
 my $eid = shift;
 my $lfile = &sblock_lock() or die($gMsg{'error'}{'file_lock'} . "\n");
 eval {
  my ($subj,$url,$body,$name,$check) = ();
  my ($host,$addr,$refe,$agnt) = &sbhtml_gethost();
  { # ファイル読込み
   &sbfile_read_datafile('ent');
   &sbfile_read_datafile('tb');
   &sbfile_read_entry($eid);
  }
  { # 下準備
   $subj = &sbtxt_decform($gIn{'title'},1,'utf8');
   $url = &sbtxt_decform($gIn{'url'},1,'utf8');
   $body = &sbtxt_decform($gIn{'excerpt'},2,'utf8');
   $name = &sbtxt_decform($gIn{'blog_name'},1,'utf8');
   $gIn{'title'} = '';
   $gIn{'url'} = '';
   $gIn{'excerpt'} = '';
   $gIn{'blog_name'} = '';
  }
  # チェック
  if (!($gIn{'__mode'} eq 'rss' || $gIn{'__mode'} eq 'view')) {
   die('url field is necessary.' . "\n") if ($url eq '');
   die('The ping is denied.' . "\n") if ( $gData{'entry'}{$eid}{'ent'}{'atb'} == 0 );
   die('The ping is denied.' . "\n") if ( $refe ne '' );
   die('The ping is denied.' . "\n") if ( !&sbres_check_ip($addr) );
   die('The ping is denied.' . "\n") if ( !&sbres_check_agent($agnt) );
   die('The ping has already received.' . "\n") if ( !&sbres_check_redundancy($eid,'tb',$body,$url) );
  }
  if (!($gIn{'__mode'} eq 'rss' || $gIn{'__mode'} eq 'view')) {
   # データ更新
   require 'sbgen.pl';
   my $num = @{$gData{'entry'}{$eid}{'tb'}};
   $gData{'entry'}{$eid}{'tb'}[$num]{'id'} = $gData{'num'}{'tb'};
   $gData{'entry'}{$eid}{'tb'}[$num]{'wid'} = 0;
   $gData{'entry'}{$eid}{'tb'}[$num]{'eid'} = $eid;
   $gData{'entry'}{$eid}{'tb'}[$num]{'stat'} = ($gData{'entry'}{$eid}{'ent'}{'atb'} == 1) ? 1 : 0;
   $gData{'entry'}{$eid}{'tb'}[$num]{'date'} = $gNowTime;
   $gData{'entry'}{$eid}{'tb'}[$num]{'body'} = $body;
   $gData{'entry'}{$eid}{'tb'}[$num]{'subj'} = $subj;
   $gData{'entry'}{$eid}{'tb'}[$num]{'name'} = $name;
   $gData{'entry'}{$eid}{'tb'}[$num]{'url'} = $url;
   $gData{'entry'}{$eid}{'tb'}[$num]{'host'} = $addr;
   &sbini_creat_newtb($eid,$gData{'entry'}{$eid}{'tb'}[$num]{'stat'},$gNowTime,$subj,$name,$url);
   $gData{'entry'}{$eid}{'ent'}{'tb'} = &sbres_count($eid,'tb');
   $gData{'ent'}[$eid]{'tb'} = $gData{'entry'}{$eid}{'ent'}{'tb'};
   &sbres_sendmail($eid,'tb',$num);
   &sbfile_update_entry($eid);
   &sbfile_update_datafile('tb');
   &sbfile_update_datafile('ent');
   &sbres_build_files($eid);
  }
 };
 &sblock_unlock($lfile) if (!$@);
 &sbres_tb_xml($@) if (!($gIn{'__mode'} eq 'rss' || $gIn{'__mode'} eq 'view'));
 &sbres_tb_rss($eid, $num) if ($gIn{'__mode'} eq 'rss');
 &sbres_tb_view($eid, $num) if ($gIn{'__mode'} eq 'view');
 exit(0);
}

そしてsbres_tb関数の次にしたの関数を追加します。
sub sbres_tb_rss {
 my ($eid,$num) = @_;
 my $err = 0;
 my $aDescLen = 200;
 my $data = $gData{'entry'}{$eid}{'ent'};
 my $subj = $$data{'subj'};
 my $link = &sbcms_permalink($eid,$$data{'date'});
 my $sum = &sbcms_make_summary($$data{'sum'},$$data{'body'},$aDescLen,$$data{'form'});

 my $aTbLength = 300; # トラックバック文字数
 my $num = 0;
 my $data = $gData{'entry'}{$eid}{'tb'};
 my @order = @{$data};
 @order = reverse(@order) if ($gEnv{'conf'}{'tb' . '_sort'} == 1);
 print 'Content-Type: text/xml;',"\n\n";
 print '<?xml version="1.0" encoding="euc-jp"?>',"\n";
 print '<response>',"\n";
 print '<error>1</error>',"\n" if ($err);
 print '<message>',$err,'</message>',"\n" if ($err);
 print '<error>0</error>',"\n" if (!$err);
 if (!$err) {
  print '<rss version="0.91">',"\n";
  print ' <channel>',"\n";
  print ' <title>',$subj,'</title>',"\n";
  print ' <link>',$link,'</link>',"\n";
  print ' <description>',$sum,'</description>',"\n";
  print ' <language>','ja-jp','</language>',"\n";
  foreach my $elem ( @order ) {
   next if ($$elem{'id'} eq '');
   next if ($$elem{'stat'} == 0);
   print ' <item>',"\n";
   print ' <title>',$$elem{'subj'},'</title>',"\n";
   print ' <link>',$$elem{'url'},'</link>',"\n";
   print ' <description>',&sbcms_make_summary('',$$elem{'body'},$aTbLength,1),'</description>',"\n";
   print ' </item>',"\n";
  }
  print ' </channel>',"\n";
  print '</rss>',"\n";
 }
 print '</response>',"\n";
 return();
}
Blog関係 > sb : comments (0) : trackbacks (1) ブックマークに追加する

Comments

Comment Form

  

Trackbacks

Trackback url :
sb1.14RからSB2への移行による諸エラーをなんとか力技で解決したインチキっぽいドキュメンタリー。ネタならいいのにね。(泣笑)※ ビミョーにオタクサイトにつきご注意。 ※
by えろぐ。 ... 2005/09/23 01:55 AM
なかのひと
SiteSearch Google
Google
Web
underdone.net
blog.underdone.net
Blog Pet
Amazon
Categories
Profile
Other
  • Blog Ranking
  • RSS feed meter for http://blog.underdone.net/