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

実行結果

Twitter @Anywhere:linkifyUsers | 設置サンプル

linkifyUsers

下記のタイムラインに含まれる「@{スクリーンネーム}」部分を各ユーザーのTwitterページへのリンク(http://twitter.com/{スクリーンネーム})に変換して表示します。

 

loading...

もっと見る

設置サンプルのソース

<!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>Twitter @Anywhere:linkifyUsers | 設置サンプル</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>
      <!-- @Anywhere -->
      <script src="http://platform.twitter.com/anywhere.js?id=Vr1OpiUZD7KOxQlpSvYdEA&amp;v=1"></script>
      <!-- @Anywhere // -->
      <script type="text/javascript">
         (function($){
            var pcnt=1;
            $.fn.twSearch=function(options){
               var settings=$.extend({
                  url:"http://search.twitter.com/search.json",
                  type:"mixed",
                  page:"1",
                  holderID:"res",
                  readmore:false
               },options);
               this.click(function(){
                  //クエリ
                  var _query=$("#myquery").val();
                  //API
                  if(settings.readmore){
                     var _url=settings.url+"?q="+encodeURIComponent(_query)+"&type="+settings.type+"&page="+pcnt+"&callback={callback}";
                     pcnt++;
                  }else{
                     var _url=settings.url+"?q="+encodeURIComponent(_query)+"&type="+settings.type+"&page="+settings.page+"&callback={callback}";
                  }
                  //alert(_url);
                  $.getJSONP(_url, function(json){
                     $("#loading").show();
                     if(json.results==""){
                          $("#btn_more").hide();
                          $("#"+settings.holderID).append("<p id='caution'>※もうデータがありません</p>");
                          return false;
                     }
                     var s="";
                     $("#"+settings.holderID+" > h2").html("Results for "+_query);
                     $.each(json.results, function(i, item){
                        s+="<li>";
                        s+="<a href='http://twitter.com/"+item.from_user+"'><img src='"+item.profile_image_url+"' /></a> ";
                        s+="<a href='http://twitter.com/"+item.from_user+"'>"+item.from_user+"</a>: "+formatStr(item.text)+"";
                        s+="<div>";
                        s+="<span><a href='http://twitter.com/"+item.from_user+"/status/"+item.id_str+"'>"+relativeTime(item.created_at)+"</a></span>";
                        s+="<span class='hoge'>"+formatSource(item.source)+"から</span>";
                        s+="</div>";
                        s+="</li>";
                     });
                     if(settings.readmore){
                        // もっと読む
                        $("#"+settings.holderID+" > ul").append(s);
                     }else{
                        // 検索
                        $("#"+settings.holderID+" > ul").html(s);
                        $("#btn_more").show();
                        pcnt=settings.page;
                        pcnt++;
                     }
                     $("#searchurl").html("検索URL:"+_url).show();
                     $("#loading").hide();
                     // <!-- @Anywhere -->
                     twttr.anywhere(function(T) {
                        T.linkifyUsers();
                        //T("#res").linkifyUsers();
                     });
                     // <!-- @Anywhere // -->
                     return false;
                  });
               });
               var formatStr=function(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>');
                  return str;
               }
               var formatSource=function(str){
                  str = str.replace(/&gt;/gm,">");
                  str = str.replace(/&lt;/gm,"<");
                  return str;
               }
               var relativeTime=function(pastTime){
                  var origStamp = Date.parse(pastTime);
                  var curDate = new Date();
                  var currentStamp = curDate.getTime();
                  var difference = parseInt((currentStamp - origStamp)/1000);
                  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 "1時間前";
                  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() + '日前';
               }
               return this;
            };
         })(jQuery);
         $(function(){
            $("#btn_serach").twSearch().click();
            $("#btn_more").twSearch({readmore:true});
         });
      </script>
      <style type="text/css">
         #loading,#searchurl,#btn_more { display:none; }
         #res ul { margin:0; padding:0; list-style:none; border-top:1px solid #ccc; }
         #res li { background-color:#fff; margin:0; padding:10px 10px 10px 62px; list-style:none; display:block; position:relative; min-height:42px; height:auto!important; height:42px; font-size:13px; border-bottom:1px solid #ccc; }
         #res li:hover { background-color:#d3f7ff; }
         #res li img { display:block; width:32px; height:32px; margin:0; padding:1px; outline:1px solid #ccc; background:#fff; position:absolute; top:10px; left:10px; }
         #res li div { margin:5px 0; padding:0; font-size:11px; }
         #res li div span { margin:0 10px 0 0; padding:0; }
         #searchurl { font-size:10px; border:1px dotted #ccc; background:#eee; word-break:break-all; }
         #caution { margin:10px 0; padding:10px; background:#ffffcc; }
      </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>Twitter @Anywhere:linkifyUsers | 設置サンプル</h1>
         <h2>linkifyUsers</h2>
         <p>下記のタイムラインに含まれる「@{スクリーンネーム}」部分を各ユーザーのTwitterページへのリンク(http://twitter.com/{スクリーンネーム})に変換して表示します。</p>
<!-- CODE -->
         <p>
            <label for="myquery">クエリ:</label>
            <input type="text" value="@cocoism" name="myquery" id="myquery" /> 
            <input type="button" value=" 検索 " id="btn_serach" />
         </p>
         <div id="searchurl"></div>
         <div id="res"><div id='loading'>loading...</div><h2></h2><ul></ul></div>
         <p><a href="#" id="btn_more" onclick="return false;">もっと見る</a></p>
<!-- / CODE -->
      </div>
   </body>
</html>