| blib/lib/WWW/Lunarstorm.pm | |||
|---|---|---|---|
| Criterion | Covered | Total | % |
| statement | 10 | 12 | 83.3 |
| branch | n/a | ||
| condition | n/a | ||
| subroutine | 4 | 4 | 100.0 |
| pod | n/a | ||
| total | 14 | 16 | 87.5 |
| line | stmt | bran | cond | sub | pod | time | code |
|---|---|---|---|---|---|---|---|
| 1 | package Lunarstorm; | ||||||
| 2 | |||||||
| 3 | $VERSION = '0.02'; | ||||||
| 4 | $ABSTRACT = 'Lunarstorm (www.lunarstorm.se) interface'; | ||||||
| 5 | |||||||
| 6 | 1 | 1 | 8553 | use strict; | |||
| 1 | 4 | ||||||
| 1 | 40 | ||||||
| 7 | 1 | 1 | 1211 | use LWP::UserAgent; | |||
| 1 | 68577 | ||||||
| 1 | 40 | ||||||
| 8 | 1 | 1 | 3494 | use HTTP::Cookies; | |||
| 1 | 7515 | ||||||
| 1 | 34 | ||||||
| 9 | 1 | 1 | 1375 | use HTML::TableExtract; | |||
| 0 | |||||||
| 0 | |||||||
| 10 | use URI::Escape; | ||||||
| 11 | |||||||
| 12 | my %Defaults = ( | ||||||
| 13 | Username => undef, | ||||||
| 14 | Password => undef, | ||||||
| 15 | UserID => undef, | ||||||
| 16 | CookiePath => '.', | ||||||
| 17 | AgentIdent => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)' | ||||||
| 18 | ); | ||||||
| 19 | |||||||
| 20 | |||||||
| 21 | # Constructor | ||||||
| 22 | sub new{ | ||||||
| 23 | my ($class, %args) = @_; | ||||||
| 24 | my $self = {}; | ||||||
| 25 | bless $self, $class; | ||||||
| 26 | |||||||
| 27 | foreach my $key (keys %Defaults){ | ||||||
| 28 | $self->{$key} = defined $args{$key} ? $args{$key} : $Defaults{$key}; | ||||||
| 29 | } | ||||||
| 30 | $self->{Cookie} = HTTP::Cookies->new(file => "$self->{CookiePath}/cookies.txt", autosave => 1); | ||||||
| 31 | |||||||
| 32 | return $self; | ||||||
| 33 | } | ||||||
| 34 | |||||||
| 35 | # Destructor | ||||||
| 36 | sub DESTROY{ | ||||||
| 37 | |||||||
| 38 | } | ||||||
| 39 | |||||||
| 40 | |||||||
| 41 | # login() | ||||||
| 42 | sub login{ | ||||||
| 43 | my $self = shift; | ||||||
| 44 | |||||||
| 45 | $self->{Cookie}->load(); | ||||||
| 46 | |||||||
| 47 | my $ua = LWP::UserAgent->new(keep_alive => 1, timeout => 300); | ||||||
| 48 | $ua->agent($self->{AgentIdent}); | ||||||
| 49 | $ua->cookie_jar($self->{Cookie}); | ||||||
| 50 | |||||||
| 51 | my $req = HTTP::Request->new(POST => 'http://www.lunarstorm.se/log/log_login.asp'); | ||||||
| 52 | $req->content_type('application/x-www-form-urlencoded'); | ||||||
| 53 | $req->content("username=$self->{Username}&password=$self->{Password}&pejl_mood=0"); | ||||||
| 54 | $req->referer('http://www.lunarstorm.se/log/log_outside.asp'); | ||||||
| 55 | $req->header('Accept' => 'text/xml,application/xml,application/xhtml+xml,text/html,text/plain'); | ||||||
| 56 | $self->{Cookie}->add_cookie_header($req); | ||||||
| 57 | |||||||
| 58 | my $res = $ua->request($req); | ||||||
| 59 | |||||||
| 60 | if(not ($res->is_success || $res->code == 302)){ | ||||||
| 61 | return 0; | ||||||
| 62 | } | ||||||
| 63 | |||||||
| 64 | $self->{Cookie}->save(); | ||||||
| 65 | return 1; | ||||||
| 66 | } | ||||||
| 67 | |||||||
| 68 | |||||||
| 69 | # logout | ||||||
| 70 | sub logout{ | ||||||
| 71 | my $self = shift; | ||||||
| 72 | |||||||
| 73 | my $ua = LWP::UserAgent->new(keep_alive => 1, timeout => 300); | ||||||
| 74 | $ua->agent($self->{AgentIdent}); | ||||||
| 75 | $ua->cookie_jar($self->{Cookie}); | ||||||
| 76 | |||||||
| 77 | my $req = HTTP::Request->new(POST => 'http://www.lunarstorm.se/sys_exit.asp'); | ||||||
| 78 | $req->content_type('application/x-www-form-urlencoded'); | ||||||
| 79 | $req->referer('http://www.lunarstorm.se/log/log_outside.asp'); | ||||||
| 80 | $req->header('Accept' => 'text/xml,application/xml,application/xhtml+xml,text/html,text/plain'); | ||||||
| 81 | $self->{Cookie}->add_cookie_header($req); | ||||||
| 82 | |||||||
| 83 | my $res = $ua->request($req); | ||||||
| 84 | |||||||
| 85 | if(not ($res->is_success || $res->code == 302)){ | ||||||
| 86 | return 0; | ||||||
| 87 | } | ||||||
| 88 | |||||||
| 89 | return 1; | ||||||
| 90 | } | ||||||
| 91 | |||||||
| 92 | |||||||
| 93 | # visitors() | ||||||
| 94 | sub visitors{ | ||||||
| 95 | my $self = shift; | ||||||
| 96 | my $te = new HTML::TableExtract(depth => 2, count => 0, keep_html => 1); | ||||||
| 97 | |||||||
| 98 | my $ua = LWP::UserAgent->new(keep_alive => 1, timeout => 300); | ||||||
| 99 | $ua->agent($self->{AgentIdent}); | ||||||
| 100 | $ua->cookie_jar($self->{Cookie}); | ||||||
| 101 | |||||||
| 102 | my $req = HTTP::Request->new(POST => "http://www.lunarstorm.se/usr/usr_presentationlog.asp?username=$self->{Username}"); | ||||||
| 103 | $req->content_type('application/x-www-form-urlencoded'); | ||||||
| 104 | $req->referer('http://www.lunarstorm.se/usr/usr_presentation.asp'); | ||||||
| 105 | $req->header('Accept' => 'text/xml,application/xml,application/xhtml+xml,text/html,text/plain'); | ||||||
| 106 | $self->{Cookie}->add_cookie_header($req); | ||||||
| 107 | |||||||
| 108 | my $res = $ua->request($req); | ||||||
| 109 | |||||||
| 110 | if(not ($res->is_success || $res->code == 302)){ | ||||||
| 111 | return; | ||||||
| 112 | } | ||||||
| 113 | |||||||
| 114 | $te->parse($res->as_string); | ||||||
| 115 | my @items=(); | ||||||
| 116 | foreach my $ts ($te->table_states){ | ||||||
| 117 | foreach my $row ($ts->rows){ | ||||||
| 118 | my $item = @$row[1]; | ||||||
| 119 | my $userid=""; | ||||||
| 120 | my $nick=""; | ||||||
| 121 | my $sex="N"; | ||||||
| 122 | my $age=0; | ||||||
| 123 | my $city="N/A"; | ||||||
| 124 | my $state="N/A"; | ||||||
| 125 | |||||||
| 126 | if($item=~/userid=(%7B.*%7D)/){ | ||||||
| 127 | $userid=uri_unescape($1); | ||||||
| 128 | } | ||||||
| 129 | |||||||
| 130 | if($item=~/([\w\d_]+)\W(F|P)(\d+)/i){ | ||||||
| 131 | $nick=$1; | ||||||
| 132 | $sex=$2; | ||||||
| 133 | $age=$3; | ||||||
| 134 | } | ||||||
| 135 | $nick=~s/^\s//; | ||||||
| 136 | $nick=~s/\s$//; | ||||||
| 137 | |||||||
| 138 | my %item; | ||||||
| 139 | $item{NICK} = $nick; | ||||||
| 140 | $item{SEX} = $sex; | ||||||
| 141 | $item{AGE} = $age; | ||||||
| 142 | $item{CITY} = $city; | ||||||
| 143 | $item{STATE} = $state; | ||||||
| 144 | $item{USERID} = $userid; | ||||||
| 145 | push(@items, \%item); | ||||||
| 146 | } | ||||||
| 147 | } | ||||||
| 148 | |||||||
| 149 | shift(@items); | ||||||
| 150 | return @items; | ||||||
| 151 | } | ||||||
| 152 | |||||||
| 153 | |||||||
| 154 | # guestbook | ||||||
| 155 | sub guestbook{ | ||||||
| 156 | my ($self, $page, $userid) = @_; | ||||||
| 157 | |||||||
| 158 | $userid = $self->{UserID} if not defined $userid; | ||||||
| 159 | $page = 1 if not defined $page; | ||||||
| 160 | |||||||
| 161 | my $te = new HTML::TableExtract(depth => 2, count => 0, keep_html => 1); | ||||||
| 162 | |||||||
| 163 | my $ua = LWP::UserAgent->new(keep_alive => 1, timeout => 300); | ||||||
| 164 | $ua->agent($self->{AgentIdent}); | ||||||
| 165 | $ua->cookie_jar($self->{Cookie}); | ||||||
| 166 | |||||||
| 167 | my $req = HTTP::Request->new(POST => "http://www.lunarstorm.se/usr/gst_guestbook.asp?userid=$userid&page=$page"); | ||||||
| 168 | $req->content_type('application/x-www-form-urlencoded'); | ||||||
| 169 | $req->referer('http://www.lunarstorm.se/usr/usr_presentation.asp'); | ||||||
| 170 | $req->header('Accept' => 'text/xml,application/xml,application/xhtml+xml,text/html,text/plain'); | ||||||
| 171 | $self->{Cookie}->add_cookie_header($req); | ||||||
| 172 | |||||||
| 173 | my $res = $ua->request($req); | ||||||
| 174 | |||||||
| 175 | if(not ($res->is_success || $res->code == 302)){ | ||||||
| 176 | return; | ||||||
| 177 | } | ||||||
| 178 | |||||||
| 179 | $te->parse($res->as_string); | ||||||
| 180 | my @gb_items=(); | ||||||
| 181 | foreach my $ts ($te->table_states){ | ||||||
| 182 | foreach my $row ($ts->rows){ | ||||||
| 183 | my $gb_item = @$row[2]; | ||||||
| 184 | if(($gb_item=~/\(.*(obesvarat|oläst)\)/) || ($userid ne $self->{UserID})){ | ||||||
| 185 | my $userid_a; | ||||||
| 186 | my $guestnr=0; | ||||||
| 187 | my $nick=""; | ||||||
| 188 | my $sex="N"; | ||||||
| 189 | my $age=0; | ||||||
| 190 | my $city="N/A"; | ||||||
| 191 | my $state="N/A"; | ||||||
| 192 | |||||||
| 193 | if($gb_item=~/userid=({[\dA-F-]*})/){ | ||||||
| 194 | $userid_a=$1; | ||||||
| 195 | } | ||||||
| 196 | if($gb_item=~/guestnr=(\d*)/){ | ||||||
| 197 | $guestnr=$1; | ||||||
| 198 | } | ||||||
| 199 | |||||||
| 200 | $gb_item=~s/ /\n/igs; |
||||||
| 201 | $gb_item=~s/<(?:[^>'"]*|(['"]).*?\1)*>//gs; | ||||||
| 202 | |||||||
| 203 | my @tmp = split(/\n/, $gb_item); | ||||||
| 204 | shift(@tmp); | ||||||
| 205 | if($tmp[0]=~/([\w\d_]+)\W(F|P)(\d+) från (.+) i (.+) län/i){ | ||||||
| 206 | $nick=$1; $sex=$2; $age=$3; | ||||||
| 207 | $city=$4; $state=$5; | ||||||
| 208 | } | ||||||
| 209 | $nick=~s/^\s//; | ||||||
| 210 | $nick=~s/\s$//; | ||||||
| 211 | shift(@tmp); | ||||||
| 212 | $gb_item=join(' ', @tmp); | ||||||
| 213 | $gb_item=~s/^\s+//g; | ||||||
| 214 | $gb_item=~s/\s+$//g; | ||||||
| 215 | |||||||
| 216 | my %item; | ||||||
| 217 | $item{NICK} = $nick; | ||||||
| 218 | $item{SEX} = $sex; | ||||||
| 219 | $item{AGE} = $age; | ||||||
| 220 | $item{CITY} = $city; | ||||||
| 221 | $item{STATE} = $state; | ||||||
| 222 | $item{USERID} = $userid_a; | ||||||
| 223 | $item{GUESTNR} = $guestnr; | ||||||
| 224 | $item{TEXT} = $gb_item; | ||||||
| 225 | push(@gb_items, \%item); | ||||||
| 226 | } | ||||||
| 227 | } | ||||||
| 228 | } | ||||||
| 229 | |||||||
| 230 | return @gb_items; | ||||||
| 231 | } | ||||||
| 232 | |||||||
| 233 | |||||||
| 234 | # sign_guestbook | ||||||
| 235 | sub sign_guestbook{ | ||||||
| 236 | my ($self, $nick, $userid, $guestnr, $msg) = @_; | ||||||
| 237 | |||||||
| 238 | if(not $userid=~/{.*}/){ | ||||||
| 239 | $userid = uri_unescape($userid); | ||||||
| 240 | } | ||||||
| 241 | |||||||
| 242 | $msg = uri_escape($msg); | ||||||
| 243 | |||||||
| 244 | my $ua = LWP::UserAgent->new(keep_alive => 1, timeout => 300); | ||||||
| 245 | $ua->agent($self->{AgentIdent}); | ||||||
| 246 | $ua->cookie_jar($self->{Cookie}); | ||||||
| 247 | |||||||
| 248 | my $req = HTTP::Request->new(POST => 'http://www.lunarstorm.se/usr/gst_store.asp'); | ||||||
| 249 | $req->content_type('application/x-www-form-urlencoded'); | ||||||
| 250 | $req->content("guestnr=$guestnr&userid=$userid&username=$nick&source=popup&msgbody=$msg"); | ||||||
| 251 | $req->referer("http://www.lunarstorm.se/usr/gst_compose.asp?guestnr=$guestnr&userid=$userid&username=$nick"); | ||||||
| 252 | $req->header('Accept' => 'text/xml,application/xml,application/xhtml+xml,text/html,text/plain'); | ||||||
| 253 | $self->{Cookie}->add_cookie_header($req); | ||||||
| 254 | |||||||
| 255 | my $res = $ua->request($req); | ||||||
| 256 | |||||||
| 257 | if(not ($res->is_success || $res->code == 302)){ | ||||||
| 258 | return 0; | ||||||
| 259 | } | ||||||
| 260 | |||||||
| 261 | return 1; | ||||||
| 262 | } | ||||||
| 263 | |||||||
| 264 | |||||||
| 265 | # relations | ||||||
| 266 | sub relations{ | ||||||
| 267 | my ($self, $userid) = @_; | ||||||
| 268 | |||||||
| 269 | if(not $userid=~/{.*}/){ | ||||||
| 270 | $userid = uri_unescape($userid); | ||||||
| 271 | } | ||||||
| 272 | |||||||
| 273 | my $te = new HTML::TableExtract(depth => 2, count => 1, keep_html => 1); | ||||||
| 274 | |||||||
| 275 | my $ua = LWP::UserAgent->new(keep_alive => 1, timeout => 300); | ||||||
| 276 | $ua->agent($self->{AgentIdent}); | ||||||
| 277 | $ua->cookie_jar($self->{Cookie}); | ||||||
| 278 | |||||||
| 279 | my $req = HTTP::Request->new(POST => "http://www.lunarstorm.se/usr/fri_friends.asp?userid=$userid"); | ||||||
| 280 | $req->content_type('application/x-www-form-urlencoded'); | ||||||
| 281 | $req->referer('http://www.lunarstorm.se/usr/usr_presentation.asp'); | ||||||
| 282 | $req->header('Accept' => 'text/xml,application/xml,application/xhtml+xml,text/html,text/plain'); | ||||||
| 283 | $self->{Cookie}->add_cookie_header($req); | ||||||
| 284 | |||||||
| 285 | my $res = $ua->request($req); | ||||||
| 286 | |||||||
| 287 | if(not ($res->is_success || $res->code == 302)){ | ||||||
| 288 | return; | ||||||
| 289 | } | ||||||
| 290 | |||||||
| 291 | $te->parse($res->as_string); | ||||||
| 292 | my @friends=(); | ||||||
| 293 | foreach my $ts ($te->table_states){ | ||||||
| 294 | foreach my $row ($ts->rows){ | ||||||
| 295 | my $friend = @$row[2]; | ||||||
| 296 | my $userid; | ||||||
| 297 | if($friend=~/userid=({[\dA-F-]*})/i){ | ||||||
| 298 | $userid=$1; | ||||||
| 299 | } | ||||||
| 300 | |||||||
| 301 | $friend=~s/<(?:[^>'"]*|(['"]).*?\1)*>//gs; | ||||||
| 302 | |||||||
| 303 | if($friend=~/([\w\d_]+)\W(F|P)(\d+)/i){ | ||||||
| 304 | my $nick=$1; | ||||||
| 305 | my $sex="N"; | ||||||
| 306 | my $age=0; | ||||||
| 307 | my $city="N/A"; | ||||||
| 308 | my $state="N/A"; | ||||||
| 309 | $nick=~s/^\s//; | ||||||
| 310 | $nick=~s/\s$//; | ||||||
| 311 | |||||||
| 312 | my %item; | ||||||
| 313 | $item{NICK} = $nick; | ||||||
| 314 | $item{SEX} = $sex; | ||||||
| 315 | $item{AGE} = $age; | ||||||
| 316 | $item{CITY} = $city; | ||||||
| 317 | $item{STATE} = $state; | ||||||
| 318 | $item{USERID} = $userid; | ||||||
| 319 | push(@friends, \%item); | ||||||
| 320 | } | ||||||
| 321 | } | ||||||
| 322 | } | ||||||
| 323 | |||||||
| 324 | return @friends; | ||||||
| 325 | } | ||||||
| 326 | |||||||
| 327 | |||||||
| 328 | # scribbles | ||||||
| 329 | sub scribbles{ | ||||||
| 330 | my $self = shift; | ||||||
| 331 | |||||||
| 332 | my $te = new HTML::TableExtract(depth => 2, count => 0, keep_html => 1); | ||||||
| 333 | |||||||
| 334 | my $ua = LWP::UserAgent->new(keep_alive => 1, timeout => 300); | ||||||
| 335 | $ua->agent($self->{AgentIdent}); | ||||||
| 336 | $ua->cookie_jar($self->{Cookie}); | ||||||
| 337 | |||||||
| 338 | my $req = HTTP::Request->new(POST => "http://www.lunarstorm.se/bbs/bbs_main.asp"); | ||||||
| 339 | $req->content_type('application/x-www-form-urlencoded'); | ||||||
| 340 | $req->referer('http://www.lunarstorm.se/usr/usr_presentation.asp'); | ||||||
| 341 | $req->header('Accept' => 'text/xml,application/xml,application/xhtml+xml,text/html,text/plain'); | ||||||
| 342 | $self->{Cookie}->add_cookie_header($req); | ||||||
| 343 | |||||||
| 344 | my $res = $ua->request($req); | ||||||
| 345 | |||||||
| 346 | if(not ($res->is_success || $res->code == 302)){ | ||||||
| 347 | return; | ||||||
| 348 | } | ||||||
| 349 | |||||||
| 350 | $te->parse($res->as_string); | ||||||
| 351 | |||||||
| 352 | my @scribbles=(); | ||||||
| 353 | foreach my $ts ($te->table_states){ | ||||||
| 354 | foreach my $row ($ts->rows){ | ||||||
| 355 | my $scribble = @$row[2]; | ||||||
| 356 | my $userid=""; | ||||||
| 357 | my $nick=""; | ||||||
| 358 | my $sex="N"; | ||||||
| 359 | my $age=0; | ||||||
| 360 | my $city="N/A"; | ||||||
| 361 | my $state="N/A"; | ||||||
| 362 | |||||||
| 363 | if($scribble=~/userid=({[\dA-F-]*})/){ | ||||||
| 364 | $userid=$1; | ||||||
| 365 | } | ||||||
| 366 | |||||||
| 367 | $scribble=~s/ /\n/igs; |
||||||
| 368 | $scribble=~s/<(?:[^>'"]*|(['"]).*?\1)*>//gs; | ||||||
| 369 | |||||||
| 370 | if($scribble=~/([\w\d_]+)\W(F|P)(\d+) från (.+) i (.+) län/i){ | ||||||
| 371 | $nick=$1; $sex=$2; $age=$3; | ||||||
| 372 | $city=$4; $state=$5; | ||||||
| 373 | } | ||||||
| 374 | $nick=~s/^\s//; | ||||||
| 375 | $nick=~s/\s$//; | ||||||
| 376 | |||||||
| 377 | my @tmp = split(/\n/, $scribble); | ||||||
| 378 | shift(@tmp); | ||||||
| 379 | $scribble=join(' ', @tmp); | ||||||
| 380 | $scribble=~s/^\s+//g; | ||||||
| 381 | $scribble=~s/\s+$//g; | ||||||
| 382 | |||||||
| 383 | my %item; | ||||||
| 384 | $item{NICK} = $nick; | ||||||
| 385 | $item{SEX} = $sex; | ||||||
| 386 | $item{AGE} = $age; | ||||||
| 387 | $item{CITY} = $city; | ||||||
| 388 | $item{STATE} = $state; | ||||||
| 389 | $item{USERID} = $userid; | ||||||
| 390 | $item{TEXT} = $scribble; | ||||||
| 391 | push(@scribbles, \%item); | ||||||
| 392 | } | ||||||
| 393 | } | ||||||
| 394 | |||||||
| 395 | return @scribbles; | ||||||
| 396 | } | ||||||
| 397 | |||||||
| 398 | |||||||
| 399 | # scribble | ||||||
| 400 | sub scribble{ | ||||||
| 401 | my ($self, $scribble) = @_; | ||||||
| 402 | |||||||
| 403 | $scribble = uri_escape($scribble); | ||||||
| 404 | |||||||
| 405 | my $ua = LWP::UserAgent->new(keep_alive => 1, timeout => 300); | ||||||
| 406 | $ua->agent($self->{AgentIdent}); | ||||||
| 407 | $ua->cookie_jar($self->{Cookie}); | ||||||
| 408 | |||||||
| 409 | my $req = HTTP::Request->new(POST => 'http://www.lunarstorm.se/bbs/bbs_db.asp?status=insert'); | ||||||
| 410 | $req->content_type('application/x-www-form-urlencoded'); | ||||||
| 411 | $req->content("body=$scribble"); | ||||||
| 412 | $req->referer("http://www.lunarstorm.se/bbs/bbs_main.asp"); | ||||||
| 413 | $req->header('Accept' => 'text/xml,application/xml,application/xhtml+xml,text/html,text/plain'); | ||||||
| 414 | $self->{Cookie}->add_cookie_header($req); | ||||||
| 415 | |||||||
| 416 | my $res = $ua->request($req); | ||||||
| 417 | |||||||
| 418 | if(not ($res->is_success || $res->code == 302)){ | ||||||
| 419 | return 0; | ||||||
| 420 | } | ||||||
| 421 | |||||||
| 422 | return 1; | ||||||
| 423 | } | ||||||
| 424 | |||||||
| 425 | |||||||
| 426 | # relations_status | ||||||
| 427 | sub relations_status{ | ||||||
| 428 | my $self = shift; | ||||||
| 429 | |||||||
| 430 | my $te = new HTML::TableExtract(depth => 2, count => 0, keep_html => 1); | ||||||
| 431 | |||||||
| 432 | my $ua = LWP::UserAgent->new(keep_alive => 1, timeout => 300); | ||||||
| 433 | $ua->agent($self->{AgentIdent}); | ||||||
| 434 | $ua->cookie_jar($self->{Cookie}); | ||||||
| 435 | |||||||
| 436 | my $req = HTTP::Request->new(GET => 'http://www.lunarstorm.se/usr/fri_status.asp'); | ||||||
| 437 | $req->content_type('application/x-www-form-urlencoded'); | ||||||
| 438 | $req->referer('http://www.lunarstorm.se/usr/usr_presentation.asp'); | ||||||
| 439 | $req->header('Accept' => 'text/xml,application/xml,application/xhtml+xml,text/html,text/plain'); | ||||||
| 440 | $self->{Cookie}->add_cookie_header($req); | ||||||
| 441 | |||||||
| 442 | my $res = $ua->request($req); | ||||||
| 443 | |||||||
| 444 | if(not ($res->is_success || $res->code == 302)){ | ||||||
| 445 | return 0; | ||||||
| 446 | } | ||||||
| 447 | |||||||
| 448 | |||||||
| 449 | $te->parse($res->as_string); | ||||||
| 450 | |||||||
| 451 | my @relations=(); | ||||||
| 452 | foreach my $ts ($te->table_states){ | ||||||
| 453 | foreach my $row ($ts->rows){ | ||||||
| 454 | my $relation = @$row[0]; | ||||||
| 455 | my $userid=""; | ||||||
| 456 | my $nick=""; | ||||||
| 457 | my $sex="N"; | ||||||
| 458 | my $age=0; | ||||||
| 459 | my $city="N/A"; | ||||||
| 460 | my $state="N/A"; | ||||||
| 461 | my $type=""; | ||||||
| 462 | |||||||
| 463 | $relation=uri_unescape($relation); | ||||||
| 464 | |||||||
| 465 | if($relation=~/UserID=({[\dA-F-]*})/){ | ||||||
| 466 | $userid=$1; | ||||||
| 467 | } | ||||||
| 468 | |||||||
| 469 | $relation=~s/<(?:[^>'"]*|(['"]).*?\1)*>//gs; | ||||||
| 470 | |||||||
| 471 | if($relation=~/([\w\d_]+)\W(F|P)(\d+)/i){ | ||||||
| 472 | $nick=$1; | ||||||
| 473 | $sex=$2; | ||||||
| 474 | $age=$3; | ||||||
| 475 | } | ||||||
| 476 | $nick=~s/^\s//; | ||||||
| 477 | $nick=~s/\s$//; | ||||||
| 478 | |||||||
| 479 | if($relation=~/skapa relationen.(.+).med/){ | ||||||
| 480 | $type=$1; | ||||||
| 481 | }elsif($relation=~/hellre skapa relationen.(.+)\./){ | ||||||
| 482 | $type=$1; | ||||||
| 483 | }elsif($relation=~/avslutat/){ | ||||||
| 484 | $type="CLOSED"; | ||||||
| 485 | } | ||||||
| 486 | |||||||
| 487 | my %item; | ||||||
| 488 | $item{NICK} = $nick; | ||||||
| 489 | $item{SEX} = $sex; | ||||||
| 490 | $item{AGE} = $age; | ||||||
| 491 | $item{CITY} = $city; | ||||||
| 492 | $item{STATE} = $state; | ||||||
| 493 | $item{USERID} = $userid; | ||||||
| 494 | $item{TYPE} = $type; | ||||||
| 495 | if($nick){ | ||||||
| 496 | push(@relations, \%item); | ||||||
| 497 | } | ||||||
| 498 | } | ||||||
| 499 | } | ||||||
| 500 | |||||||
| 501 | return @relations; | ||||||
| 502 | } | ||||||
| 503 | |||||||
| 504 | |||||||
| 505 | # accept_relation | ||||||
| 506 | sub accept_relation{ | ||||||
| 507 | my ($self, $relation) = @_; | ||||||
| 508 | |||||||
| 509 | my $ua = LWP::UserAgent->new(keep_alive => 1, timeout => 300); | ||||||
| 510 | $ua->agent($self->{AgentIdent}); | ||||||
| 511 | $ua->cookie_jar($self->{Cookie}); | ||||||
| 512 | |||||||
| 513 | my $req; | ||||||
| 514 | if($relation->{TYPE} ne "CLOSED"){ | ||||||
| 515 | $req=HTTP::Request->new(POST => "http://www.lunarstorm.se/usr/fri_registration.asp?UserID=$relation->{USERID}&Action=ac&Part=3"); | ||||||
| 516 | }else{ | ||||||
| 517 | $req=HTTP::Request->new(POST => "http://www.lunarstorm.se/usr/fri_datamaster.asp?DMUserID=$relation->{USERID}&orgin=/usr/fri_status.asp&qs=&status=verify"); | ||||||
| 518 | } | ||||||
| 519 | $req->content_type('application/x-www-form-urlencoded'); | ||||||
| 520 | if($relation->{TYPE} ne "CLOSED"){ | ||||||
| 521 | $req->content("Stuff=1&Diary=1&Category=&Relation="); | ||||||
| 522 | } | ||||||
| 523 | $req->referer("http://www.lunarstorm.se/usr/fri_registration.asp"); | ||||||
| 524 | $req->header('Accept' => 'text/xml,application/xml,application/xhtml+xml,text/html,text/plain'); | ||||||
| 525 | $self->{Cookie}->add_cookie_header($req); | ||||||
| 526 | |||||||
| 527 | my $res = $ua->request($req); | ||||||
| 528 | |||||||
| 529 | if(not ($res->is_success || $res->code == 302)){ | ||||||
| 530 | return 0; | ||||||
| 531 | } | ||||||
| 532 | |||||||
| 533 | if($relation->{TYPE} ne "CLOSED"){ | ||||||
| 534 | $req=HTTP::Request->new(POST => "http://www.lunarstorm.se/usr/fri_registration.asp?UserID=$relation->{USERID}&Action=ac&Part=4"); | ||||||
| 535 | $req->content("COMMENT=&Category=&Relation=&Stuff=1&Diary=1"); | ||||||
| 536 | $res = $ua->request($req); | ||||||
| 537 | if(not ($res->is_success || $res->code == 302)){ | ||||||
| 538 | return 0; | ||||||
| 539 | } | ||||||
| 540 | } | ||||||
| 541 | |||||||
| 542 | return 1; | ||||||
| 543 | } | ||||||
| 544 | |||||||
| 545 | 1; | ||||||
| 546 | |||||||
| 547 | __END__ |