digital 千里眼 @abp_jp

アナログな日常とデジタルの接点

URL を指定して周期的にページを自動リロードするスクリプト

マーケット情報やテレビ番組表のように「一定間隔で繰り返し」+「時間ピッタリ」にページをリロードしたい場合があります。そのようなケースで使える簡単な Greasemonkey スクリプトです

利用にはFirefox アドオンの Greasemonkey もしくは Scriptish が必要です(未確認だけど Google Chrome でも動くはず)

  1. http://userscripts.org/scripts/show/103760 から簡単にインストール
  2. インストール後はプリセットの urlList60(1時間毎にリロード)、urlList30(30分毎にリロード)、urlList10(10分毎にリロード)、urlList1(1分毎にリロード)にそれぞれ URL (の一部)を追加するだけ

リロードのタイミングは、秒が常にゼロ。分も設定の倍数であることに注意

// ==UserScript==
// @name           Page Reloader with Presets
// @description    Reload specific pages cyclically
// @version        1.0
// @author         k2jp
// @namespace      http://d.hatena.ne.jp/k2jp/
// @description    Reload pages periodically
// @include        http://*
// @include        https://*
// @exclude        about:blank
// ==/UserScript==
// Home URL          : http://userscripts.org/scripts/show/103760
// ChangeLog
//              1.0  : Initial Release.

(function(){
    window.addEventListener("load", 
        function(){
	    var urlList60 = [
		// Updates once an hour when Minutes:Seconds = 00:00
		'http://tv.so-net.ne.jp/chart/'
	    ];
            var urlList30 = [
		// Updates once every 30 minutes when Minutes:Seconds = 00:00 or 30:00
                'http://www.translink.co.jp/'
	    ];
            var urlList10 = [
		// Updates once every 10 minutes when Minutes:Seconds = 00:00 or 10:00 or 20:00 or 30:00 or 40:00 or 50:00
                'http://finance.yahoo.com/'
	    ];
            var urlList1 = [
		// Updates once a minute when Seconds = 00
                'http://chartpark.com/', 
                'http://chartpark.net/',
                'http://finance.yahoo.com/intlindices?',
                'http://www.google.com/finance'
            ];
	    var isElementMatchList = function(element, index, array){
		return (window.location.href.indexOf(element) != -1);
	    };
	    var urlCondition60 = function() {
		return urlList60.some(isElementMatchList);
	    };
            var urlCondition30 = function(){
		return urlList30.some(isElementMatchList);
            };
            var urlCondition10 = function(){
		return urlList10.some(isElementMatchList);
            };
            var urlCondition1 = function(){
		return urlList1.some(isElementMatchList);
            };
            var targetTime = new Date();
	    targetTime.setSeconds(0);
	    var diff2Update = 0;
	    if( urlCondition60() ){
		targetTime.setMinutes(60);
		diff2Update = targetTime.getTime() - new Date().getTime();
	    }
	    if( urlCondition30() ){
		targetTime.setMinutes(targetTime.getMinutes() + 30 - targetTime.getMinutes()%30);
		diff2Update = targetTime.getTime() - new Date().getTime();
	    }
	    else if( urlCondition10() ){
		targetTime.setMinutes(targetTime.getMinutes() + 10 - targetTime.getMinutes()%10);
		diff2Update = targetTime.getTime() - new Date().getTime();
	    }
	    else if( urlCondition1() ){
		targetTime.setSeconds(60);
		diff2Update = targetTime.getTime() - new Date().getTime();
	    }
	    if(diff2Update){
		setTimeout(	function(){
					window.location.reload();
	                        }
		, diff2Update);
	}
    }
    , false);
}) ();