PHP & JavaScript Room :: 設置サンプル

実行結果

設置サンプル

Twitterで「instagr.am/p/」かつ「おいしい」を含むツイートの検索結果を取得し、最新6件を表示。

設置サンプルのソース

<!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" xml:lang="ja" lang="ja">
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <meta http-equiv="Content-Language" content="ja" />
      <meta http-equiv="Content-Script-Type" content="text/javascript" />
      <meta http-equiv="Content-Style-Type" content="text/css" />
      <meta http-equiv="imagetoolbar" content="no" />
      <title>設置サンプル</title>
      <link rel="stylesheet" type="text/css" href="/content/lib/global.css" />
      <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
      <script type="text/javascript" src="/content/lib/jquery/jquery.jsonp.js"></script>
      <!-- JS -->
      <script type="text/javascript">
         $(function(){
            //「instagr.am/p/」かつ「おいしい」を含むツイートをTwitter検索
            var url="http://search.twitter.com/search.json?q=instagr.am%2Fp%2F+%E3%81%8A%E3%81%84%E3%81%97%E3%81%84&page=1&callback={callback}";
            //(特定のユーザーが投稿した写真のみ検索する場合)
            //var url="http://search.twitter.com/search.json?q=instagr.am%2Fp%2F+cocoism&page=1&callback={callback}";
            $.getJSONP(url, function(json){
               var s="";
               var formatStr="";
               var j=0;
               $.each(json.results, function(i, item){
                  if(j>5) return;
                  formatStr=formatTwitterString(item.text);
                  if(formatStr.indexOf(' class="thumb"')>0){
                     s+="<li><div class='box'>";
                     s+="<p><a href='http://twitter.com/"+item.from_user+"' class='prof'><img src='"+item.profile_image_url+"' alt='@"+item.from_user+"' /></a> @<a href='http://twitter.com/"+item.from_user+"' class='prof'>"+item.from_user+"</a></p>";
                     s+="<p>"+formatStr+"</p>";
                     s+="<div><a class='pubdate' href='http://twitter.com/"+item.from_user+"/statuses/"+item.id_str+"'>"+relativeTime(item.created_at)+"</a></div>";
                     s+="</div></li>";
                     j++;
                  }
               });
               $("#tw ul").append(s);
            });
          });
         // リンク内につぶやきを含むURLに変更
         function formatTwitterString(str){
            str = str.replace(/((ftp|http|https?):\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?)/gm,'<a href="$1" target="_blank">$1</a>');
            str = str.replace(/@(\w+)/gm,'<a href="http://twitter.com/$1" target="_blank">@$1</a>');
            str = str.replace(/#(\w+)/gm,'<a href="http://search.twitter.com/search?q=$1" target="_blank">#$1</a>');
            str = str.replace(/>(http:\/\/instagr\.am\/p\/[\w\-]+\/)(<\/a>)/gm,' class="thumb"><img src="$1media/?size=t" /></a>');
            //str = str.replace(/(http:\/\/instagr\.am\/p\/[\w\-]+\/)/gm,'<img src="$1media/?size=t" />');
            return str;
         }
         function relativeTime(pastTime){
            var origStamp = Date.parse(pastTime);
            var curDate = new Date();
            var currentStamp = curDate.getTime();
            var difference = parseInt((currentStamp - origStamp)/1000);
            if(difference < 0) return false;
            if(difference <= 5)            return "いまさっき";
            if(difference <= 20)         return "数秒前";
            if(difference <= 60)         return "1分以内";
            if(difference < 3600)         return parseInt(difference/60)+" 分前";
            if(difference <= 1.5*3600)       return "One hour ago";
            if(difference < 23.5*3600)      return Math.round(difference/3600)+" 時間前";
            if(difference < 1.5*24*3600)   return "1日前";
            var dateArr = pastTime.split(' ');
            return (parseInt(difference / 86400)).toString() + '日前';
         }
      </script>
      <style type="text/css">
         #tw {
            margin:0; padding:0;
            border:1px solid #ccc;
            font-size:12px;
            background:#eee;
            webkit-border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;
         }
         #tw ul {
            list-style:none;
            overflow:hidden;
            clear:both;
            margin:0; padding:5px;
            width:100%;
         }
         #tw li {
            margin:5px; padding:0;
            position:relative;
            display:block;
            width:48%;
            float:left;
         }
         #tw li .box {
            margin:0; padding:0 0 0 160px;
            min-height:150px;
            height:auto!important;
            height:150px;
            min-width:150px;
            width:auto!important;
            width:150px;
            overflow:hidden;
         }
         #tw a.prof img {
            width:24px; height:24px;
            vertical-align:middle;
            webkit-border-radius:3px;-webkit-border-radius:3px;-moz-border-radius:3px;
         }
         #tw a.thumb {
            position:absolute;
            width:150px; height:150px;
            overflow:hidden;
            top:0; left:0;
         }
      </style>
   <link rel="stylesheet" type="text/css" href="/common/css/example.css"></head>
   <body id='example3' class='example'><div class="ads" style="margin:32px auto;text-align:center;"></div><h1 class='h'><a href='/'>PHP &amp; JavaScript Room</a> :: 設置サンプル</h1>
<h3 class='h'>実行結果</h3>
      <div id="wrap">
         <h1>設置サンプル</h1>
         <p>Twitterで「instagr.am/p/」かつ「おいしい」を含むツイートの検索結果を取得し、最新6件を表示。</p>
<!-- CODE -->
         <div id="tw"><ul></ul></div>
<!-- / CODE -->
      </div>
   </body>
</html>