Changeset 23866

Show
Ignore:
Timestamp:
11/17/08 09:20:47 (5 years ago)
Author:
NeoCat
Message:

- 過去に遡ってTL取得を試験的に実装
- ユーザTL取得失敗時にユーザ情報のみを取得(user/show APIのprotected関連の変更に対応,認証Errorは未だに出る)
- TwitterのURLを変数化

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • websites/twicli/twicli.html

    r23742 r23866  
    3838.lock { position: relative; top: 2px; left: 0; } 
    3939.close { color: red; } 
    40 #next { text-align: center; background-color: #999; color: #fec; cursor: pointer; } 
     40#get_old, #next { text-align: center; background-color: #999; color: #fec; cursor: pointer; } 
    4141#rep { display: none; background-color: #fee; position: absolute; width: 90%; left: 4%; top: 200px; border: 4px solid #666; z-index: 2; padding: 2px; font-size: small; } 
    4242#popup { display: none; background-color: #eee; position: absolute; left: 0; top: 200px; border: 2px solid #666; z-index: 6; font-size: small; } 
     
    229229 
    230230<script type="text/javascript"> 
     231var twitterURL = 'https://explore.twitter.com/'; 
    231232var cookieVer = readCookie('ver') || 0; 
    232 var updateFreq = readCookie('update_freq') || 45; 
     233var updateInterval = readCookie('update_interval') || 45; 
    233234var pluginstr = (cookieVer>0) && readCookie('tw_plugins') || 'search.js\nfavotter.js'; 
    234235var nr_limit = readCookie('limit') || 500;                              // 表示する発言数の上限 
     
    237238var plugins = new Array; 
    238239var nr_tw = 0; 
     240var nr_page = 1; 
    239241var seq = (new Date).getTime(); 
    240242var since_id = null; 
     
    261263var selected_menu = $("TL"); 
    262264var failover_timeout = false; 
     265var userinfo_timeout = false; 
    263266var get_next_func; 
    264267 
     
    311314                $("loading").style.display = "block"; 
    312315                rep_top = cumulativeOffset(ele)[1] + 20; 
    313                 reply_ele = loadXDomainScript('http://twitter.com/statuses/show/'+id+'.json?callback=dispReply2', reply_ele); 
     316                reply_ele = loadXDomainScript(twitterURL + 'statuses/show/'+id+'.json?callback=dispReply2', reply_ele); 
    314317                return; 
    315318        } 
     
    347350        popup_id = id 
    348351        callPlugins("popup", $('popup'), user, id); 
    349         $('popup_link_user').href = 'http://twitter.com/' + user; 
    350         $('popup_link_status').href = 'http://twitter.com/' + user + '/statuses/' + id; 
     352        $('popup_link_user').href = twitterURL + user; 
     353        $('popup_link_status').href = twitterURL + user + '/statuses/' + id; 
    351354        $('popup_status_delete').style.display = (user == myname ? "block" : "none"); 
    352355        $('popup').style.display = "block"; 
     
    369372        $("loading").style.display = "display"; 
    370373        if ($("text" + popup_id)) $("text" + popup_id).style.textDecoration = "line-through"; 
    371         enqueuePost('http://twitter.com/status/destroy/' + popup_id + '.xml', 
     374        enqueuePost(twitterURL + 'status/destroy/' + popup_id + '.xml', 
    372375                function(){$("loading").style.display = "none";}, function(){$("loading").style.display = "none";}); 
    373376        return false; 
     
    376379update = function() { 
    377380        callPlugins("update"); 
    378         update_ele = loadXDomainScript('http://twitter.com/statuses/friends_timeline?seq=' + (seq++) + 
     381        update_ele = loadXDomainScript(twitterURL + 'statuses/friends_timeline?seq=' + (seq++) + 
    379382                                                '&count=' + max_count + '&callback=twShow' + (since_id ? '&since_id='+since_id : ''), update_ele); 
    380383} 
     
    425428        if (img.src.indexOf('throbber') >= 0) return; 
    426429        var f = img.src.indexOf('empty') >= 0; 
    427         img.src = 'http://twitter.com/images/icon_throbber.gif'; 
    428         enqueuePost('http://twitter.com/favourings/' + (f ? 'create' : 'destroy') + '/' + id + '.xml', 
     430        img.src = twitterURL + 'images/icon_throbber.gif'; 
     431        enqueuePost(twitterURL + 'favourings/' + (f ? 'create' : 'destroy') + '/' + id + '.xml', 
    429432                function(){ img.src = 'http://assets3.twitter.com/images/icon_star_' + (f ? 'full' : 'empty') + '.gif'; }, 
    430433                function(){ img.src = 'http://assets3.twitter.com/images/icon_star_' + (!f ? 'full' : 'empty') + '.gif'; }); 
     
    432435// followとremove 
    433436function follow(f) { 
    434         enqueuePost('http://twitter.com/friendships/' + (f ? 'create' : 'destroy') + '/' + last_user + '.xml', switchUser); 
     437        enqueuePost(twitterURL + 'friendships/' + (f ? 'create' : 'destroy') + '/' + last_user + '.xml', switchUser); 
    435438        $("loading").style.display = "block"; 
     439} 
     440// ユーザ情報を表示 
     441function twUserInfo(user) { 
     442        elem = $('user_info'); 
     443        elem.innerHTML = makeUserInfoHTML(user); 
     444        callPlugins("newUserInfoElement", elem, user); 
     445        if (myname != user.screen_name) 
     446                update_ele2 = loadXDomainScript(twitterURL + 'friendships/exists.json?seq=' + (seq++) + 
     447                                                                '&user_a=' + myname + '&user_b=' + user.screen_name + 
     448                                                                '&callback=twFollow', update_ele2); 
    436449} 
    437450// 自分の最新の発言を受信 
     
    485498        for (var j in tw) callPlugins("gotNewMessage", tw[j]); 
    486499        tw.reverse(); 
     500        if (nr_page == 1) { 
     501                $("tw").innerHTML += '<div onClick="getNext(this)" id="get_old">▽(2)</div>'; 
     502                nr_page = 2; 
     503        } 
    487504        twShowToNode(tw, $("tw"), false, false, true, true); 
    488505} 
    489 function twShow2(tw) { 
    490         var user_info = $("user_info"); 
     506function twOld(tw) { 
    491507        var tmp = $("tmp"); 
    492508        if (tmp && tmp.parentNode) tmp.parentNode.removeChild(tmp); 
    493         if (cur_page == 1 && !fav_mode && user_info && tw.length > 0) { 
    494                 var user = tw[0].user; 
    495                 user_info.innerHTML = makeUserInfoHTML(user); 
    496                 callPlugins("newUserInfoElement", user_info, user); 
    497                 if (myname != user.screen_name) 
    498                         update_ele2 = loadXDomainScript('http://twitter.com/friendships/exists.json?seq=' + (seq++) + 
    499                                                                         '&user_a=' + myname + '&user_b=' + user.screen_name + 
    500                                                                         '&callback=twFollow', update_ele2); 
    501         } 
     509        var cnt = twShowToNode(tw, $("tw"), false, true); 
     510        if (cnt) $("tw").innerHTML += '<div onClick="getNext(this)" id="get_old">▽('+nr_page+')</div>'; 
     511} 
     512function twShow2(tw) { 
     513        if (userinfo_timeout) { 
     514                clearTimeout(userinfo_timeout); 
     515                userinfo_timeout = false; 
     516        } 
     517        var tmp = $("tmp"); 
     518        if (tmp && tmp.parentNode) tmp.parentNode.removeChild(tmp); 
     519        var user_info = $("user_info"); 
     520        if (cur_page == 1 && !fav_mode && user_info && tw.length > 0) 
     521                twUserInfo(tw[0].user, user_info, 1); 
    502522        twShowToNode(tw, $("tw2c"), !!user_info && !fav_mode, cur_page > 1); 
    503523        if (selected_menu.id == "reply" || selected_menu.id == "user" && last_user.indexOf(',') < 0) { 
     
    517537} 
    518538function twShowToNode(tw, twNode, no_name, after, animation, check_since) { 
     539        var cnt = 0; 
    519540        $('loading').style.display = 'none'; 
    520541        if (failover_timeout) { 
     
    541562                        pNode.insertBefore(s, pNode.childNodes[0]); 
    542563                } 
     564                cnt++; 
    543565        } 
    544566        pNode.removeChild(dummy); 
     
    565587        if (animation) { 
    566588                nr_tw += len; 
     589                nr_recv += len; 
    567590                while (nr_tw > nr_limit) { 
    568591                        var last_node = twNode.childNodes[twNode.childNodes.length-1]; 
     
    572595        } 
    573596        if (check_since) since_id = tw[0].id; 
     597        return cnt; 
    574598} 
    575599// 新規twitの出現アニメーション処理 
     
    591615        get_next_func(); 
    592616} 
     617function getOldTL() { 
     618        update_ele2 = loadXDomainScript(twitterURL + 'statuses/friends_timeline.json?seq=' + (seq++) + 
     619                                '&count=' + max_count + '&page=' + (nr_page++) + '&id=' + last_user + 
     620                                '&callback=twOld', update_ele2); 
     621} 
    593622function getNextFuncCommon() { 
    594623        if (selected_menu.id == "user" && !fav_mode) 
    595                 update_ele2 = loadXDomainScript('http://twitter.com/statuses/user_timeline.json?seq=' + (seq++) + 
     624                update_ele2 = loadXDomainScript(twitterURL + 'statuses/user_timeline.json?seq=' + (seq++) + 
    596625                                        '&count=' + max_count_u + '&page=' + (++cur_page) + '&id=' + last_user + 
    597626                                        '&callback=twShow2', update_ele2); 
    598627        else if (selected_menu.id == "user" && fav_mode) 
    599                 update_ele2 = loadXDomainScript('http://twitter.com/favorites/' + last_user + '.json?seq=' + (seq++) + 
     628                update_ele2 = loadXDomainScript(twitterURL + 'favorites/' + last_user + '.json?seq=' + (seq++) + 
    600629                                        '&page=' + (++cur_page) + '&callback=twShow2', update_ele2); 
    601630        else if (selected_menu.id == "reply") 
    602                 update_ele2 = loadXDomainScript('http://twitter.com/statuses/replies.json?seq=' + (seq++) + 
     631                update_ele2 = loadXDomainScript(twitterURL + 'statuses/replies.json?seq=' + (seq++) + 
    603632                                        '&page=' + (++cur_page) + '&callback=twShow2', update_ele2); 
    604633} 
     
    618647} 
    619648function switchTL() { 
     649        get_next_func = getOldTL; 
    620650        switchTo("TL"); 
    621651} 
     
    623653        switchTo("reply"); 
    624654        $("loading").style.display = "block"; 
    625         update_ele2 = loadXDomainScript('http://twitter.com/statuses/replies.json?seq=' + (seq++) + 
     655        update_ele2 = loadXDomainScript(twitterURL + 'statuses/replies.json?seq=' + (seq++) + 
    626656                                                                                '&callback=twShow2', update_ele2); 
    627657} 
     
    635665        if (users.length == 1) { 
    636666                $("tw2h").innerHTML = "<div id=\"user_info\"></div>"; 
    637                 update_ele2 = loadXDomainScript('http://twitter.com/statuses/user_timeline.json?seq=' + (seq++) + 
    638                                                         '&count=' + max_count_u + '&id=' + user + '&callback=twShow2', update_ele2); 
     667                update_ele2 = loadXDomainScript(twitterURL + 'statuses/user_timeline.json?seq=' + (seq++) + 
     668                                        '&count=' + max_count_u + '&id=' + user + '&callback=twShow2', update_ele2); 
     669                userinfo_timeout = setTimeout(function(){ 
     670                                                        update_ele2 = loadXDomainScript(twitterURL + 'users/show/' + 
     671                                                        user + '.json?callback=twUserInfo', update_ele2); }, 10000); 
    639672        } else { 
    640673                users_log = []; 
     
    642675                        xds.abort(users_xds[i]); 
    643676                users_xds = users.map(function(u) { 
    644                         xds.load('http://twitter.com/statuses/user_timeline.json?id=' + u + 
     677                        xds.load(twitterURL + 'statuses/user_timeline.json?id=' + u + 
    645678                                                         '&count=' + max_count_u, twShow3); 
    646679                }); 
     
    652685        fav_mode = 1; 
    653686        $("tw2c").innerHTML = ""; 
    654         update_ele2 = loadXDomainScript('http://twitter.com/favorites/' + last_user + '.json?seq=' + (seq++) + 
     687        update_ele2 = loadXDomainScript(twitterURL + 'favorites/' + last_user + '.json?seq=' + (seq++) + 
    655688                                                                                '&callback=twShow2', update_ele2); 
    656689} 
     
    658691        switchTo("direct"); 
    659692        $("loading").style.display = "block"; 
    660         direct_ele1 = loadXDomainScript('http://twitter.com/direct_messages.json?seq=' + (seq++) + 
     693        direct_ele1 = loadXDomainScript(twitterURL + 'direct_messages.json?seq=' + (seq++) + 
    661694                                                                                '&callback=twDirect1', direct_ele1); 
    662         direct_ele2 = loadXDomainScript('http://twitter.com/direct_messages/sent.json?seq=' + (seq++) + 
     695        direct_ele2 = loadXDomainScript(twitterURL + 'direct_messages/sent.json?seq=' + (seq++) + 
    663696                                                                                '&callback=twDirect2', direct_ele2); 
    664697} 
     
    667700        $("tw2h").innerHTML = '<p><a target="twitter" onClick="return clickLink(this)" href="index.html"><b>twicli</b></a> : browser-base Twitter client</p><hr>' + 
    668701                                        '<p><form onSubmit="switchUser($(\'user_id\').value); return false;">show user info : @<input type="text" size="15" id="user_id" value="' + myname + '"><input type="image" src="go.png"></form></p><hr>' + 
    669                                         '<p><b>Preferences:</b><form onSubmit="setPreps(this.limit.value, this.maxc.value, this.maxu.value, this.freq.value, this.list.value, this.user_style.value); return false;">max #msgs in TL: <input name="limit" size="5" value="' + nr_limit + '"><br>#msgs in TL on update (max=200): <input name="maxc" size="3" value="' + max_count + '"><br>#msgs in user on update (max=200): <input name="maxu" size="3" value="' + max_count_u + '"><br>update frequency: <input name="freq" size="3" value="' + updateFreq + '"> sec<br>Plugins:<br><textarea cols="30" rows="4" name="list">' + pluginstr + '</textarea><br>user stylesheet:<br><textarea cols="30" rows="4" name="user_style">' + user_style + '</textarea><br><input type="submit" value="Save"></form></p><hr>' 
     702                                        '<p><b>Preferences:</b><form onSubmit="setPreps(this.limit.value, this.maxc.value, this.maxu.value, this.interval.value, this.list.value, this.user_style.value); return false;">max #msgs in TL: <input name="limit" size="5" value="' + nr_limit + '"><br>#msgs in TL on update (max=200): <input name="maxc" size="3" value="' + max_count + '"><br>#msgs in user on update (max=200): <input name="maxu" size="3" value="' + max_count_u + '"><br>update interval: <input name="interval" size="3" value="' + updateInterval + '"> sec<br>Plugins:<br><textarea cols="30" rows="4" name="list">' + pluginstr + '</textarea><br>user stylesheet:<br><textarea cols="30" rows="4" name="user_style">' + user_style + '</textarea><br><input type="submit" value="Save"></form></p><hr>' 
    670703        callPlugins("miscTab", $("tw2h")); 
    671704        $("loading").style.display = "block"; 
    672         update_ele2 = loadXDomainScript('http://twitter.com/account/rate_limit_status.json?seq=' + (seq++) + 
     705        update_ele2 = loadXDomainScript(twitterURL + 'account/rate_limit_status.json?seq=' + (seq++) + 
    673706                                                                                '&id=' + myname + '&callback=twLimit', update_ele2); 
    674707} 
    675 function setPreps(limit, maxc, maxu, freq, plugin_list, style) { 
     708function setPreps(limit, maxc, maxu, interval, plugin_list, style) { 
    676709        writeCookie('ver', 0.1, 3652); 
    677710        writeCookie('limit', limit, 3652); 
    678711        writeCookie('max_count', maxc, 3652); 
    679712        writeCookie('max_count_u', maxu, 3652); 
    680         writeCookie('update_freq', freq, 3652); 
     713        writeCookie('update_interval', interval, 3652); 
    681714        writeCookie('tw_plugins', plugin_list, 3652); 
    682715        writeCookie('user_style', style, 3652); 
     
    688721        // 初回アップデート 
    689722        setTimeout(update, 0); 
    690         setInterval(update, updateFreq*1000); 
     723        setInterval(update, updateInterval*1000); 
    691724        // ログインしていなかったときなどに20秒でログインを試みる 
    692725        failover_timeout = setTimeout(function(){ switchTo("misc"); $("tw2c").innerHTML = '<iframe style="display:block" src="http://twitter.com/home" width="100%" height="400"></iframe>' }, 20*1000); 
     
    728761 
    729762// 自ユーザ名ロード 
    730 loadXDomainScript('http://twitter.com/statuses/user_timeline.json?count=1&callback=twUser'); 
     763loadXDomainScript(twitterURL + 'statuses/user_timeline.json?count=1&callback=twUser'); 
    731764</script> 
    732765</body>