1 # WWW::SourceForge.JP::Wiki
3 # This code is under GPL.
8 use HTTP::Request::Common;
13 package WWW::SourceForgeJP::Wiki;
21 '_temp_page' => 'www-sfjp-wik-itemp',
24 return bless $self, $class;
29 return $self->{_temp_page};
37 sub _get_wikipage_url {
39 my $project = shift @_;
40 my $page_name = shift @_;
42 return "http://sourceforge.jp/projects/$project/wiki/$page_name";
47 my $project = shift @_;
49 my $url = $self->_get_wikipage_url( $project, $self->_temp_page );
50 $url .= '?action=update';
52 my $ua = $self->sf->lwp_ua;
54 'text' => '[[TitleIndex]]',
59 my $resp = $ua->post( $url, $req_form );
61 my $page_list_ref = [];
63 my $content_string = $resp->content;
65 $content_string =~ s/\n//mg;
66 $content_string =~ s/\r//mg;
67 $content_string =~ s/^.*<div[^>]*class="wiki-content"[^>]*>//;
68 if( $content_string =~ m/<ul>(.*?)<\/ul>/m ) {
71 if( $list_str =~ s/<li>(.*?)(<li>|<\/ul>|<\/li>)/$2/m ) {
74 # print $1, " - ", $2, "\n";
75 if( $item =~ m/href=["'].*\/(.*?)["']/ ) {
77 push @$page_list_ref, $page_name;
85 return $page_list_ref;
91 my $project = shift @_;
92 my $page_name = shift @_;
94 my $url = $self->_get_wikipage_url( $project, $page_name );
95 $url .= '?action=edit';
97 my $ua = $self->sf->lwp_ua;
98 my $resp = $ua->get( $url );
100 my $content = $resp->content;
102 $content =~ s/.*<textarea.*?id="text".*?>//s;
103 if( $content =~ m/(.*)<\/textarea>/s ) {
106 $content = HTML::Entities::decode_entities($content);
107 return Encode::decode_utf8($content);
115 my $project = $args{project};
116 my $page_name = $args{page};
117 my $text = $args{text};
121 $title = $args{title};
124 if( $args{comment} ) {
125 $comment = $args{comment};
128 # print "$project - $page_name - $text - $comment";
130 my $url = $self->_get_wikipage_url( $project, $page_name );
131 $url .= '?action=update';
133 my $ua = $self->sf->lwp_ua;
136 'comment' => $comment,
141 my $resp = $ua->post( $url, $req_form );
142 if( $resp->is_error ) {
149 # delete_page( project_name, page_name )
152 my $project = shift @_;
153 my $page_name = shift @_;
155 my $url = $self->_get_wikipage_url( $project, $page_name );
156 $url = "$url?action=delete";
162 my $ua = $self->sf->lwp_ua;
163 my $resp = $ua->post( $url, $req_form );
165 if( $resp->is_error ) {
173 # post_attachment( <project_name>, <page_name>, <filename1>, <filename2>,... )
174 sub post_attachment {
178 my $project = $args{project};
179 my $page_name = $args{page};
180 my $file_name = $args{file};
183 my $url = $self->_get_wikipage_url( $project, $page_name );
184 $url .= '/attach/!upload';
186 my $ua = $self->sf->lwp_ua;
188 my $req = HTTP::Request::Common::POST $url, Content_Type => 'form-data',
189 Content => [ new_attach => ["$file_name"],
191 commit => utf8::decode("アップロード"),
194 my $resp = $ua->request( $req );
196 if( $resp->is_error ) {
197 print "error:", $resp->message, "\n";
198 return 0; #print "upload $file_name: failed.\n";
200 return 1; #print "upload $file_name: succeed.\n";