function GetRes( inNo : Integer ) : string;
function GetHeader( inOptionalHeader : string ) : string;
function GetFooter( inOptionalFooter : string ) : string;
+ function GetBoardURL : string;
procedure To2chDat( ioHTML : TStringList );
end;
function ToThreadURL( inFileName : string ) : string;
procedure EnumThread( inCallBack : TBoardItemEnumThreadCallBack );
+ function SubjectURL : string;
end;
// =========================================================================
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
OnGetRes := GetRes;
OnGetHeader := GetHeader;
OnGetFooter := GetFooter;
+ OnGetBoardURL := GetBoardURL;
FilePath := '';
FIsTemporary := False;
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(
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
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;
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
FDat.Text := string( downResult );
// \95Û\91¶
FDat.SaveToFile( FilePath );
+ IsLogFile := True;
finally
uri.Free;
uriList.Free;
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/
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 );
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(
function GetRes( inNo : Integer ) : string;
function GetHeader( inOptionalHeader : string ) : string;
function GetFooter( inOptionalFooter : string ) : string;
+ function GetBoardURL : string;
procedure To2chDat( ioHTML : TStringList );
end;
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
OnGetRes := GetRes;
OnGetHeader := GetHeader;
OnGetFooter := GetFooter;
+ OnGetBoardURL := GetBoardURL;
FilePath := '';
FIsTemporary := False;
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
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(
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
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;
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
FDat.Text := conv.EucToSjis( string( downResult ) );
// \95Û\91¶
FDat.SaveToFile( FilePath );
+ IsLogFile := True;
finally
conv.Free;
uri.Free;
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 );
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 );
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(