今日は、ぼくがちょっと前に書いた記事の中で(名前だけ)触れられている Smooth Div Scroll を使って楽しい事をしよう。
ありもののサンプルをそのまま使うのも面白くないので、覚えたての PHP を組み合わせて TwitPic の新着画像を動的に表示する仕組みを作ってみる。
![]() |
ほんものはマウスを動かすと左右にスクロールするよ。 |
ここで、非実在ご愛用者の声をご紹介しよう。大好評である(嘘)。
【ご愛用者の声】実際、サークル専用の Twitter アカウントを作ればそういう使い方も可能だし、更新しやすい仕組みを整備しておけば、後任の管理者に業務を引き継ぐ事も容易になる。
ライソさん(20歳) - 茨城県つくば市
私は、ハンドボールサークルの Web サイトを運営しています。今まで、サイトの更新が面倒でどうしようもありませんでしたが、このシステムを使えば TwitPic に画像を投稿するだけで自動的に Web サイトの方にも新しい写真のサムネイルが載るので、大変重宝しています。たーせるさん本当にありがとうございました。
※あくまで利用者の感想であり、製品の効能を保証するものではありません。
さっそく製作開始。
まずは Download から SmoothDivScroll-1.1.zip を落として解凍し、中に入っている js、css、images フォルダを、以前作った作業用フォルダ(x:\xampp\htdocs\test\)に配置する。
アーカイバによっては、「.」 がいっぱい入っているファイルの解凍に失敗する事がある。念のため、js フォルダの中に
- jquery.js
- jquery.scrollTo.js
- jquery.scrollTo-min.js
- jquery.smoothDivScroll-1.1.js
- jquery.smoothDivScroll-1.1-min.js
- jquery.ui.widget.js
さらに、作業用フォルダにからっぽの HTML ファイルを作る。この時点で、作業フォルダの中身はこうなっているはずだ。
ここで HTML を参考にするため、Smooth Div Scroll の Basic Demo のソースコードをちょっと見てみる事にした。
- <body>
- <div id="makeMeScrollable">
- <div class="scrollingHotSpotLeft"></div>
- <div class="scrollingHotSpotRight"></div>
- <div class="scrollWrapper">
- <div class="scrollableArea">
- <img src="images/demo/field.jpg" alt="Demo image" width="497" height="330" />
- <img src="images/demo/gnome.jpg" alt="Demo image" width="496" height="330" />
- <img src="images/demo/pencils.jpg" alt="Demo image" width="496" height="330" />
- <img src="images/demo/golf.jpg" alt="Demo image" width="366" height="330" />
- <img src="images/demo/river.jpg" alt="Demo image" width="496" height="330" />
- <img src="images/demo/train.jpg" alt="Demo image" width="440" height="330" />
- <img src="images/demo/leaf.jpg" alt="Demo image" width="496" height="330" />
- <img src="images/demo/dog.jpg" alt="Demo image" width="497" height="330"/>
- </div>
- </div>
- </div>
- </body>
TwitPic の新着 RSS の URL は、http://twitpic.com/photos/user_name/feed.rss である。 user_name のところには、自分のユーザ名(ぼくだったら tercel_s)を入れる。
実際の RSS のソースはこんな感じである。
- <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
- <channel>
- <atom:link href="http://twitpic.com/photos/tercel_s/feed.rss" rel="self" type="application/rss+xml" />
- <title>tercel_s's Photo Stream</title>
- <link>http://twitpic.com/photos/tercel_s</link>
- <description>tercel_s's updates</description>
- <language>en-us</language>
- <ttl>40</ttl>
- <item>
- <title><![CDATA[tercel_s: http://twitpic.com/40pgb4 万代口から出る(´ー`*)]]></title>
- <description><![CDATA[tercel_s: 万代口から出る(´ー`*)
- <a href="http://twitpic.com/40pgb4"><img src="http://twitpic.com/show/thumb/40pgb4.jpg"></a>]]></description>
- <pubDate>Thu, 17 Feb 2011 12:09:27 +0000</pubDate>
- <guid>http://twitpic.com/40pgb4</guid>
- <link>http://twitpic.com/40pgb4</link>
- </item>
- <item>
- <title><![CDATA[tercel_s: http://twitpic.com/3wd83j そんなことよりラーメンだ∩( ・ω・)∩]]></title>
- <description><![CDATA[tercel_s: そんなことよりラーメンだ∩( ・ω・)∩
- <a href="http://twitpic.com/3wd83j"><img src="http://twitpic.com/show/thumb/3wd83j.jpg"></a>]]></description>
- <pubDate>Fri, 04 Feb 2011 11:35:39 +0000</pubDate>
- <guid>http://twitpic.com/3wd83j</guid>
- <link>http://twitpic.com/3wd83j</link>
- </item>
- <item>
- <title><![CDATA[tercel_s: http://twitpic.com/3voy70 消えるボールペンを てにいれた!]]></title>
- <description><![CDATA[tercel_s: 消えるボールペンを てにいれた!
- <a href="http://twitpic.com/3voy70"><img src="http://twitpic.com/show/thumb/3voy70.jpg"></a>]]></description>
- <pubDate>Wed, 02 Feb 2011 07:24:15 +0000</pubDate>
- <guid>http://twitpic.com/3voy70</guid>
- <link>http://twitpic.com/3voy70</link>
- </item>
- (中略)
- </channel>
- </rss>
したがって今回は本格的な XML パーサを使用せず、正規表現を使って RSS からめあての画像の URL だけを抽出すれば良さそうだ。
ちょいと冗長だが、こんなコードになると思う。
- <?php
- # RSS の URL を指定
- $rssUrl = 'http://twitpic.com/photos/tercel_s/feed.rss';
- # RSS を開くよ!
- $fp = fopen($rssUrl, 'r');
- # ファイルから一気に読み込み、$rss に格納
- $rss = '';
- while(!feof($fp)) $rss .= fgets($fp);
- # 正規表現を使って画像の URL を取り出す
- preg_match_all('/\<img\s+.*?src=[\"|\'](.*?)[\"|\'].*?\>/is', $rss, $found);
- # <img>タグを生成
- foreach($found[1] as $img) echo '<img src='.$img.' width=150 height=150 />';
- ?>
これを埋め込んだ HTML ファイルは以下の通り。ほとんど Basic Demo のソースそのままである。
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>Basic demo - jQuery Smooth Div Scroll</title>
- <!-- the CSS for Smooth Div Scroll -->
- <link rel="Stylesheet" type="text/css" href="css/smoothDivScroll.css" />
- <!-- jQuery library - I get it from Google API's -->
- <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>
- <!-- jQuery UI widget factory -->
- <!-- You can download it as a part of jQuery UI Core
- http://jqueryui.com/download -->
- <script src="js/jquery.ui.widget.js" type="text/javascript"></script>
- <!-- Smooth Div Scroll 1.1 - minified for faster loading-->
- <script src="js/jquery.smoothDivScroll-1.1-min.js" type="text/javascript"></script>
- <script type="text/javascript">
- // Initialize the plugin with no custom options
- $(function() {
- $("div#makeMeScrollable").smoothDivScroll({});
- });
- </script>
- <!-- Styles for my specific scrolling content -->
- <style type="text/css">
- #makeMeScrollable
- {
- width:100%;
- height: 150px; <!-- 変更! -->
- position: relative;
- }
- #makeMeScrollable div.scrollableArea *
- {
- position: relative;
- float: left;
- margin: 0;
- padding: 0;
- }
- </style>
- </head>
- <body>
- <div id="makeMeScrollable">
- <div class="scrollingHotSpotLeft"></div>
- <div class="scrollingHotSpotRight"></div>
- <div class="scrollWrapper">
- <div class="scrollableArea">
- <?php
- # RSS の URL を指定
- $rssUrl = 'http://twitpic.com/photos/tercel_s/feed.rss';
- # RSS を開くよ!
- $fp = fopen($rssUrl, 'r');
- # ファイルから一気に読み込み、$rss に格納
- $rss = '';
- while(!feof($fp)) $rss .= fgets($fp);
- # 正規表現を使って画像の URL を取り出す
- preg_match_all('/\<img\s+.*?src=[\"|\'](.*?)[\"|\'].*?\>/is', $rss, $found);
- # <img>タグを生成
- foreach($found[1] as $img) echo '<img src='.$img.' width=150 height=150 />';
- ?>
- </div>
- </div>
- </div>
- </body>
- </html>
これでよし。
Safari を起動してみる。
おー! うごくうごく。
本来は、実際に動作するサンプルを載せたいところだが、ぼくが借りているサーバは CGI が使えない(お金が掛かるので契約時に「要らない」と言った)ので、残念ながらお見せする事ができない。
しかし、割と簡単に作れるので、環境がととのっている人は試すとよいだろう。