digital 千里眼 @abp_jp

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

CyclicAutoReloader

URL を指定して周期的にページを自動リロードするスクリプト を「バージョンアップ(wedata 対応)」+「名称変更」しようとしたら… userscripts.org からうまくインストールできなくなってしまった… orz
別スクリプト にしました

別名、テレビ番組表リローダー(ダサっ)

以下のような機能の需要はユーザー間で共通ではないだろうか…

  • 1分間隔でページ更新(為替情報、株価情報、)
  • 1時間間隔でページ更新(テレビ番組表)

⇒ (AutoPagerize 同様)wedata.net で設定を共有…

通常のタイマー動作とは異なる

通常のタイマー タイマーをセットした現在時刻から決められた時間を経過するとリロード
CyclicAutoReloader セットした現在時刻は無視。例えば20分設定なら、現在時刻に関わらずその倍数の時間ピッタリでリロードする(0分、20分、40分)
  • サーバー側でページ内容が更新されるタイミングわかってる場合に便利

インストール

必要なアドオン Greasemonkey または
Scriptish
スクリプトのインストール http://userscripts.org/scripts/show/105714
設定(wedata.net) http://wedata.net/databases/CyclicAutoReloader/items
  • FirefoxScriptish でしか動作確認してないので…動作確認情報や不具合などあれば遠慮無くどうぞ
設定値
url 正規表現で対象 URL を指定(ドットのエスケープを忘れずに)
nextMinute リロード間隔を指定(現在の分を nextMinute で割った端数は切り捨て)
nextHour リロード間隔を1時間単位で指定。不要なら 0 を指定(省略不可)
exampleUrl この設定が適用される URL の例
  • 設定できるのは wedata.net からだけじゃない。スクリプト内の SITEINFO 変数にプライベートな設定が可能
  • wedata.net 更新後は「Clear Cache」を忘れずに
スクリプト
// ==UserScript==
// @name           CyclicAutoReloader
// @namespace      http://d.hatena.ne.jp/k2jp/
// @id             CyclicAutoReloader@k2jp
// @description    Reload specific pages cyclically.
// @version        0.1
// @author         k2jp
// @require        https://raw.github.com/gist/434406/3cd10875724c2d0fd4c3567a18c6087cc7161f8a/wedata.js
// @contributer    azu <https://gist.github.com/434406>
// @description    Reload pages cyclically
// @include        http://*
// @include        https://*
// @exclude        about:blank
// @homepage       http://userscripts.org/scripts/show/105714
// @icon           http://www.st-hatena.com/users/k2/k2jp/profile.gif
// ==/UserScript==
// ChangeLog
//              0.1  : Initial Release
//                     (Successor of "Page Reloader with Presets": http://userscripts.org/scripts/show/103760).
(function(){
  const SITEINFO = [
                      // Private: Rules not shared
                      /* sample
                      {
                        url:        '^http://finance\.yahoo\.com/',
                        nextMinute: '10',
                        nextHour:   '0',
                        exampleUrl: 'http://finance.yahoo.com/'
                      },
                      */
                      {
                        url:        '^http://www\.sample\.com/',
                        nextMinute: '30',
                        nextHour:   '0',
                        exampleUrl: 'http://www.sample.com/'
                      }
  ];

  var database = new Wedata.Database('http://wedata.net/databases/CyclicAutoReloader/items.json');
  // clear cache
  GM_registerMenuCommand( 'CyclicAutoReloader - clear cache', function() {database.clearCache();} );

  var CyclicAutoReload = function(confData){
    var targetMinute, targetHour, targetTime;
    if( ('url' in confData) && new RegExp(confData.url.trim()).test(location.href)
        && ('nextMinute' in confData) && 0<=(targetMinute = parseInt(confData.nextMinute.trim(), 10))
        && ('nextHour' in confData) && 0<=(targetHour = parseInt(confData.nextHour.trim(), 10)) ){
      // exclude nextMinut = 0 and nextHour = 0
      if((targetMinute === 0) && (targetHour === 0)) return;
      
      // Calculate difference
      targetTime = new Date();
      if(targetMinute === 0){
        targetTime.setMinutes(targetHour*60, 0, 0);
      }else{
//console.log("testing");
        targetTime.setMinutes( targetTime.getMinutes() + targetMinute - (targetTime.getMinutes()%targetMinute) + (targetHour*60), 0, 0 );
//console.log(targetTime);
      }
      setTimeout( function(){ window.location.reload(); } , targetTime.getTime() - new Date().getTime() );
    }
  }

  // for shared SITEINFO
  database.get(function(items) {
    items.forEach( function(item){CyclicAutoReload(item.data);} );
  });

  // for local private SITEINFO
  SITEINFO && SITEINFO.length > 0 && SITEINFO.forEach(CyclicAutoReload);

}) ();