Changeset 291 for trunk/DashboardTwitter
- Timestamp:
- 08/30/07 07:23:09 (2 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/DashboardTwitter/plugins/DashboardTwitter/DashboardTwitter.pl
r273 r291 17 17 <script type="text/javascript"> 18 18 <!-- 19 function update() { 20 TC.Client.call({ 21 'load': function(r) { 22 var data = eval("(" + r.responseText + ")"); 23 data = data['result']; 24 data = eval("(" + data + ")"); 25 var panel = document.getElementById('data-list'); 26 if (data && panel) { 27 var array = new Array(); 28 for (idx in data) { 29 if (!data.hasOwnProperty(idx)) continue; 30 row = data[idx]; 31 text = '<li><img src="' + row.image_url + '" width="16" height="16" /><a href="' + row.url + '">' + row.screen_name + '</a> ' + row.text + '</li>'; 32 array.push(text); 33 } 34 panel.innerHTML = '<ul>' + array.join('') + '</ul>'; 35 } 36 }, 37 'error': function(r) { alert(r.responseText); }, 38 'method': 'POST', 39 'uri': '<mt:var name="script_url">', 40 'arguments': { 41 '__mode' : 'dashboardtwitter_update', 42 'blog_id' : '<mt:var name="blog_id">' 43 } 44 }); 45 return false; 46 } 47 19 48 function twit() { 20 49 var t = getByID('twit_text'); … … 44 73 <div id="recent-panel" class="<mt:unless name="tab" eq="recent">hidden</mt:unless>" mt:tab-content="recent"> 45 74 <mt:if name="data"> 75 <div id="data-list"><ul> 46 76 <mt:loop name="data"> 47 <ul> 48 <li><mt:var name="text"></li> 49 </ul> 77 <li><img src="<mt:var name="image_url"> width="16" height="16" /><a href="<mt:var name="url">"><mt:var name="screen_name"></a> <mt:var name="text"></li> 50 78 </mt:loop> 79 </ul></div> 51 80 <mt:else> 52 81 <mt:if name="error"><mt:var name="error"></mt:if> 53 82 </mt:if> 83 <a href="javascript:void(0)" onclick="update(); return false;" 84 title="<__trans phrase="Update">"><__trans phrase="Update"></a> 54 85 </div> 55 86 <div id="twit-panel" class="<mt:unless name="tab" eq="twit">hidden</mt:unless>" mt:tab-content="twit"> … … 70 101 name => 'DashboardTwitter', 71 102 author_link => 'http://www.luckypines.com/mt/', 72 system_config_template => <<TMPL,103 blog_config_template => <<TMPL, 73 104 <dl> 74 105 <dt>Twitter username</dt> 75 <dd><input name="twitter_username" size="40" /></dd>106 <dd><input name="twitter_username" size="40" value="<mt:var name="twitter_username">" /></dd> 76 107 <dt>Twitter password</dt> 77 <dd><input type="password" name="twitter_password" size="40" /></dd>108 <dd><input type="password" name="twitter_password" size="40" value="<mt:var name="twitter_password">" /></dd> 78 109 </dl> 79 110 TMPL … … 102 133 }, 103 134 methods => { 104 dashboardtwitter_twit => \&_hdlr_twit, 135 dashboardtwitter_twit => \&_hdlr_twit, 136 dashboardtwitter_update => \&_js_hdlr_recent, 105 137 }, 106 138 } … … 116 148 my ($tmpl, $param) = @_; 117 149 150 _recent_twitter($app, $param); 151 return 1; 152 } 153 154 sub _js_hdlr_recent { 155 my $app = shift; 156 my ($tmpl, $param) = @_; 157 158 $param ||= {}; 159 _recent_twitter($app, $param); 160 my $data = $param->{data}; 161 $app->json_result(JSON::objToJson($data)); 162 } 163 164 sub _recent_twitter { 165 my ($app, $param) = @_; 166 118 167 $param->{tab} = 'recent'; 119 168 120 my $config = $plugin->get_config_hash('system'); 169 my $blog_id = $app->param('blog_id'); 170 unless ($blog_id) { 171 $param->{error} = 'blog_id required.'; 172 return 1; 173 } 174 my $scope = "blog:$blog_id"; 175 176 my $config = $plugin->get_config_hash($scope); 121 177 my $username = $config->{twitter_username}; 122 178 my $password = $config->{twitter_password}; … … 125 181 my $req = HTTP::Request->new( GET => $recent_url ); 126 182 $req->authorization_basic($username, $password); 183 if ( my $etag = $config->{twitter_etag} ) { 184 $req->header( If_None_Match => $etag ); 185 } 127 186 my $res = $ua->request($req); 128 return unless $res->is_success();187 my $s = q(); 129 188 if ( my $prev = $res->previous) { 130 189 if ( ('302' eq $prev->code ) && ( $prev->location =~ m|http://static\.twitter\.com| ) ) { … … 134 193 $param->{error} = 'hmm?'; 135 194 } 195 } elsif ( '304' eq $res->code ) { 196 $s = $config->{twitter_cache}; 136 197 } else { 137 my$s = $res->content;198 $s = $res->content; 138 199 $s =~ s/\\u([0-9a-fA-F]+)/&#x$1;/g; 139 eval { 140 my $recent = JSON::jsonToObj($s); 141 $param->{data} = $recent; 142 }; 143 if ($@) { 144 die $@ ; 145 } 146 } 147 148 1; 200 if ( my $etag = $res->header('ETag') ) { 201 $plugin->set_config_value('twitter_etag' , $etag, $scope); 202 $plugin->set_config_value('twitter_cache', $s, $scope); 203 } 204 } 205 return q() unless $s; 206 207 eval { 208 my $recent = JSON::jsonToObj($s); 209 my @data; 210 for my $twit (@$recent) { 211 push @data, 212 { 213 screen_name => $twit->{user}{screen_name}, 214 url => $twit->{user}{url}, 215 image_url => $twit->{user}{profile_image_url}, 216 text => $twit->{text}, 217 }; 218 } 219 $param->{data} = \@data; 220 }; 221 if ($@) { 222 die $@ ; 223 } 224 return 1; 149 225 } 150 226 … … 152 228 my $app = shift; 153 229 230 my $blog_id = $app->param('blog_id'); 231 unless ($blog_id) { 232 return $app->json_result(0); 233 } 154 234 my $text = $app->param('text'); 155 235 my $ua = $app->new_ua; 156 236 my $req = HTTP::Request->new( POST => $update_url ); 157 237 158 my $config = $plugin->get_config_hash( 'system');238 my $config = $plugin->get_config_hash("blog:$blog_id"); 159 239 my $username = $config->{twitter_username}; 160 240 my $password = $config->{twitter_password};
