by shigemk2

当面は技術的なことしか書かない

昨日のナウい人気記事表示を画像なしエントリーに対応さしてみた

f:id:shigemk2:20131116232643p:plain

参考にした記事

【修正済】コピペで簡単! はてなブログの人気記事を画像付きで表示させる方法。 - #ChiroruLab

それをもとにした昨日のエントリー

サイドバーで人気記事をナウい感じで表示させるのを参考にしてみた - by shigemk2

概要

昨日のやつについてですが、 画像のないエントリーだとあんまりイケてない感じになるので、 画像のないエントリーでもビシっと表示されるようにしてみました。

といっても、画像を取ってこれなかったら別のHTMLを突っ込むという 非常に強引なものです。

ソースコード

<!-- HTML : popular_entries -->
<div class="hatena-module-title">
 <a href="http://b.hatena.ne.jp/entrylist?sort=count&url=http://shigemk2.hatenablog.com/">Popular entries</a>
</div>
<!-- 人気記事を表示する -->
<div id="popular_entries_feed" align="center">Now Loading...</div>
<!-- SCRIPT : popular_entries_feed -->
<script src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("feeds", "1"); 
function initialize() {
 //RSSフィードの取得
 var blogURL = "ブログURL";
 var blogTITLE = "ブログタイトル";
 var feed = new google.feeds.Feed("http://b.hatena.ne.jp/entrylist?mode=rss&sort=count&url=" +blogURL);
 //取得するフィード数
 feed.setNumEntries(7);
 //実際に読む込む
 feed.load(function(result) {
 //読み込めたか判別
  if (!result.error) {
   //表示部分を選択
   var container = document.getElementById("popular_entries_feed");
   //変数の初期化
   var useFeed = "";
   //Feedの処理
   for (var i = 0; i < result.feed.entries.length; i++) {
    //Feedを一つ抽出
    var entry = result.feed.entries[i];
    //日付を抽出
    var pdate = new Date(entry.publishedDate);
    var strdate = (pdate.getMonth() + 1) + '月' + pdate.getDate() + '日';
    //最初の画像を抽出
    var first_image = entry.content.match(/(http:){1}[\S_-]+\.(?:jpg|gif|png)/);
    //画像サイズを調整
    first_image[0] = first_image[0].replace(/(\.[^.]+$)/ , "_l$1");
    if (first_image[0] == "http://b.hatena.ne.jp/images/append_l.gif") {
      //画像がないとき
      useFeed += '<div class="htbl_popular_entry"><a href="' + entry.link + '"><div class="htbl_popular_entry_text_no_img"><span class="entry_title">' + entry.title.replace('- '+blogTITLE , '') + '</span><span class="entry_hatebu"><img src="http://b.hatena.ne.jp/entry/image/' + entry.link + '"></span><span class="entry_date">' + strdate + '</span></div></a></div>';
    } else {
      useFeed += '<div class="htbl_popular_entry"><a href="' + entry.link + '"><img class="htbl_popular_entry_img" src="' + first_image[0] + '"><div class="htbl_popular_entry_text"><span class="entry_title">' + entry.title.replace('- '+blogTITLE , '') + '</span><span class="entry_hatebu"><img src="http://b.hatena.ne.jp/entry/image/' + entry.link + '"></span><span class="entry_date">' + strdate + '</span></div></a></div>';
    }
   }
  //リストを表示させる
  container.innerHTML = '<div class="htbl_popular_entries">' + useFeed + '</div>';
   }
 });
}
google.setOnLoadCallback(initialize);
</script>
.htbl_popular_entries {
  height: 100%;
  width: 100%;
}
.htbl_popular_entry {
  position: relative;
  background: #ddd;
  width: 100%;
  height: 100px;
  overflow: hidden;
  margin-top: 1px;
  border-radius: 1px;
}
.htbl_popular_entry_img { position: relative; top: -9px; min-height: 118px;}
.htbl_popular_entry_text,
.htbl_popular_entry_text_no_img {
  position: absolute;
  top: 0px;
  word-break: break-all;
  overflow: hidden;
  background: rgba(77, 77, 77, 0.42);
  width: 90%;
  height: 100px;
  margin-top: 0px;
  padding: 0 5%;
  color: rgba(255, 255, 255, 0.985);
  text-shadow: -1px 1px rgba(0, 0, 0, 0.15);
  -webkit-transition: all 0.35s ease-out;
  -moz-transition: all 0.35s ease-out;
  -o-transition: all 0.35s ease-out;
  transition: all 0.35s ease-out;
}
.htbl_popular_entry_text:hover {
  background: rgba(255, 255, 255, 0.05);
  color: transparent;
  text-shadow: none;
  padding-top: 100px;
}
.htbl_popular_entry_text_no_img:hover {
  background: rgba(255, 255, 255, 0.05);
}
.htbl_popular_entry_text span.entry_title,
.htbl_popular_entry_text_no_img span.entry_title {
  display: table-cell;
  vertical-align: middle;
  text-align: center; 
  height: 100px;
  font-size: 14px;
}
.htbl_popular_entry_text span.entry_date,
.htbl_popular_entry_text_no_img span.entry_date{
  position: absolute;
  bottom: 0;
  right: 5px;
  font-size: 10px;
  color: rgba(255, 255, 255, 0.4);
  text-shadow: none;
}
.htbl_popular_entry_text span.entry_hatebu,
.htbl_popular_entry_text_no_img span.entry_hatebu {
  position: absolute; left: 5px; bottom: 0px;
}

追記

とくにありません。