2014年8月20日水曜日

googleで期間を指定して検索するブックマークレットを書いてみた

説明抜きでブックマークレットはこれ


以下の内容でブックマーク(ブックマークレット)を登録する。

javascript:(function%20()%20{var%20cd_max,cd_min,tbs,n;if%20(!isGoogle())%20{alert('google%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93');return%20;}n=window.prompt('%E4%BD%95%E6%97%A5%E4%BB%A5%E5%86%85%E3%81%AE%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E3%82%92%E8%A1%A8%E7%A4%BA%EF%BC%9F',%2090);if%20(!isNum(n))%20{n=90;alert("%E6%97%A5%E6%95%B0%E3%81%AF%E5%8D%8A%E8%A7%92%E6%95%B0%E5%AD%97%E3%81%A7%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%A6%E4%B8%8B%E3%81%95%E3%81%84%E3%80%82\n"+n+"%E6%97%A5%E4%BB%A5%E5%86%85%E3%81%AE%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99");}cd_max=day_ago(0);cd_min=day_ago(n);tbs='cdr%3A1%2Ccd_min%3A'+cd_min+'%2Ccd_max%3A'+cd_max;location.href=cut_tbs()+'&tbs='+tbs;function%20day_ago(day)%20{var%20date=new%20Date();var%20target_date=new%20Date(date.getTime()%20-%20day*24*60*60*1000);return%20target_date.getFullYear()+'%2F'+(target_date.getMonth()+1)+'%2F'+target_date.getDate();}function%20cut_tbs()%20{var%20tmp=location.href.replace(/(&|\?)tbs=[^&]*/g,%20'$1');tmp=tmp.replace(/&+/g,%20'&');tmp=tmp.replace(/\?&/,%20'\?');tmp=tmp.replace(/&$/,%20'');return%20tmp;}function%20isNum(x)%20{return%20(!isNaN(x)%20&&%20x%20!='');}function%20isGoogle()%20{return%20(['www.google.co.jp','www.google.com'].indexOf(document.domain)%20!=%20-1);}})%20();
googleで検索を実行し、検索結果を表示してる状態でブックマーク(ブックマークレット)を実行する。
Firefox 31で動作確認済。
IEでもgoogle chromeでも動くはず。

説明っぽいこと


google検索の「検索ツール」から検索期間を指定できる。
「1時間以内」「24時間以内」「1週間以内」「1ヶ月以内」「1年以内」から選択するか、「期間を指定」で開始日・終了日を指定する。
もう少し簡単に任意の期間を日数で検索できるようにしたくてブックマークレットを書いてみました。

期間指定した時の正しい処理が分からないので、かなり適当に作成。
googleの検索結果のページでブックマークレットを実行すると、期間指定された検索結果を表示する。
デフォルトは90日以内を表示(n=90)。
検索開始日は「今日」から n 日前 の形で指定する。
検索終了日は「今日」固定。
QueryStringの「tbs=~」を削除して、「tbs=cdr:1,cd_min:<検索開始日>,cd_max:<検索終了日>」を追加している。

改行・インデントをつけて書くとこんな感じ。

(function () {
  var cd_max,cd_min,tbs,n;
  if (!isGoogle()) {
    alert('googleではありません');
    return ;
  }
  n = window.prompt('何日以内の検索結果を表示?', 90);
  if (!isNum(n)) {
    n = 90;
    alert("日数は半角数字で入力して下さい。\n" + n + "日以内の検索結果を表示します");
  }
  cd_max = day_ago(0);
  cd_min = day_ago(n);
  tbs = 'cdr%3A1%2Ccd_min%3A' + cd_min + '%2Ccd_max%3A' + cd_max;
  location.href = cut_tbs() + '&tbs=' + tbs;
  function day_ago(day) {
    var date = new Date();
    var target_date = new Date(date.getTime() - day*24*60*60*1000);
    return target_date.getFullYear() + '%2F' + (target_date.getMonth() + 1) + '%2F' + target_date.getDate();
  }
  function cut_tbs() {
    //SAMPLE URL: https://www.google.com/search?tbs=lr%3Alang_ja%2Ccdr%3A1&tbm=#lr=lang_ja&q=abcd&tbs=cd_min%3A2013%2F7%2F26%2Ccd_max%3A2014%2F8%2F20&source=lnt&tbs=cdr:1
    var tmp = location.href.replace(/(&|\?)tbs=[^&]*/g, '$1');
    tmp = tmp.replace(/&+/g, '&');
    tmp = tmp.replace(/\?&/, '\?');
    tmp = tmp.replace(/&$/, '');
    return tmp;
  }
  function isNum(x) {
    return (!isNaN(x) && x != '');
  }
  function isGoogle() {
    return (['www.google.co.jp','www.google.com'].indexOf(document.domain) != - 1);
  }
}) ();

0 件のコメント:

コメントを投稿