OSDN Git Service

・OnGetBoardURL に対応。
authoryoffy <yoffy>
Sun, 16 Nov 2003 10:48:38 +0000 (10:48 +0000)
committeryoffy <yoffy>
Sun, 16 Nov 2003 10:48:38 +0000 (10:48 +0000)
res/ExternalBoardPlugIn/MachiBBSPlugIn.dpr
res/ExternalBoardPlugIn/ShitarabaPlugIn.dpr

index 6d09dca..c0417b2 100644 (file)
@@ -39,6 +39,7 @@ type
                function        GetRes( inNo : Integer ) : string;
                function        GetHeader( inOptionalHeader : string ) : string;
                function        GetFooter( inOptionalFooter : string ) : string;
+               function        GetBoardURL : string;
 
                procedure       To2chDat( ioHTML : TStringList );
        end;
@@ -60,6 +61,7 @@ type
                function        ToThreadURL( inFileName : string ) : string;
                procedure       EnumThread( inCallBack : TBoardItemEnumThreadCallBack );
 
+               function        SubjectURL : string;
        end;
 
        // =========================================================================
@@ -73,12 +75,13 @@ type
 
 const
        LOG_DIR                                         = 'MachiBBS\';
+       SUBJECT_NAME                    = 'subject.txt';
 
        PLUGIN_NAME                             = 'MachiBBSPlugIn';
        MAJOR_VERSION                   = 1;
        MINOR_VERSION                   = 0;
        RELEASE_VERSION         = 'alpha';
-       REVISION_VERSION        = 3;
+       REVISION_VERSION        = 4;
 
 // =========================================================================
 // \8eG\97p\8aÖ\90\94
@@ -225,6 +228,7 @@ begin
        OnGetRes                        := GetRes;
        OnGetHeader             := GetHeader;
        OnGetFooter             := GetFooter;
+       OnGetBoardURL   := GetBoardURL;
 
        FilePath                        := '';
        FIsTemporary    := False;
@@ -470,6 +474,36 @@ begin
 end;
 
 // *************************************************************************
+// \82±\82Ì ThreadItem \82ª\91®\82·\82é\94Â\82Ì URL \82ð\97v\8b\81\82³\82ê\82½
+// *************************************************************************
+function       TMachiBBSThreadItem.GetBoardURL : string;
+var
+       uri                                             : TIdURI;
+       uriList                         : TStringList;
+begin
+
+       if Copy( URL, Length( URL ), 1 ) = '/' then
+               uri := TIdURI.Create( URL )
+       else
+               uri := TIdURI.Create( URL + '/' );
+       uriList := TStringList.Create;
+       try
+               YofUtils.ExtractHttpFields(
+                       ['&'], [],
+                       Copy( uri.Params, Pos( '?', uri.Params ) + 1, Length( uri.Params ) ), uriList );
+               FileName := uriList.Values[ 'KEY' ] + '.dat';
+               // http://hokkaido.machi.to/bbs/read.pl?BBS=hokkaidou&KEY=1061764446
+               // http://hokkaido.machi.to/hokkaidou/
+               Result          := CreateResultString(
+                       uri.Protocol + '://' + uri.Host + '/' + uriList.Values[ 'BBS' ] + '/' );
+       finally
+               uri.Free;
+               uriList.Free;
+       end;
+
+end;
+
+// *************************************************************************
 // \82Ü\82¿BBS\82Ì HTML \82ð 2ch \82Ì dat \8c`\8e®\82É
 // *************************************************************************
 procedure      TMachiBBSThreadItem.To2chDat(
@@ -588,11 +622,8 @@ begin
        FIsTemporary    := False;
        FDat                                    := nil;
 
-       if Copy( URL, Length( URL ), 1 ) = '/' then
-               uri := TIdURI.Create( URL )
-       else
-               uri := TIdURI.Create( URL + '/' );
-       uriList := TStringList.Create;
+       uri                     := TIdURI.Create( SubjectURL );
+       uriList := TStringList.Create;
        try
                YofUtils.ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
                // http://hokkaido.machi.to/hokkaidou/subject.txt
@@ -637,17 +668,10 @@ var
        responseCode    : Longint;
        uri                                             : TIdURI;
        uriList                         : TStringList;
-const
-       SUBJECT_NAME    = 'subject.txt';
 begin
 
        Result := dsError;
 
-       if Copy( URL, Length( URL ), 1 ) = '/' then
-               uri := TIdURI.Create( URL + SUBJECT_NAME )
-       else
-               uri := TIdURI.Create( URL );
-       uriList := TStringList.Create;
        if FDat <> nil then begin
                try
                        FDat.Free;
@@ -655,11 +679,13 @@ begin
                except
                end;
        end;
-       FDat := TStringList.Create;
+       FDat            := TStringList.Create;
+       uri                     := TIdURI.Create( SubjectURL );
+       uriList := TStringList.Create;
        // \93Æ\8e©\82É\83_\83E\83\93\83\8d\81[\83h\82â\83t\83B\83\8b\83^\83\8a\83\93\83O\82ð\8ds\82í\82È\82¢\8fê\8d\87\82Í
        // InternalDownload \82É\94C\82¹\82é\82±\82Æ\82ª\8fo\97\88\82é
-       modified := LastModified;
-       responseCode := InternalDownload( PChar( uri.URI ), modified, downResult );
+       modified                        := LastModified;
+       responseCode    := InternalDownload( PChar( uri.URI ), modified, downResult );
        try
                if responseCode = 200 then begin
                        try
@@ -680,6 +706,7 @@ begin
                                FDat.Text := string( downResult );
                                // \95Û\91
                                FDat.SaveToFile( FilePath );
+                               IsLogFile := True;
                        finally
                                uri.Free;
                                uriList.Free;
@@ -708,12 +735,9 @@ begin
        found := Pos( '.', inFileName );
        if found > 0 then
                inFileName := Copy( inFileName, 1, found - 1 );
-       if Copy( URL, Length( URL ), 1 ) = '/' then
-               uri := TIdURI.Create( URL )
-       else
-               uri := TIdURI.Create( URL + '/' );
-       uriList := TStringList.Create;
 
+       uri                     := TIdURI.Create( SubjectURL );
+       uriList := TStringList.Create;
        try
                try
                        // http://hokkaido.machi.to/hokkaidou/
@@ -741,19 +765,14 @@ procedure TMachiBBSBoardItem.EnumThread(
 var
        uri                                     : TIdURI;
        uriList                 : TStringList;
-const
-       SUBJECT_NAME    = 'subject.txt';
 begin
 
        try
                if FDat = nil then begin
                        FDat := TStringList.Create;
 
-                       if Copy( URL, Length( URL ), 1 ) = '/' then
-                               uri := TIdURI.Create( URL + SUBJECT_NAME )
-                       else
-                               uri := TIdURI.Create( URL );
-                       uriList := TStringList.Create;
+                       uri                     := TIdURI.Create( SubjectURL );
+                       uriList := TStringList.Create;
                        try
                                // \83p\83X\82ð\8eZ\8fo
                                YofUtils.ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
@@ -776,6 +795,34 @@ begin
 end;
 
 // *************************************************************************
+// \83X\83\8c\88ê\97\97\82Ì URL \82ð\8b\81\82ß\82é
+// *************************************************************************
+function       TMachiBBSBoardItem.SubjectURL : string;
+var
+       uri                     : TIdURI;
+       uriList : TStringList;
+begin
+
+       uri                     := TIdURI.Create( URL );
+       uriList := TStringList.Create;
+       try
+               if uri.Document <> SUBJECT_NAME then begin
+                       if Copy( URL, Length( URL ), 1 ) = '/' then
+                               Result := URL + SUBJECT_NAME
+                       else
+                               Result := URL + '/' + SUBJECT_NAME;
+               end else begin
+                       // \82±\82±\82É\82Í\97\88\82È\82¢\82Æ\8ev\82¤\82¯\82Ç
+                       Result := URL;
+               end;
+       finally
+               uri.Free;
+               uriList.Free;
+       end;
+
+end;
+
+// *************************************************************************
 // TBoardItem \82ª\90\90¬\82³\82ê\82½\8fê\8d\87\82Ì\8f\88\92u(TMachiBBSBoardItem \82ð\90\90¬\82·\82é)
 // *************************************************************************
 procedure BoardItemOnCreateOfTMachiBBSBoardItem(
index 7c68fc4..3ee4240 100644 (file)
@@ -40,6 +40,7 @@ type
                function        GetRes( inNo : Integer ) : string;
                function        GetHeader( inOptionalHeader : string ) : string;
                function        GetFooter( inOptionalFooter : string ) : string;
+               function        GetBoardURL : string;
 
                procedure       To2chDat( ioHTML : TStringList );
        end;
@@ -61,25 +62,18 @@ type
                function        ToThreadURL( inFileName : string ) : string;
                procedure       EnumThread( inCallBack : TBoardItemEnumThreadCallBack );
 
-       end;
-
-       // =========================================================================
-       // \83T\83u\83W\83F\83N\83g\83\8c\83R\81[\83h
-       // =========================================================================
-       TSubjectRec = record
-               FFileName: string;
-               FTitle: string;
-               FCount: Integer;
+               function        SubjectURL : string;
        end;
 
 const
        LOG_DIR                                         = 'shitaraba\';
+       SUBJECT_NAME                    = 'subject.txt';
 
        PLUGIN_NAME                             = 'ShitarabaPlugIn';
        MAJOR_VERSION                   = 1;
        MINOR_VERSION                   = 0;
        RELEASE_VERSION         = 'alpha';
-       REVISION_VERSION        = 1;
+       REVISION_VERSION        = 2;
 
 // =========================================================================
 // \8eG\97p\8aÖ\90\94
@@ -226,6 +220,7 @@ begin
        OnGetRes                        := GetRes;
        OnGetHeader             := GetHeader;
        OnGetFooter             := GetFooter;
+       OnGetBoardURL   := GetBoardURL;
 
        FilePath                        := '';
        FIsTemporary    := False;
@@ -295,6 +290,7 @@ begin
        uriList := TStringList.Create;
        try
                YofUtils.ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
+               FileName := uriList[ 5 ] + '.dat';
                // http://jbbs.shitaraba.com/bbs/read.cgi/game/1578/1067968274/l100
                // protocol://host/1/2/3/4/5/uriList.Count - 1
                if MyLogFolder = '' then begin
@@ -470,6 +466,34 @@ begin
 end;
 
 // *************************************************************************
+// \82±\82Ì ThreadItem \82ª\91®\82·\82é\94Â\82Ì URL \82ð\97v\8b\81\82³\82ê\82½
+// *************************************************************************
+function       TShitarabaThreadItem.GetBoardURL : string;
+var
+       uri                                             : TIdURI;
+       uriList                         : TStringList;
+begin
+
+       if Copy( URL, Length( URL ), 1 ) = '/' then
+               uri := TIdURI.Create( URL )
+       else
+               uri := TIdURI.Create( URL + '/' );
+       uriList := TStringList.Create;
+       try
+               YofUtils.ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
+               FileName := uriList[ 5 ] + '.dat';
+               // http://jbbs.shitaraba.com/bbs/read.cgi/game/1578/1067968274/l100
+               // http://jbbs.shitaraba.com/game/1000/subject.txt
+               Result          := CreateResultString(
+                       uri.Protocol + '://' + uri.Host + '/' + uriList[ 3 ] + '/' + uriList[ 4 ] + '/' );
+       finally
+               uri.Free;
+               uriList.Free;
+       end;
+
+end;
+
+// *************************************************************************
 // \82µ\82½\82ç\82Î\82Ì HTML \82ð 2ch \82Ì dat \8c`\8e®\82É
 // *************************************************************************
 procedure      TShitarabaThreadItem.To2chDat(
@@ -597,11 +621,8 @@ begin
        FIsTemporary    := False;
        FDat                                    := nil;
 
-       if Copy( URL, Length( URL ), 1 ) = '/' then
-               uri := TIdURI.Create( URL )
-       else
-               uri := TIdURI.Create( URL + '/' );
-       uriList := TStringList.Create;
+       uri                     := TIdURI.Create( SubjectURL );
+       uriList := TStringList.Create;
        try
                YofUtils.ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
                // http://jbbs.shitaraba.com/game/1000/subject.txt
@@ -647,18 +668,10 @@ var
        responseCode    : Longint;
        uri                                             : TIdURI;
        uriList                         : TStringList;
-const
-       SUBJECT_NAME    = 'subject.txt';
 begin
 
        Result := dsError;
 
-       conv := TPzConv.Create( nil );
-       if Copy( URL, Length( URL ), 1 ) = '/' then
-               uri := TIdURI.Create( URL + SUBJECT_NAME )
-       else
-               uri := TIdURI.Create( URL );
-       uriList := TStringList.Create;
        if FDat <> nil then begin
                try
                        FDat.Free;
@@ -666,11 +679,14 @@ begin
                except
                end;
        end;
-       FDat := TStringList.Create;
+       FDat            := TStringList.Create;
+       conv            := TPzConv.Create( nil );
+       uri                     := TIdURI.Create( SubjectURL );
+       uriList := TStringList.Create;
        // \93Æ\8e©\82É\83_\83E\83\93\83\8d\81[\83h\82â\83t\83B\83\8b\83^\83\8a\83\93\83O\82ð\8ds\82í\82È\82¢\8fê\8d\87\82Í
        // InternalDownload \82É\94C\82¹\82é\82±\82Æ\82ª\8fo\97\88\82é
-       modified := LastModified;
-       responseCode := InternalDownload( PChar( uri.URI ), modified, downResult );
+       modified                        := LastModified;
+       responseCode    := InternalDownload( PChar( uri.URI ), modified, downResult );
        try
                if responseCode = 200 then begin
                        try
@@ -692,6 +708,7 @@ begin
                                FDat.Text := conv.EucToSjis( string( downResult ) );
                                // \95Û\91
                                FDat.SaveToFile( FilePath );
+                               IsLogFile := True;
                        finally
                                conv.Free;
                                uri.Free;
@@ -721,12 +738,9 @@ begin
        found := Pos( '.', inFileName );
        if found > 0 then
                inFileName := Copy( inFileName, 1, found - 1 );
-       if Copy( URL, Length( URL ), 1 ) = '/' then
-               uri := TIdURI.Create( URL )
-       else
-               uri := TIdURI.Create( URL + '/' );
-       uriList := TStringList.Create;
 
+       uri                     := TIdURI.Create( SubjectURL );
+       uriList := TStringList.Create;
        try
                try
                        YofUtils.ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
@@ -752,19 +766,13 @@ procedure TShitarabaBoardItem.EnumThread(
 var
        uri                                     : TIdURI;
        uriList                 : TStringList;
-const
-       SUBJECT_NAME    = 'subject.txt';
 begin
 
        try
                if FDat = nil then begin
-                       FDat := TStringList.Create;
-
-                       if Copy( URL, Length( URL ), 1 ) = '/' then
-                               uri := TIdURI.Create( URL + SUBJECT_NAME )
-                       else
-                               uri := TIdURI.Create( URL );
-                       uriList := TStringList.Create;
+                       FDat            := TStringList.Create;
+                       uri                     := TIdURI.Create( SubjectURL );
+                       uriList := TStringList.Create;
                        try
                                // \83p\83X\82ð\8eZ\8fo
                                YofUtils.ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
@@ -787,6 +795,34 @@ begin
 end;
 
 // *************************************************************************
+// \83X\83\8c\88ê\97\97\82Ì URL \82ð\8b\81\82ß\82é
+// *************************************************************************
+function       TShitarabaBoardItem.SubjectURL : string;
+var
+       uri                     : TIdURI;
+       uriList : TStringList;
+begin
+
+       uri                     := TIdURI.Create( URL );
+       uriList := TStringList.Create;
+       try
+               if uri.Document <> SUBJECT_NAME then begin
+                       if Copy( URL, Length( URL ), 1 ) = '/' then
+                               Result := URL + SUBJECT_NAME
+                       else
+                               Result := URL + '/' + SUBJECT_NAME;
+               end else begin
+                       // \82±\82±\82É\82Í\97\88\82È\82¢\82Æ\8ev\82¤\82¯\82Ç
+                       Result := URL;
+               end;
+       finally
+               uri.Free;
+               uriList.Free;
+       end;
+
+end;
+
+// *************************************************************************
 // TBoardItem \82ª\90\90¬\82³\82ê\82½\8fê\8d\87\82Ì\8f\88\92u(TShitarabaBoardItem \82ð\90\90¬\82·\82é)
 // *************************************************************************
 procedure BoardItemOnCreateOfTShitarabaBoardItem(