?D::MotionBros このページをアンテナに追加 RSSフィード

2010-08-17 Tue

Greasemonkey のメニューに再インストールコマンドを仕込んでみる

| 01:14 |  Greasemonkey のメニューに再インストールコマンドを仕込んでみる - ?D::MotionBros を含むブックマーク  Greasemonkey のメニューに再インストールコマンドを仕込んでみる - ?D::MotionBros のブックマークコメント

アップデートする度に再インストールするサイトまで移動するのが面倒なので

    var sourceurl   = 'http://userscripts.org/scripts/source/81409.user.js' ;
    var scriptname  = 'twitterViewConversation' ;
    GM_registerMenuCommand( scriptname + ' re-install', reinstall ) ;
    function reinstall() {
        if( confirm('do you reinstall ' + scriptname + ' ?') == true ){
            window.location.href = sourceurl ;
        }
    }

というソースを仕込んでみた。

2010-07-13 Tue

Twitter 上で返信元を表示する greasemonkey

| 01:47 |  Twitter 上で返信元を表示する greasemonkey - ?D::MotionBros を含むブックマーク  Twitter 上で返信元を表示する greasemonkey - ?D::MotionBros のブックマークコメント

Twitter 上で何に対する返信なのかは in reply to のリンクに隠されているのですがそれを表示する greasemonkey です。

http://userscripts.org/scripts/show/81409

// ==UserScript==
// @name            twitterViewConversation
// @namespace       http://www.motionbros.com
// @description     view conversation on Twitter
// @include         http://twitter.com/*
// @version         0.1
// ==/UserScript==

(function() {
    function fetch() {
        var as = document.getElementById("timeline").getElementsByTagName("a") ;
        for ( var i = 0 ; i < as.length ; i ++ ){
            if( as[i].text.search( /^in reply to / ) == 0 ){
                fetchConversationTweet( as[i] ) ;
            }
        }
    }

    function fetchConversationTweet(a) {
        GM_xmlhttpRequest({
            method: "GET",
            url: a.href,
            onload: function(resp) {
                //GM_log(resp.responseText) ;
                var div     = document.createElement("div") ;
                div.innerHTML = resp.responseText ;
                var status  = a.href.substr( a.href.lastIndexOf("/")+1 ) ;
                var tweet   = document.createElement("li") ;
                var margin	= 26 ;
                var imgoffset = 14 ;
                var body    = document.createElement("span") ;
                body.className = "status-body" ;
                body.style.marginLeft = (56 - imgoffset) + "px" ;
                body.style.width      = (425 - margin) + "px" ;
                var content = document.createElement("span") ; 
                var actions = document.createElement("span") ;
                var entry   = document.createElement("span") ;
                var meta    = document.createElement("span") ;
                var hover   = document.createElement("ul") ;
                var clear   = document.createElement("ul") ;
                clear.className = "meta-data clearfix" ;
                
                var divs    = div.getElementsByTagName("div") ;
                for( var i = 0 ; i < divs.length ; i ++ ){
                    if( divs[i].id === "status_" + status ){
                        var spans   = divs[i].getElementsByTagName("span") ;
                        for( var j = 0 ; j < spans.length ; j ++ ){
                            if( spans[j].className === "actions" ){
                                actions = spans[j] ;
                            }else if( spans[j].className === "entry-content" ){
                                entry   = spans[j] ;
                                entry.style.color   = "#666" ;
                            }else if( spans[j].className === "meta entry-meta" ){
                                meta    = spans[j] ;
                            }
                        }
                        var uls     = divs[i].getElementsByTagName("ul") ;
                        for( var j = 0 ; j < uls.length ; j ++ ){
                            if( uls[j].className === "actions-hover" ){
                                hover   = uls[j] ;
                                break ;
                            }
                        }
                        tweet.className = divs[i].className ;
                        tweet.id        = divs[i].id ;
                        tweet.style.marginLeft  = margin + 'px' ;
                        break ;
                    }
                }
                var thumb   = document.createElement("span") ;
                thumb.className = "thumb vcard author" ;
                var name    = document.createElement("strong") ;
                var as      = div.getElementsByTagName("a") ;
                for( var i = 0 ; i < as.length ; i ++ ){
                    if( as[i].className === "tweet-url profile-pic" ){
                        as[i].lastChild.style.width  = (50 - imgoffset) + "px" ;
                        as[i].lastChild.style.height = (50 - imgoffset) + "px" ;
                        thumb.appendChild(as[i]) ;
                        tweet.appendChild(thumb) ;
                    }
                    if( as[i].className === "tweet-url screen-name" ){
                        name.appendChild(as[i]) ;
                        entry.innerHTML = "<strong>" + name.innerHTML + "</strong> " + entry.innerHTML ;
                        content.appendChild(actions) ;
                        content.appendChild(entry) ;
                        body.appendChild(content) ;
                        body.appendChild(meta) ;
                        body.appendChild(hover) ;
                        body.appendChild(clear) ;
                        tweet.appendChild(body) ;
                    }
                }
                var reply = a.parentNode.parentNode.parentNode ;
                reply.parentNode.insertBefore(tweet, reply.nextSibling) ;
                a.parentNode.removeChild(a) ;
            },
        });
    }

    fetch() ;
    setInterval(fetch,5000);
})();

2010-07-10 Sat

jpeg, gif, png への直リンクに対応

| 02:29 | jpeg, gif, png への直リンクに対応 - ?D::MotionBros を含むブックマーク jpeg, gif, png への直リンクに対応 - ?D::MotionBros のブックマークコメント

Twitter 画像表示 Greasemonkey で画像ファイルへの直リンクに対応しました。

no title

// ==UserScript==
// @name            twitterViewImage
// @namespace       http://www.motionbros.com
// @description     view image on Twitter
// @include         http://twitter.com/*
// @version         0.5
// ==/UserScript==

(function() {
    function fetch() {
        var as = document.getElementById("timeline").getElementsByTagName("a") ;
        for ( var i = 0 ; i < as.length ; i ++ ){
            if( as[i].parentNode.className !== "entry-content" ){
                continue ;
            }
            decodeUrl( as[i] ) ;
            if( as[i].host == "p.twipple.jp" ){
                if( wasFetched( as[i] ) ){
                    continue ;
                }
                var jpeg = as[i].href ;
                jpeg    = jpeg.substr(jpeg.lastIndexOf("/")+1) ;
                jpeg    = jpeg.replace(/(.)/g, "/$1") ;
                jpeg    = "http://" + as[i].host + "/data" + jpeg + ".jpg" ;
                appendImage( as[i], jpeg ) ;
            }
            if( as[i].host == "rapeco.jp" ){
                if( wasFetched( as[i] ) ){
                    continue ;
                }
                //fetchImage( as[i] , '//div[@class="yumImageBox shadow"]/img' ) ;
                fetchImageRapeco( as[i] ) ;
            }
            if( as[i].host == "twitpic.com" ){
                if( wasFetched( as[i] ) ){
                    continue ;
                }
                var jpeg = as[i].href ;
                jpeg    = jpeg.substr(jpeg.lastIndexOf("/")) ;
                jpeg    = "http://" + as[i].host + "/show/iphone" + jpeg ;
                appendImage( as[i], jpeg ) ;
            }
            if( as[i].href.search(/\.gif$/i) != -1
                || as[i].href.search(/\.jpe?g$/i) != -1
                || as[i].href.search(/\.png$/i) != -1 ){
                if( wasFetched( as[i] ) ){
                    continue ;
                }
                appendImage( as[i], as[i].href ) ;
            }
        }
    }
    
    function decodeUrl(a) {
        if( a.host == "bit.ly" || a.host == "j.mp" ){
            var bitlyid = "twitterviewimage" ;
            var apikey  = "R_0f0ae80a45290a65b82d99dfd704088c" ;
            var url     = "http://api.bit.ly/v3/expand?shortUrl=" + a.href
                          + "&login=" + bitlyid
                          + "&apiKey=" + apikey
                          + "&format=txt" ;
            //GM_log(url) ;
            GM_xmlhttpRequest({
                method: "GET",
                url: url,
                onload: function(resp) {
                    //GM_log(resp.responseText) ;
                    a.href = resp.responseText ;
                },
            });
        }
    }
    
    function wasFetched(a) {
        imgs = a.parentNode.getElementsByTagName("img") ;
        for( var i = 0 ; i < imgs.length ; i ++ ){
            if( imgs[i].alt === a.href ){
                return true ;
            }
        }
        return false ;
    }
    
    function appendImage(a, image_url) {
        var img = document.createElement("img") ;
        img.src = image_url ;
        img.style.maxWidth = "440px" ;
        img.alt = a.href ;
        a.parentNode.appendChild(img) ;
    }
    
    function fetchImageRapeco(a) {
        GM_xmlhttpRequest({
            method: "GET",
            url: a.href,
            onload: function(resp) {
                //GM_log(resp.responseText) ;
                var div = document.createElement("div") ;
                div.innerHTML = resp.responseText ;
                var divs = div.getElementsByTagName("div") ;
                for( var i = 0 ; i < divs.length ; i ++ ){
                    if( divs[i].className === "yumImageBox shadow" ){
                        var img = divs[i].getElementsByTagName("img")[0] ;
                        img.style.maxWidth = "440px" ;
                        img.alt = a.href ;
                        a.parentNode.appendChild(img) ;
                    }
                }
            },
        });
    }
    
    fetch() ;
    setInterval(fetch,5000);
})();

2010-07-08 Thu

Twitpic と rapeco.jp に対応

| 03:02 |  Twitpic と rapeco.jp に対応 - ?D::MotionBros を含むブックマーク  Twitpic と rapeco.jp に対応 - ?D::MotionBros のブックマークコメント

Twitter 画像表示 Greasemonkey

  • Twitpic 対応
  • rapeco.jp 対応

に対応しました。

no title

// ==UserScript==
// @name            twitterViewImage
// @namespace       http://www.motionbros.com
// @description     view image on Twitter
// @include         http://twitter.com/*
// @version         0.4
// ==/UserScript==

(function() {
    function fetch() {
        var as = document.getElementsByTagName("a") ;
        for ( var i = 0 ; i < as.length ; i ++ ){
            decodeUrl( as[i] ) ;
            if( as[i].host == "p.twipple.jp" ){
                if( wasFetched( as[i] ) ){
                    continue ;
                }
                var jpeg = as[i].href ;
                jpeg    = jpeg.substr(jpeg.lastIndexOf("/")+1) ;
                jpeg    = jpeg.replace(/(.)/g, "/$1") ;
                jpeg    = "http://" + as[i].host + "/data" + jpeg + ".jpg" ;
                appendImage( as[i], jpeg ) ;
            }
            if( as[i].host == "rapeco.jp" ){
                if( wasFetched( as[i] ) ){
                    continue ;
                }
                fetchImage( as[i] , '//div[@class="yumImageBox shadow"]/img' ) ;
            }
            if( as[i].host == "twitpic.com" ){
                if( wasFetched( as[i] ) ){
                    continue ;
                }
                var jpeg = as[i].href ;
                jpeg    = jpeg.substr(jpeg.lastIndexOf("/")) ;
                jpeg    = "http://" + as[i].host + "/show/iphone" + jpeg ;
                appendImage( as[i], jpeg ) ;
            }
        }
    }
    
    function decodeUrl(a) {
        if( a.host == "bit.ly" || a.host == "j.mp" ){
            var bitlyid = "twitterviewimage" ;
            var apikey  = "R_0f0ae80a45290a65b82d99dfd704088c" ;
            var url     = "http://api.bit.ly/v3/expand?shortUrl=" + a.href
                          + "&login=" + bitlyid
                          + "&apiKey=" + apikey
                          + "&format=txt" ;
            //GM_log(url) ;
            GM_xmlhttpRequest({
                method: "GET",
                url: url,
                onload: function(resp) {
                    //GM_log(resp.responseText) ;
                    a.href = resp.responseText ;
                },
            });
        }
    }
    
    function wasFetched(a) {
        imgs = a.parentNode.getElementsByTagName("img") ;
        for( var i = 0 ; i < imgs.length ; i ++ ){
            if( imgs[i].alt === a.href ){
                return true ;
            }
        }
        return false ;
    }
    
    function appendImage(a, image_url) {
        var img = document.createElement("img") ;
        img.src = image_url ;
        img.style.maxWidth = "440px" ;
        img.alt = a.href ;
        a.parentNode.appendChild(img) ;
    }
    
    function fetchImage(a, xpath) {
        GM_xmlhttpRequest({
            method: "GET",
            url: a.href,
            onload: function(resp) {
                //GM_log(resp.responseText) ;
                var div = document.createElement("div") ;
                div.innerHTML = resp.responseText ;
                var divs = div.getElementsByTagName("div") ;
                for( var i = 0 ; i < divs.length ; i ++ ){
                    if( divs[i].className === "yumImageBox shadow" ){
                        var img = divs[i].getElementsByTagName("img")[0] ;
                        img.style.maxWidth = "440px" ;
                        img.alt = a.href ;
                        a.parentNode.appendChild(img) ;
                    }
                }
            },
        });
    }
    
    fetch() ;
    setInterval(fetch,5000);
})();

2010-07-07 Wed

bit.ly の展開と複数枚の表示に対応

| 02:46 |  bit.ly の展開と複数枚の表示に対応 - ?D::MotionBros を含むブックマーク  bit.ly の展開と複数枚の表示に対応 - ?D::MotionBros のブックマークコメント

Twitter 画像表示 Greasemonkey

  • bit.ly (j.mp) の展開
  • 複数枚の表示

に対応してみました。

no title

Twitter でついっぷるの画像を観る greasemonkey - ?D::MotionBros ではつぶやきの下に画像があれば既に表示済みという判定にしていたのですが2枚まとめて投稿される場合もあるので alt に url を仕込んで既に表示されたかどうかの判断に使っています。

// ==UserScript==
// @name            twitterViewImage
// @namespace       http://www.motionbros.com
// @description     view image on Twitter
// @include         http://twitter.com/*
// @version         0.3
// ==/UserScript==

(function() {
    function fetch() {
        var as = document.getElementsByTagName("a") ;
        for ( var i = 0 ; i < as.length ; i ++ ){
            decodeUrl( as[i] ) ;
            if( as[i].host == "p.twipple.jp" ){
                if( wasFetched( as[i] ) ){
                    continue ;
                }
                var jpeg = as[i].href ;
                jpeg    = jpeg.substr(jpeg.lastIndexOf("/")+1) ;
                jpeg    = jpeg.replace(/(.)/g, "/$1") ;
                jpeg    = "http://" + as[i].host + "/data" + jpeg + ".jpg" ;
                var img = document.createElement("img") ;
                img.src = jpeg ;
                img.style.maxWidth = "440px" ;
                img.alt = as[i].href ;
                as[i].parentNode.appendChild(img) ;
            }
        }
    }
    
    function decodeUrl(a) {
        if( a.host == "bit.ly" || a.host == "j.mp" ){
            var bitlyid = "twitterviewimage" ;
            var apikey  = "R_0f0ae80a45290a65b82d99dfd704088c" ;
            var url     = "http://api.bit.ly/v3/expand?shortUrl=" + a.href
                          + "&login=" + bitlyid
                          + "&apiKey=" + apikey
                          + "&format=txt" ;
            //GM_log(url) ;
            GM_xmlhttpRequest({
                method: "GET",
                url: url,
                onload: function(resp) {
                    //GM_log(resp.responseText) ;
                    a.href = resp.responseText ;
                },
            });
        }
    }
    
    function wasFetched(a) {
        imgs = a.parentNode.getElementsByTagName("img") ;
        for( var i = 0 ; i < imgs.length ; i ++ ){
            if( imgs[i].alt === a.href ){
                return true ;
            }
        }
        return false ;
    }
    
    fetch() ;
    setInterval(fetch,5000);
})();

2010-07-05 Mon

Twitter でついっぷるの画像を観る greasemonkey

| 00:12 |  Twitter でついっぷるの画像を観る greasemonkey - ?D::MotionBros を含むブックマーク  Twitter でついっぷるの画像を観る greasemonkey - ?D::MotionBros のブックマークコメント

できた。no title

// ==UserScript==
// @name            twitterViewImage
// @namespace       http://www.motionbros.com
// @description     view image on Twitter
// @include         http://twitter.com/*
// @include         http://brizzly.com/*
// @version         0.2
// ==/UserScript==

(function() {
    function fetch() {
        as = document.getElementsByTagName("a") ;
        for ( i = 0 ; i < as.length ; i++ ){
            if( as[i].host == "p.twipple.jp" ){
                if( wasFetched( as[i] ) ){
                    continue ;
                }
                var jpeg = as[i].href ;
                jpeg    = jpeg.substr(jpeg.lastIndexOf("/")+1) ;
                jpeg    = jpeg.replace(/(.)/g, "/$1") ;
                jpeg    = "http://" + as[i].host + "/data" + jpeg + ".jpg" ;
                var img = document.createElement("img") ;
                img.src = jpeg ;
                img.style.maxWidth = "440px" ;
                as[i].parentNode.appendChild(img) ;
            }
        }
    }
    
    function wasFetched(a) {
        return ( a.parentNode.lastChild.nodeName == "IMG" ) ;
    }
    fetch() ;
    setInterval(fetch,5000);
})();

2010-07-04 Sun

Twitter でついっぷるの画像を直接見るには?

| 00:09 |  Twitter でついっぷるの画像を直接見るには? - ?D::MotionBros を含むブックマーク  Twitter でついっぷるの画像を直接見るには? - ?D::MotionBros のブックマークコメント

greasemonkey で以下のようなコードを書いてみたんだけど more ボタンを押した後には反応しません…

どうすればいいんだろ?

2010/07/06 追記: setInterval 使えばOKでした。 Twitter でついっぷるの画像を観る greasemonkey - ?D::MotionBros

// ==UserScript==
// @name           twitterViewImage
// @namespace      http://www.motionbros.com
// @include        http://twitter.com/*
// ==/UserScript==

(function() {
    as = document.getElementsByTagName("a") ;
    for ( i = 0 ; i < as.length ; i++ ){
        if( as[i].host == "p.twipple.jp" ){
            var jpeg = as[i].href ;
            jpeg    = jpeg.substr(jpeg.lastIndexOf("/")+1) ;
            jpeg    = jpeg.replace(/(.)/g, "/$1") ;
            jpeg    = "http://" + as[i].host + "/data" + jpeg + ".jpg" ;
            var img = document.createElement("img") ;
            img.src = jpeg ;
            as[i].parentNode.appendChild(img) ;
        }
    }
    
})();
Error : RSSが取得できませんでした。
最新言及ISBN/ASIN 20 件
  • ワイヤレスサラウンドヘッドセット
  • アンチャーテッド 海賊王と最後の秘宝 デラックスエディション 【早期購入特典】オリジナルPlayStation4テーマ同梱&【Amazon.co.jp限定】武器カスタムスキン「雪原用武器」が入手できるプロダクトコード付
  • BUFFALO Giga 11n/a&11n/g AOSS2対応 無線LAN親機 【Wii U動作確認済み、iPhone5・Android端末対応】 WZR-600DHP
  • FUJITSU ScanSnap S1500 FI-S1500
  • カール事務器 裁断機 ディスクカッター A4サイズ DC-210N
  • 月に囚われた男 コレクターズ・エディション [DVD]
  • 月に囚(とら)われた男 [Blu-ray]
  • エスター [Blu-ray]
  • エスター [DVD]
  • ドロップ スペシャル・エディション [DVD]
  • ドロップ スタンダード・エディション [DVD]
  • アヒルと鴨のコインロッカー [DVD]
  • Sucker Punch
  • アマルフィ 女神の報酬 スタンダード・エディション [DVD]
  • アマルフィ 女神の報酬 ビギンズ・セット ブルーレイディスク (本編BD+特典DVD)2枚組 [Blu-ray]
  • ロード・トゥ・パーディション <特別編> [DVD]
  • ロード・トゥ・パーディション [Blu-ray]
  • 海がきこえる [DVD]
  • なくもんか 豪華版 <初回生産限定> [DVD]
  • なくもんか [Blu-ray]
レビューまとめはこちら
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |