Changeset 174
- Timestamp:
- 01/14/06 20:36:25 (3 years ago)
- Files:
-
- 1 modified
-
AddToHatenaBookmark/trunk/AddToHatenaBookmark.pl (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
AddToHatenaBookmark/trunk/AddToHatenaBookmark.pl
r169 r174 13 13 use base 'MT::Plugin'; 14 14 use vars qw($VERSION); 15 $VERSION = '0.0 1';15 $VERSION = '0.02'; 16 16 17 17 my $plugin = MT::Plugin::AddToHatenaBookmark->new({ … … 34 34 5, $plugin, \&post); 35 35 36 use MT::Util qw(encode_html);37 36 use MT::Log; 38 37 use MT::I18N; … … 42 41 sub post { 43 42 my ($eh, $app, $obj) = @_; 44 return if !UNIVERSAL::isa($obj, 'MT::Entry') || $obj->status != MT::Entry::RELEASE();43 return unless $obj->isa('MT::Entry') && ($obj->status == MT::Entry::RELEASE()); 45 44 46 45 my $blog_id = $obj->blog_id; 47 46 48 my $config = $plugin->get_config_hash( "blog:$blog_id") or return;47 my $config = $plugin->get_config_hash('blog:' . $blog_id) or return; 49 48 my $username = $config->{hatena_username} or return; 50 49 my $password = $config->{hatena_password} or return; 51 52 my $comment = $obj->keywords ? keywords2comment($obj->keywords) : '';53 if ($comment) {54 my $enc = MT::ConfigMgr->instance->PublishCharset || 'utf-8';55 $comment = MT::I18N::encode_text($comment, $enc, 'utf-8');56 }57 50 58 51 my $link = XML::Atom::Link->new; … … 64 57 $entry->title('dummy'); 65 58 $entry->add_link($link); 66 $entry->summary($comment) if $comment;67 59 68 60 my $hatena = XML::Atom::Client->new; 69 61 $hatena->username($username); 70 62 $hatena->password($password); 63 71 64 my $editURI = $hatena->createEntry('http://b.hatena.ne.jp/atom/post', $entry); 65 unless ($editURI) { 66 add_log($blog_id, 'createEntry failed: ' . $hatena->errstr); 67 return; 68 } 72 69 70 my $entry_old = $hatena->getEntry($editURI); 71 unless ($entry_old) { 72 add_log($blog_id, 'getEntry failed: ' . $hatena->errstr); 73 return; 74 } 75 76 my $title_old = $entry_old->title; 77 my $summary_old = extract_summary($entry_old); 78 79 my $title_new = $obj->blog->name . ': ' . $obj->title; 80 my $summary_new = keywords2summary($obj->keywords) || ''; 81 82 my $enc = MT::ConfigMgr->instance->PublishCharset || 'utf-8'; 83 $title_new = MT::I18N::encode_text($title_new, $enc, 'utf-8') 84 if $title_new; 85 $summary_new = MT::I18N::encode_text($summary_new, $enc, 'utf-8') 86 if $summary_new; 87 88 my $msg; 89 if ($title_old eq $title_new && $summary_old eq $summary_new) { 90 $msg = 'updateEntry skipped: ' . $editURI; 91 } else { 92 my $entry_new = XML::Atom::Entry->new; 93 $entry_new->title($title_new); 94 $entry_new->summary($summary_new) if $summary_new; 95 96 $msg = $hatena->updateEntry($editURI, $entry_new) ? 97 'updateEntry suceeded: ' . $editURI : 98 'updateEntry failed: ' . $hatena->errstr; 99 } 100 add_log($blog_id, $msg); 101 } 102 103 sub add_log { 104 my ($blog_id, $message) = @_; 73 105 my $log = MT::Log->new; 74 106 $log->blog_id($blog_id); 75 $log->message($editURI ? 76 'Hatena request suceeded: ' . $editURI : 77 'Hatena request failed: ' . $hatena->errstr); 107 $log->message('[' . $plugin->name . '] ' . $message); 78 108 $log->save or die $log->errstr; 79 109 } 80 110 81 sub keywords2comment { 111 # extract summary text from a hatena entry 112 sub extract_summary { 113 my ($entry) = @_; 114 my $summary = ''; 115 my $dc = XML::Atom::Namespace->new(dc => 'http://purl.org/dc/elements/1.1/'); 116 for my $subject ($entry->getlist($dc, 'subject')) { 117 $summary .= '[' . $subject . ']'; 118 } 119 $summary; 120 } 121 122 # convert MT keywords to summary text 123 sub keywords2summary { 82 124 my ($str) = @_; 83 125 return '' unless $str; … … 86 128 return '' unless $str; 87 129 88 my $ comment= '';130 my $summary = ''; 89 131 if ($str =~ m/[;,|]/) { 90 # tagsseparated by non-whitespaces132 # separated by non-whitespaces 91 133 while ($str =~ m/(\[[^]]+\]|"[^"]+"|'[^']+'|[^;,|]+)/g) { 92 134 my $tag = $1; 93 135 $tag =~ s/(^[\["'\s;,|]+|[\]"'\s;,|]+$)//g; 94 $ comment.= '[' . $tag . ']' if $tag;136 $summary .= '[' . $tag . ']' if $tag; 95 137 } 96 138 } else { 97 # tagsseparated by whitespaces139 # separated by whitespaces 98 140 while ($str =~ m/(\[[^]]+\]|"[^"]+"|'[^']+'|[^\s]+)/g) { 99 141 my $tag = $1; 100 142 $tag =~ s/(^[\["'\s]+|[\]"'\s]+$)//g; 101 $ comment.= '[' . $tag . ']' if $tag;143 $summary .= '[' . $tag . ']' if $tag; 102 144 } 103 145 } 104 $ comment;146 $summary; 105 147 } 106 148
![(please configure the [header_logo] section in trac.ini)](/public/chrome/common/trac_banner.png)