Ticket #8275: 8275-rss-crawler.patch

File 8275-rss-crawler.patch, 4.7 KB (added by jmtodaro, 6 years ago)

Alternate patch only requiring LWP::Simple

  • css/layout.css

     
    11781178                line-height: 13px;
    11791179                }
    11801180
     1181/* BLOG WIDGET ----------*/
     1182
     1183div.blogRow, div.blogFirstRow {
     1184        height: 40px;
     1185        padding: 3px 10px;
     1186        margin: 0 0;
     1187}
     1188
     1189div.blogLastRow {
     1190        height: 20px;
     1191        text-align: center;
     1192        }
     1193
     1194div.blogFirstRow {
     1195        height: 22px;
     1196        background: url(../images/table-head.jpg) left top repeat-x #885ca4;
     1197        }
     1198       
     1199.blogRow:hover {
     1200        background: #f6ffd5;
     1201        }
     1202
     1203div.blogRow1, div.blogRow3 {
     1204        background: #eee8f1;
     1205}
     1206
     1207.blogFeed a {
     1208text-decoration: none;
     1209}
     1210
     1211.blogFeed p {
     1212margin: 0;
     1213font-size: 12px;
     1214}
     1215
     1216p.blogTitle {
     1217        font-weight: bold;
     1218        text-decoration: underline;
     1219        }
     1220
     1221p.blogAuthor {
     1222        color: #000000;
     1223        text-align: right;
     1224        margin-top: -20px;
     1225        }
     1226       
     1227p.blogAuthor em{
     1228        color: #4e6a20;
     1229        text-align: right;
     1230        margin-top: -20px;
     1231        }
     1232
     1233p.blogDate {
     1234        color: #000000;
     1235        }
     1236       
     1237.blogFeed h2 {
     1238        font-size: 1.467em;
     1239        margin: 0;
     1240        line-height: 23px;
     1241        color: #f6f6ed;
     1242        }
     1243
    11811244/*
    11821245 Project page
    11831246*/
  • en/index.wml

     
    153153      </div>
    154154      <!-- END MAINCOL -->
    155155      <div id="sidecol">
    156         <div id="home-announcements" class="clearfix">
     156      <!-- BLOG WIDGET -->
     157<:
     158  use strict;
     159  use warnings;
     160  use open ':std', ':encoding(UTF-8)';
     161  use LWP::Simple;
     162
     163  # RSS feed url
     164  my $url = 'https://blog.torproject.org/blog/feed';
     165  # Number of posts to show
     166  my $showPosts = "2";
     167  # Maximum characters in post title to allow before truncating
     168  my $titleMaxLength = "35";
     169  # Maximum characters in author name to allow before truncating
     170  my $authorMaxLength = "15";
     171 
     172  # Retreive url
     173  my $data = get( $url );
     174 
     175  if ($data) # Url returned data
     176  {
     177    my $check = $data;
     178    $check =~ m{<rss(.*?)>}i;
     179    my $checkVal = $1;
     180
     181    if ($checkVal) # Is an rss feed
     182    {
     183      my $titleStr = $data;
     184      my $linkStr = $data;
     185      my $dateStr = $data;
     186      my $authorStr = $data;
     187   
     188      print "<div class='blogFeed'>
     189             <div class='blogFirstRow'>
     190             <h2>Recent Blog Posts</h2>
     191             </div>";
     192
     193      # Generate posts
     194      for my $i (0..$showPosts)
     195      { 
     196       
     197        # Parse title
     198        $titleStr =~ m{<title>(.*?)</title>}g;
     199        my $titleVal = $1;
     200        my $titleLength = length($titleVal);
     201        my $title = $titleVal;
     202
     203        # Check title length and trim if necessary
     204        my $titleTrim = $title;
     205        if ($titleLength > $titleMaxLength)
     206        {
     207            my $trimLength = $titleMaxLength - 3;
     208            my $titleTxt = substr($title, 0, $trimLength);
     209            $titleTrim = "$titleTxt...";
     210        }
     211   
     212        # Parse link
     213        $linkStr =~ m{<link>(.*?)</link>}g;
     214        my $link = $1;
     215
     216        if ($i != 0)
     217        {
     218          # Parse date
     219          $dateStr =~ m{<pubDate>(.*?)</pubDate>}g;
     220          my $date = $1;
     221
     222          # Trim date
     223          my $dateTrim = substr($date, 0, -15);
     224
     225          # Parse author
     226          $authorStr =~ m{<dc:creator>(.*?)\s*</dc:creator>}g;
     227          my $author = $1;
     228
     229          # Check author length and trim if necessary
     230          my $authorLength = length($author);
     231          my $authorTrim = $author;
     232          if ($authorLength > $authorMaxLength)
     233          {
     234              my $authorTrimLength = $authorMaxLength - 3;
     235              my $authorTxt = substr($author, 0, $authorTrimLength);
     236              $authorTrim = "$authorTxt...";
     237          }
     238
     239          # Begin html output
     240          print "<a href=\'$link\' title=\'$title\'>";
     241         
     242          # Required for alternating row colors - switch blogRow# to change order
     243          if (0 == $i % 2) {
     244              print "<div class='blogRow blogRow1'>";
     245          } else {
     246              print "<div class='blogRow blogRow0'>";
     247          }
     248         
     249          print "<p class='blogTitle'>$titleTrim</p>
     250                <p class='blogDate'>$dateTrim</p>
     251                <p class='blogAuthor'>Posted by: <em>$authorTrim</em></p>
     252                </div>
     253                </a>";   
     254        }
     255      }
     256     
     257    } else {    # Not an rss feed
     258      print "<div class='blogRow blogRow1'>";
     259      print "<br /><p class='blogDate' style=\"text-align:center;color:\#999;line-height:16px;\"><em>Recent posts are temporarily unavailable</em></p></div>";   
     260    }
     261 
     262  } else {      # Url did not return any data
     263    print "<div class='blogRow blogRow1'>";
     264    print "<br /><p class='blogDate' style=\"text-align:center;color:\#999;line-height:16px;\"><em>Recent posts are temporarily unavailable</em></p></div>";   
     265  }
     266 
     267  print "<a href='https://blog.torproject.org' title='Tor Blog Home'>
     268  <div class='blogRow blogLastRow'>
     269        <p>View all blog posts &raquo;</p>
     270        </div>
     271        </a>
     272        </div>";
     273:>
     274      <!-- END BLOG WIDGET -->
     275<div id="home-announcements" class="clearfix">
    157276        <h2>Announcements</h2>
    158277          <table>
    159278            <tr>