最近放置ぎみのメインサイトをちょっと手直ししました。というのも、画像を使いすぎて、ページ自体が重かったんです。最近ちょくちょくこのブログもなんですが、メインサイトも訪問していただけるようになってきて、とても申し訳ない・・・!と思ってましてね。で、マイナーチェンジしました。とは言ってもまだまだ構築中。60%くらい達成ってとこですね。まぁ、それはよしとして。
本題です。rssフィードをgoogleのAPIを利用して取得、別サイトに表示・・・ なんてことをやられてる方は結構多いと思います。私もそうで、このブログのrssフィードを外部(といってもメインサイトですが)htmlページで読み込んでます。そこで、以前から気になっていたことがあります。
「rssフィードの取得時にアイキャッチ画像も表示したいんだけどなぁ・・」
調べていると、ああ、同じようなことをされている方、いらっしゃいました。「google feed api で画像付きのリスト表示」ここのサイトを参考にしました。ありがとうございます。
というわけで、早速導入方法です!
1.「どの」rssフィードを「どこ」に表示するのかを決める
rssフィードを取得する前に・・・ 「まず、どのサイトのrssフィードを取得するか」 を決めましょう。私の場合、このブログのrssフィードを取得して、
https://www.imamura.biz/index.html
の「indexhtml」というファイルに「アイキャッチ付きのrssフィードを取得して表示」
することとします。
2.google APIキーを取得する
(※2014/02/20追記:APIキーは必要なくなったみたいですね。一応当時書いたことは残しておきます~)
それでは、前準備をしましょう。googleはrssフィードを取得してくれる便利なサービスを提供してくれています。今回はそれを利用します。下のリンク先から、googleのapiを使うための「キー」を取得しましょう。
http://code.google.com/intl/ja/apis/loader/signup.html
rssフィードを表示したいurlを入力します。「https://www.imamura.biz」にrssフィードを表示したいので、https://www.imamura.biz と入力します。すると、下の画像のようにキーが作成されます。
このキーはメモ帳とかにコピーしておいてください。(キーはあえてモザイクにしましたが、べつにソース見ればばれちゃいますね・・・)要は、「https://www.imamura.biz/」配下のディレクトリで利用可能ってことです。そのまんまです。
とりあえずこれで、準備完了です。
3.表示するためのスクリプトファイルを作る
では、早速スクリプトファイルを作りましょう。
rss.js
google.load("feeds", "1"); function initialize() { var feedurl = "https://www.imamura.biz/blog/feed/"; //rssフィードのurlを指定。wordpressの場合はurl/feed/で取得できる。 var feed = new google.feeds.Feed(feedurl); feed.setNumEntries(4); //フィードの表示数 feed.load(dispfeed); function dispfeed(result){ if (!result.error){ var container = document.getElementById("feed"); var htmlstr = ""; htmlstr += "<ul>"; for (var i = 0; i < result.feed.entries.length; i++) { //ループ処理 var entry = result.feed.entries[i]; var eimg = ""; //画像取得(初期値設定) var imgCheck = entry.content.match(/(src="http:){1}[\S_-]+((\.png)|(\.jpg)|(\.JPG))/); //該当する拡張子のデータを画像として取得している if(imgCheck){ eimg += '<img ' + imgCheck[0] + '" width="100" >'; //eimgにはimgタグを挿入するように設定、大きさは100ピクセル } htmlstr += '<li class="kiji">' var strdate = createDateString(entry.publishedDate); htmlstr += '<p class="kiji_img"><a href="' + entry.link + '" target="_blank">' + eimg + '</a></p>'; htmlstr += '<p class="kiji_body"><span class="kiji_title"><a href="' + entry.link + '" target="_blank">' + entry.title + '</a></span>' + '<span class="kiji_entry">' + entry.contentSnippet.substr(0,140) + '</span><span class="kiji_date">' + strdate + '</span></p>'; htmlstr += "</li>" } htmlstr += "</ul>"; container.innerHTML = htmlstr; }else{ alert(result.error.code + ":" + result.error.message); } } } function createDateString(publishedDate){ var pdate = new Date(publishedDate); var pday = pdate.getDate(); var pmonth = pdate.getMonth() + 1; var pyear = pdate.getFullYear(); var phour = pdate.getHours(); var pminute = pdate.getMinutes(); var psecond = pdate.getSeconds(); var strdate = pyear + "/" + pmonth + "/" + pday ; return strdate; } google.setOnLoadCallback(initialize);
ちょっと長いでしょうか。 これを「rss.js」というファイル名で保存してください。
4.表示したいhtmlページにスクリプトファイルを読み込む
rss.jsファイルができたので、今度は「https://www.imamura.biz/index.html」のファイルに表示するために「rss.js」を読み込みます。
index.htmlを開いてください。
index.html
<script src="https://www.google.com/jsapi?key=さっき取得したキー" type="text/javascript"></script> <script type="text/javascript" src="./js/rss.js"></script>
index.htmlファイルの<head>~</head>の間に、上のスクリプトを入れてください。
(さっき取得したキーの値と、rss.jsへのパスは、ご使用の環境に合わせて変更してください。)
次は表示したいところに、
<div id="feed"></div>
を入れます。なぜ「idをfeedにするのか」と言いますと、 これは先ほどの「rss.js」で
var container = document.getElementById("feed");
のfeedの箇所と対応しています。もし、idを変えたいのであれば、この2箇所の値を同じにしてください。
5.出来上がり!
では、実際にアクセスしてみましょう。「https://www.imamura.biz/index.html」下のような表示になっているでしょうか。(追記:ちょっと仕様が変わったみたいなので、いつかなおします~)
私はスタイルシートで表示をいろいろいじくってるので、お好みのスタイルにカスタマイズしましょう。
6.まとめ
今回のキモはここです。
for (var i = 0; i < result.feed.entries.length; i++) { //ループ処理 var entry = result.feed.entries[i]; var eimg = ""; //画像取得(初期値設定) var imgCheck = entry.content.match(/(src="http:){1}[\S_-]+((\.png)|(\.jpg)|(\.JPG))/); //該当する拡張子のデータを画像として取得している if(imgCheck){ eimg += '<img ' + imgCheck[0] + '" width="100" >'; //eimgにはimgタグを挿入するように設定、大きさは100ピクセル }
エントリーを取得するfor文のループ処理ですが、画像取得を加えています。そして、該当する拡張子を取得しています。ここで私は .png .jpg .JPG の3つのみの取得をしているのですが、「アイキャッチの画像の拡張子は、gifなんだ」って場合は、gifを取得できるようにしてあげましょう。
gifを追加するだけ
var imgCheck = entry.content.match(/(src="http:){1}[\S_-]+((\.png)|(\.jpg)|(\.JPG)<strong>|(\.gif)</strong>)/); //該当する拡張子のデータを画像として取得している
必ず、パイプ「 | 」でつなげてくださいね。
このプログラムを使うときの注意事項
あと、一つ注意事項ですが、WordPressのアイキャッチが使えるバージョンでないと、 これはできません。アイキャッチが使える最新版は、3.2.1(2011/9/21時点)ですので、アップグレードしましょう。また、利用中のテーマによっては、アイキャッチを指定してても 反映されないことがあります。
その場合、WordPressのfunctions.phpをいじくります。下記を参考ください。
rssフィードを表示するにはgoogle APIを利用したほうがラクです。理由は、 一度スクリプトを作ってしまえば、応用が利く(プログラムの再利用ができる) からです。rssフィードを表示することは、サイトへの誘導にも役立ちますね。メインのサイトがあって、「ブログではこんな記事書いてます。見てね!」 ってのが、まさに私のケースです。
ただ、その場合は表示方法も工夫しないといけない。やっぱり視覚的には画像なんかがアクセントとしてあると、いいですね。単純にコンテンツボリュームを増やしたいだけなら、そこいらの適当なニュースサイトを 機械的にテキストのみで、バシバシ表示すればいいんですがね。ですが、それではかっこ悪いです。
本当に見てもらいたいなら、どうするか。記事の中身ももちろんですが、外見(視覚的にうったえる部分)も重要ですね。そういう意味で、このWordPressのアイキャッチを使わない手はない・・・と思います。人と人との第一印象も同じですよね。というわけで、以上でした。
長谷川と申します。とても有益なテクニックありがとうございます。
基本的な表示まではできたのですが「5.出来上がり!」にあるimamura様のサンプルのようなレイアウトにするcss設定とスクリプトの変更点、HTMLもでしょうか…お教え頂けませんでしょうか。
imamura様のサイトもリニューアルされているようで、1年以上も前のことで申し訳ありませんが、何卒よろしくお願いいたします。
2012/12/01 02:20:18
ツイート
シェア
長谷川さん、どうもはじめまして。
ご返信が遅くなりましてすみません。
コメントをいただいていた間、どう回答するのがいいのか数日考えていたのですが、
"基本的な表示"はできているということですので、ソースコードは読むことができると仮定いたしますね。
それでは、私が今「https://www.imamura.biz/」で実装しているままを例にして、
簡単ですがご説明差し上げます。
■html
私の場合は自分のブログを表示させたかったので、
わかりやすいように「dl」タグにクラス「blog」を付けています。
表示させたいhtmlファイル中に、以下のコードを書いてください。
※タグがそのまま反映されてしまうので、「<」「>」は全角にしています。
コードを書く場合は、半角に変更してくださいませ。
<dl class="blog">
<dt>BLOG</dt>
<dd>
<div id="feed"></div>
</dd>
</dl>
■css
下記URLにアクセスをして、
「.blog」のスタイルを書いてある箇所がcssのレイアウトです。
細かいプロパティ(具体的にどういったスタイルになるのか)までは、
ここでは省略いたします。
https://www.imamura.biz/css/layout.css
■javascript
下記URLにアクセスしてご確認ください。
Google Feed APIを使用して表示するためのスクリプトです。
こちらも、コードの処理が具体的にどうなっているなどは、省略いたします。
https://www.imamura.biz/js/rss.js
※各コードの先頭に、スラッシュ二つ「//」書いてある箇所がいくつかあります。
これは、コメントアウトされている部分ですので、削除してもかまいません。
以上、簡単ではございますがご確認よろしくおねがいいたします。
また、できれば最後までお付き合いいただければと思いますので、
コメント欄のやり取りでは憚れると思いますので、よろしければ
このサイトに設置してある「お問い合わせフォーム」から、
ここまでやっているんですけど・・・みたいな経過を教えていただけますと、
より的確にご説明差し上げることができると考えています。
それでは、どうぞよろしくお願いいたします。
2012/12/07 18:34:21
ツイート
シェア
Imamura様
長谷川です、[html][/html] [css][/css] [js][/js] ソースまで公開頂きありがとうございます。
お言葉に甘え、まずフォームを送信させて頂きました。
感謝いたしますm(_ _)m
2012/12/11 14:45:49
ツイート
シェア
あっ!すいません!実は、たまたまお問い合わせフォームをメンテしておりまして、届けられなかったかもです><
お手数ですが、再度フォームいただけませんでしょうか・・・
2012/12/11 19:08:44
ツイート
シェア