forked from rjbs/misc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
netflix
113 lines (86 loc) · 2.41 KB
/
netflix
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/usr/bin/perl
use strict;
use warnings;
use WWW::Mechanize;
use HTML::TreeBuilder;
my $agent = WWW::Mechanize->new();
sub login {
$agent->get("http://www.netflix.com/Default");
$agent->follow("Member Sign In");
$agent->submit_form(
form_name => 'login_form',
fields => {
email => '[email protected]',
password1 => 'password',
}
);
}
sub get_to_queue {
login;
$agent->get("http://www.netflix.com/Default");
$agent->follow("Rental Queue");
}
sub title_search {
my ($title) = @_;
$agent->get("http://www.netflix.com/Default");
$agent->submit_form(
form_name => 'search',
fields => {
v1 => $title
}
);
my $tree = HTML::TreeBuilder->new;
$tree->parse($agent->content);
my @movie_tables = $tree->look_down(_tag => "div", class => "clearl")
->right
->look_down(_tag => "table")
->look_down(_tag => "table", width => 500);
for my $table (@movie_tables) {
next unless $table->depth == 9;
my $link = $table->look_down(_tag => 'span', style => qr/bold/);
print $link->as_text;
#->look_down(_tag => 'a');
print $link->attr('href');
}
}
sub dump_queue {
get_to_queue();
my $tree = HTML::TreeBuilder->new;
$tree->parse($agent->content);
my $queue = $tree->look_down(
_tag => "div",
class => "dvd-queue",
);
my @movies = $queue->look_down(
_tag => "tr",
class => "bd",
);
foreach my $movie (@movies) {
my $id_input = $movie->look_down(_tag => "input", type => "hidden");
my $title_div = $movie->look_down(_tag => "div", class => "stc");
# OR is the redactable user-editable field
# OP is the preset hidden field
# R is the remove checkbox
(my $id = $id_input->attr("name")) =~ s/\A OP//x;
my $title = $title_div->as_text();
printf "%08u: %s\n", $id, $title;
}
}
sub upload_queue {
get_to_queue();
$agent->form_name("MainQueueForm");
my $next_rank = 1;
my %movie_rank;
while (<>) {
next if /\A#/ or not /\S/;
my ($id) = /\A (\d{8}) :/x;
$id += 0;
$movie_rank{$id} = $next_rank++;
}
$agent->field("OR$_" => $movie_rank{$_}) for (keys %movie_rank);
$agent->click("updateQueueBtn");
}
my $arg = shift(@ARGV) || '';
if ($arg eq '-d') { dump_queue(); exit; }
if ($arg eq '-u') { upload_queue(); exit; }
die "usage: netflix [ -d | -u ]\n";