- 1
Страйко разъебахал оффтопы.
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 3
0
Страйко разъебахал оффтопы.
0
procedure TMonThread.FillCommentList;
var
HTTP:TIdHTTP;
URI:TIdURI;
S, Temp, Link, LastCm:string;
I, J:Integer;
Comm:TGComment;
Post:TGpost;
LinkList:TstringList;
CommList:TStringList;
begin
LinkList:=TStringList.Create;
CommList:=TStringList.Create;
HTTP:=TIdHTTP.Create(nil);
URI:=TIdURI.Create();
try
Temp:='';
LinkList.Sorted:=True;
LinkList.Duplicates:=DupIgnore;
HTTP.UserAgent:=uaRandom;
URI.Host:='govnokod.ru';
HTTP.Request.Host:='govnokod.ru';
HTTP.CookieManager.AddServerCookie('auth=a7dbe7abed9025a9a13ea15baa89a08f',URI);
Temp:=HTTP.LoadContent('http://govnokod.ru/comments');
Temp:=StringReplace(Temp,#13#10,'',[rfreplaceall]);
Temp:=StringReplace(Temp,#13,'',[rfreplaceall]);
Temp:=StringReplace(Temp,#10,'',[rfreplaceall]);
ParseAll('<li class="hentry">',Temp,'<div class="show-code">', LinkList);
for J:=0 to LinkList.Count-1 do
begin
if FCanceled then Exit;
Link:=ParseStr('<h2>Комментарий к <a rel="bookmark" class="entry-title" href="',LinkList[J],'"');
HTTP.ConnectTimeout:=60000;
HTTP.ReadTimeout:=60000;
Temp:='';
Temp:=HTTP.LoadContent(Link);
if HTTP.ContentSize>2000000 then Continue;
if HTTP.ResponseCode <> 200 then Continue;
if Pos('halted by an exception', Temp)>0 then Exit;
Post:=TGPost.Create;
LastCm:=Trim(ParseStr('name="comment', LinkList[J],'"'));
Post.LastCommentId:=StrToInt(LastCm);
S:=ParseStr('<a rel="bookmark" class="entry-title" href="http://govnokod.ru/', Temp,'"');
Post.Number:=StrToInt(S);
Post.Link:='http://govnokod.ru/'+S+'/';
S:=ParseStr('<p class="author">',Temp,'</p>');
S:=ParseStr('</a> <a href="http://govnokod.ru/user/',S,'</');
Post.Author:=StrAfter('>',S);
FPosts.Add(Post);
CommList.Clear;
ParseAll('<div id="comment-',Temp, '</li>', CommList);
for I:=0 to CommList.Count-1 do
begin
if FCanceled then Exit;
Comm:=TGComment.Create;
Comm.Author:=ParseStr('<strong class="entry-author"><a href="http://govnokod.ru/user/',CommList[I],'</strong>');
Comm.Author:=ParseStr('">', Comm.Author,'<');
Comm.Text:=ParseStr('<span class="comment-text">',CommList[I],'</span></div>');
Comm.Text:=DecorateText(Comm.Text);
//comment is hidded?
Comm.Hidden:=Pos('<span class="hidden-text">',CommList[I])>0;
// parse and calculate rating values.
Temp:=ParseStr('<span class="comment-vote">', CommList[I],'</span>');
//on count
S:=Trim(StrAfter('title="',Temp));
S:=Trim(StrBefore(' ',S));
Comm.OnCount:=StrToInt(S);
//against count
S:=Trim(StrAfter('и ',Temp));
S:=Trim(StrBefore(' ',S));
Comm.AgainstCount:=StrToInt(S);
Comm.Rating:=Comm.OnCount-Comm.AgainstCount;
S:=ParseStr('class="comment-vote-against" href="http://govnokod.ru/ratings/comment/',Temp,'/');
S:=Format('http://govnokod.ru/ratings/comment/%s/against',[S]);
Comm.AgainstLink:=S;
S:=ParseStr('<a class="answer" href="http://govnokod.ru/comments/', CommList[I],'"');
S:='http://govnokod.ru/comments/'+S;
Comm.AnswerLink:=S;
LastCM:=IntToStr(Post.LastCommentId);
Comm.Last:=Pos(LastCm, Comm.AnswerLink)>0;
Post.Comments.AddObject(Comm.Text, Comm);
end;
end;
finally
CommList.Free;
LinkList.Free;
HTTP.Free;
URI.Free;
end;
end;
(Флудоминусатор) Подгрузка и обработка комментариев из стока.
0
function ReplaceHTMLSpec(First, Last, Text, RepTo, RepEd:string):string;
var
P:Integer;
Temp:string;
begin
Temp:='';
while True do
begin
P:=AnsiPos(First, Text); // нашли первое вхождение тега...
if P =0 then Break;
begin
Delete(Text, P, Length(First)); // обработали тег...
Insert(RepTo, Text, P);
P:=PosEx(Last,Text,P); // ищем вхождение закрывающего тега...
if P > 0 then
begin
Delete(Text, P, Length(Last)); // обработали тег.
Insert(RepEd, Text, P);
end;
end;
end;
Result:=text;
end;
function DecorateText(S:string):string;
var
Temp:string;
begin
Result:=s;
{замена некоторых распространенных тегов}
Result:=StringReplace(Result,'<br />','',[rfreplaceall]); // движок не режет переводы строк, нет необходимости заменять <br> на #13#10.
Result:=StringReplace(Result,'"','"',[rfreplaceall]);
Result:=StringReplace(Result,'&','&',[rfreplaceall]);
Result:=StringReplace(Result,'<','<',[rfreplaceall]);
Result:=StringReplace(Result,'>','>',[rfreplaceall]);
Result:=StringReplace(Result,'<i>','[i]',[rfreplaceall]);
Result:=StringReplace(Result,'</i>','[/i]',[rfreplaceall]);
Result:=StringReplace(Result,'<b>','[b]',[rfreplaceall]);
Result:=StringReplace(Result,'</b>','[/b]',[rfreplaceall]);
Temp:='';
Result:=ReplaceHTMLSpec('<span style="color:white;">','</span>',Result,'[color=white]','[/color]');
Result:=ReplaceHTMLSpec('<span style="color:red;">','</span>',Result,'[color=red]','[/color]');
Result:=ReplaceHTMLSpec('<span style="color:blue;">','</span>', Result, '[color=blue]','[/color]');
Result:=ReplaceHTMLSpec('<span style="color:green;">','</span>',Result,'[color=green]','[/color]');
Result:=ReplaceHTMLSpec('<pre><code class="">','</code></pre>',Result,'[code]','[/code]');
Result:=ReplaceHTMLSpec('<span style="font-size:10px;">','</span>',Result,'[size=10]','[/size]');
Result:=ReplaceHTMLSpec('<span style="font-size:15px;">','</span>',Result,'[size=15]','[/size]');
Result:=ReplaceHTMLSpec('<span style="font-size:20px;">','</span>',Result,'[size=20]','[/size]');
Result:=ReplaceHTMLSpec('<span style="text-decoration:underline;">','</span>',Result,'[u]','[/u]');
Result:=ReplaceHTMLSpec('<span style="text-decoration:line-through;">','</span>',Result,'[s]','[/s]');
Result:=ReplaceHTMLSpec('<span style="text-decoration:blink;">','</span>',Result,'[blink]','[/blink]');
end;
Процедура для замены HTML-тегов на bb-codes, для их корректной обработки движком сайта,
при копировании/перепостинге комментария флудером.