hns - 日記自動生成システム - Version 2.19.7

void GraphicWizardsLair( void ); //

otsune GWL
FreeBSD, AfterEffects, RETAS, animo, DigitalAnime, Linux, Mac OS, Win2k

[Who is otsune?] [title] [message] [Policy] [注目エントリー] [top]
Twitter Status :


Namazu for hns による簡易全文検索
詳しくは 詳細指定/ヘルプを参照して下さい

検索式:

先月 2005年04月 来月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30


2005年04月19日(火) [長年日記]

#2 [home][hns] hnsのTrackbackにメール送信機能を追加する

hns-tb.cgiに追加機能を書いた後で検索したら気が付いたけど、 yarさん_ がすでに作っていたよ……
しょうがないからTrackBack spam対策と、$emailなどをconfig.phから引っ張るように改造したもののdiffを置いておこう。
--- hns-tb_cgi.txt      Thu Feb 10 17:12:57 2005
+++ hns-tb.cgi  Tue Apr 19 06:15:11 2005
@@ -1,4 +1,4 @@
-#! /usr/bin/perl
+#! /usr/local/bin/perl
 # $Id: d20050419.hnf,v 1.16 2005/04/21 13:35:09 moo9500 Exp $
 use strict;
 use lib qw(lib);
@@ -7,11 +7,32 @@
 use Jcode;
 use SimpleDB::Scalar;
 use vars qw($DataDir);
+use HNS::System;

 require './config.ph';

 $DataDir ||= "$HNS::System::DiaryDir/trackback/";

+sub sendmail($)
+{
+       my $msg = shift;
+       my $email = $HNS::System::UserMail;
+       my $tomail = $HNS::System::MesMail;
+       my $sendmail = '/usr/local/bin/sendmail -t -f';
+
+       my $mail = "";
+       $mail .= "To: $tomail\n";
+       $mail .= "From: $email\n";
+       $mail .= "Content-Type: text/plain; charset=iso-2022-jp\n";
+       $mail .= $msg;
+
+       Jcode::convert( \$mail, "jis");
+       open(OUT, "| $sendmail $tomail");
+       print OUT $mail;
+       close(OUT);
+       exit;
+}
+
 sub html_convert
 {
     my ($str, $body_mode) = @_;
@@ -82,7 +103,7 @@

 my ($id) = ($ENV{REQUEST_URI} =~ m!cgi/(\d{9}\d*)!);

-#error 'invalid id' unless($id =~ /\d+/);
+error 'invalid id' unless($id =~ /\d+/);

 my $cgi = new CGI;

@@ -92,17 +113,6 @@
     exit;
 }

-$id = $cgi->param('tb_id') unless($id =~ /\d+/);
-error 'invalid id' unless($id =~ /\d+/);
-
-#my $id = "";
-#
-#my @params = $cgi->param();
-#foreach my $param (@params) {
-#  $id = sprintf("%s%s\t%s\n", $id,$param,$cgi->param($param));
-#}
-
-
 my $title = jcode($cgi->param('title'))->euc;
 my $excerpt = jcode($cgi->param('excerpt'))->euc;
 my $url = jcode($cgi->param('url'))->euc;
@@ -117,6 +127,11 @@
 # URL が空だったら error;
 error "URL is empty" unless($url);

+#block trackback spam
+if ($url =~ /casino/){
+error 'You are not allowed to send TrackBack pings';
+}
+
 # 要約は 255 文字程度で折る
 $excerpt = truncate_body($excerpt, 255);

@@ -130,8 +145,6 @@
 print F "\n";
 close F;

-system("chmod 666 $DataDir/$id");
-
 print "Content-Type: text/xml\r\n\r\n";
 print <<EOF;
 <?xml version="1.0" encoding="iso-8859-1"?>
@@ -146,24 +159,14 @@
 $last_modified = time;
 untie $last_modified;

-my $mailto = 'ore@yar-3.net';
-my $sendmail = '/usr/lib/sendmail';
+       my $mail = "";
+       $mail .= "Subject: [hns] trackback $orig_blog_name $id\n";
+       $mail .= "\n";
+       $mail .= "title: $orig_title\n$orig_blog_name\n";
+       $mail .= "$orig_excerpt\n $orig_url\n";
+       $mail .= "-- \n";
+       $mail .= "trackback sender by $HNS::System::Author\n\n";
+       $mail .= "from $ENV{'REMOTE_HOST'} $ENV{'REMOTE_ADDR'}\n";
+       $mail .= "UA $ENV{'HTTP_USER_AGENT'} \n";

-     my $msg = "";
-     $msg .= "To: $mailto\n";
-     $msg .= "From: $mailto\n";
-     $msg .= "Content-Type: text/plain; charset=iso-2022-jp\n";
-     $msg .= "Subject: trackback $orig_blog_name $id\n";
-     $msg .= "\n";
-     $msg .= "title: $orig_title\n$orig_blog_name\n";
-     $msg .= "$orig_excerpt\n $orig_url\n";
-     $msg .= "-- \n";
-     $msg .= "trackback sender by yar-3\n\n";
-     $msg .= "from $ENV{'REMOTE_HOST'} $ENV{'REMOTE_ADDR'}\n";
-     $msg .= "UA $ENV{'HTTP_USER_AGENT'} \n";
-
-
-     Jcode::convert( \$msg, "jis");
-     open(OUT, "| $sendmail $mailto");
-     print OUT $msg;
-     close(OUT);
+sendmail($mail);

2 yarさんの汎用TrackBack送信フォームをhns専用にしてしまう:

tb-send.cgi_ をどうせならHNSからblog名とかを引っ張ってくる感じに。
--- tb-send.txt Wed Oct 27 08:01:11 2004
+++ tb.cgi      Tue Apr 19 05:23:42 2005
@@ -1,10 +1,13 @@
-#!/usr/bin/perl
+#!/usr/local/bin/perl
 # tb_send - Send Trackback Ping

 use strict;
+use lib qw(lib);
 use CGI;
 use HTTP::Request::Common;
 use LWP::UserAgent;
+use HNS::System;
+require './config.ph';

 my $query = CGI->new();
    $query->charset('utf-8');
@@ -35,7 +38,7 @@
 <form>
 Ping URL: <input type="text" name="ping_url" size="30" /><br />
 Title:    <input type="text" name="title" size="30" /><br />
-Blogname: <input type="text" name="blog_name" size="30" value="dobu nikki"/><br />
+Blogname: <input type="text" name="blog_name" size="30" value="$HNS::System::Title"/><br />
 Blog URL: <input type="text" name="url" size="30" /><br />
 Excerpt:  <input type="text" name="excerpt" size="50" /><br />
 <input type="submit" value="Send" />
.htaccessとかに
<Files "tb.cgi">
AuthType Basic
AuthName "Trackback Form"
AuthUserFile /home/ほげ/.htpasswd-tb
AuthGroupFile /dev/null
require valid-user
</Files>
などと書いておいてhtpasswdでBASIC認証しておくのが良いかもしれない。

2 まぁ手動TrackBackなので素人にはオススメできないのは確かだな……:

cgiを呼んだら$HNS::System::DiaryDirの今日の日付の*.hnfを見て、LNEWとかLINKのurl先にNet::TrackbackとかでアクセスしてTrackback Auto Discoveryをして。discover($url)で配列にぶちこんだら本文を$excerptに入れたFormを表示するって感じか。
Permalink: http://www.otsune.com/diary/2005/04/19/2.html#200504192
trackback
このエントリーを含むはてなブックマーク del.icio.us livedoor Clip View blog reactions
Last Updated 2005-04-19 00:00:00 By otsune