カテゴリー別アーカイブ: ネット・PC

Google Apps Script: Googleスプレッドシート: 列番号からアルファベット列名へ変換

GoogleスプレッドシートのGoogle Apps Script:で 列番号からアルファベット列名へ変換する関数です。

ColumnNoToLetter が関数本体で、testColumnNoToLetter がテスト実行関数です。

function testColumnNoToLetter(){
  var c;
  for(i=1;i<100;i++){
    c = ColumnNoToLetter(i);
    Logger.log(i + " = " + c);
  }
}

// 列番号から列アルファベット 列 1 →列 A
function ColumnNoToLetter(num){
  var buf;
  var sheet = SpreadsheetApp.getActiveSheet();
  if(sheet == null){ // スプレッドシートから呼び出されていない
    return sheet;
  }
  buf = sheet.getRange(1, num);
  buf = buf.getA1Notation();
  buf = buf.substring(0,buf.length-1);
  return buf;
}

Googleスプレッドシートのスクリプトエディタに貼り付けてtestColumnNoToLetterを実行すし、”表示” → ”ログ”で、”ログの出力”に結果が表示されます。

log

↓ 参考になるブログがたくさんあります!ぜひどうぞ! ↓
にほんブログ村 その他日記ブログ 日々のできごとへ

表示したくないHTMLを削除するJavascript

ブログなどで作成したページで、ブログシステムで自動的に追加出力されるHTMLで、表示したくないものがある場合に、それを削除するJavascriptコードです。

id名で指定して削除

以下のコードでは、id=”id2″ をもつエレメントを探して、削除しています。
このため、5行目の

<div id="id2">text2</div>

の部分が削除され、表示されなくなります。

<html>
<body>

  <div id="id1">text1</div>
  <div id="id2">text2</div>
  <div id="id3">text3</div>

<script type="text/javascript">
var node = document.getElementById('id2');
if(node != null){
        //console.log("remove node=" + node.id);
	node.parentNode.removeChild(node);
}
</script>

</body>
</html>

class属性の値で指定して削除

次は、class属性で削除する場合のコードです。
以下のコードでは、divタグで class=”class2″ の属性をもつエレメント削除しています。
このため、5行目の

 <div class="class2">text2</div>

の部分が削除され、表示されなくなります。
(2013/01/25)対象Classが複数ある場合に先頭から消すとノードがずれていってしまうため、ノード検索のforループを最後から回して、末尾から消すように変更しました。

<html>
<body>

  <div class="class1">text1</div>
  <div class="class2">text2</div>
  <div class="class3">text3</div>

<script type="text/javascript">
var divNode = document.getElementsByTagName("div");
for (i = divNode.length-1; i  >= 0 ;i--) {
   node = divNode[i];
   //console.log("(" + i + ")class name :" + node.className);
   if(node.className == "rlimg"){
   	//console.log("^^^^^^^^^^^^^remove");
   	node.parentNode.removeChild(node);
   }
}
</script>

</body>
</html>
↓ 参考になるブログがたくさんあります!ぜひどうぞ! ↓
にほんブログ村 その他日記ブログ 日々のできごとへ

[Google Apps Script] GoogleスプレッドシートからFC2ブログへ投稿する

FC2ブログに、毎日、自動で投稿したいことが出てきたので、調べてみました。

Googleスプレッドシート(Google Apps Script)とXML-RPCを使って出来そうだったので、やってみました。

この方法のメリットは、

  1. Google(Gmail)のアカウントがあれば良く、新たにサーバーなどを用意する必要がなく、スケジューリングして自動実行が可能
  2. スプレッドシートとセットで使えるので投稿する記事や制御するためのリストを簡単に管理できる。

です。

Google Apps Script用のXML-RPC clientは
XML-RPC client on Google Apps Script を作りましたよ – @ikikko のはてなブログ さんのものを使用します。
このページには、「今のGoogle Apps Scriptでは外部JSファイルをインクルードするような機能が多分ないので、コピペするしかないと思います。」と書かれていますが、2012年5月より、Libraries – Google Apps Script — Google Developers が使えるようになっているので、ライブラリの仕組みを使て行い。

ikikko/Mimic-for-Google-Apps-Script · GitHub
からダウンロードしました。

ライブラリの準備

新しい、Googleスプレッドシートを用意し、
“ツール”→”スクリプトエディタ” を選択。
下記の画面が表示された場合は、”空のプロジェク”をクリック

スクリプトを作成

無題のプエジェクトが開かれる
赤枠のコードは削除する。


プロジェク初期画面-2

削除したところ

プロジェク初期画面

ここで、

ikikko/Mimic-for-Google-Apps-Script · GitHub

にアクセスし、”mimic-gas.js” のコードを、画面コピー、または、zipダウンロードしてからコピーする。

mimic-gas コピー

コピーした、mimic-gas.jsのコードを “無題プロジェクト”にペーストします。
16行目ぐらいに  ”Mimic (XML-RPC Client for JavaScript) v2.0.1 “と書かれていればOKです。

mimic-gasペースト

以下の様に名称変更する
”無題プロジェクト” → “mimic”    (クリックして変更)
“コード.gs” → ”mimic-gas.gs”   (▼をクリックし、”名前を変更…”で変更)

mimic-gas名前変更

ライブラリの登録

”ファイル” → ”バージョンを管理” をクリック

バージョンを管理

”新規作成”などと入力し、”新しいバージョンを保存”をクリック

バージョンを管理-1

バージョンが保存されます。

バージョンを管理-2

”ファイル” → ”プロジェクトのプロパティ”をクリック

プロジェクトのプロパティ

”プロジェクトキー” の値を、コピー します。

プロジェクトキーのコピー

ライブラリを使う側の設定

”ファイル”→”新規作成 ”→ ” プロジェクト” で、プロジェクトをもう一つ作ります。

プロジェクト作成

プロジェクトが作成されたら
1.プロジェクト名をクリックして、”FC2ブログ投稿”などに変更
2.コードは削除しておく。
3.”リソース” → ”ライブラリを管理”をクリック

ライブラリを管理

”ライブラリを検索”にライブラリの”プロジェクトのプロパティ”でコピーした ”プロジェクトキー” の値 を貼り付け、”選択”をクリック。

ライブラリ検索

”選択”をクリックすると、ライブラリの情報が表示されます。
”バージョン”を選択(この場合、”1 新規作成”)し、”保存”ボタンをクリック。

識別子はデフォルトでタイトル名がコピーされ、この名称でライブラリ呼び出しを行います。識別子は日本語は使えません。下のコードで、ライブラリを識別子を付けて呼び出しているのは以下の様な部分です。
var request = new mimic.XmlRpcRequest(G.fc2.url + '/xmlrpc.php', 'metaWeblog.newPost');
識別子を変更したら、対応する呼び出しコードも変更剃る必要があります。

ライブラリの設定

下の、スクリプトソースコードをコピー&ペーストし、
username
password
adminEmail
を、自分のものに変更します。

publishは、trueにすると、記事を公開でポストしますので、テスト段階では、falseで下書きになるようにしておいた方がよいです。


コード貼り付けと変更

Ctrl+S または、 ”ファイル” → ”保存” で保存します。
“関数を選択”から”test”を選択。(保存しないと出て来ません)

関数を選択

実行

▶ (実行)ボタンをクリックします。

実行

最初に実行するときに”承認が必要です”画面が表示されます。”承認”をクリックします。

承認

”閉じる”をクリック。

確認画面

「関数 test を実行中」 が表示され、実行状態になり、しばらくすると、この表示が消えたら終了です。

関数 test実行中

FC2ブログで投稿確認

FC2にログインし、投稿を確認します。

FC2ブログ投稿確認

スクリプトソース

var G = new Object();
G.fc2 = {
  url: "blog.fc2.com",
  blogid: "",
  username: "FC2ブログのログインユーザー名",    // FC2ブログのログインユーザー名
  password: "FC2ブログのパスワード",             // FC2ブログのパスワード
};
var adminEmail = 'foo@bar.com';   // エラーが発生した場合にエラーメールを送るアドレス

var publish =  false; // true;   // 記事の公開 trueで公開, falseで下書

function test (){
  fc2Post("テストタイトル", "テスト本文" , "未分類" );  // 最後のcategory名は、存在しているものを指定
}

function fc2Post(title, description, category) {
  var request = new mimic.XmlRpcRequest(G.fc2.url + '/xmlrpc.php', 'metaWeblog.newPost');
  request.addParam('');
  request.addParam(G.fc2.username);
  request.addParam(G.fc2.password);
  request.addParam({title: title, description: description, mt_convert_breaks:true }); // 本文中の改行をbrタグで反映
  request.addParam(publish);  // publish(trueで公開, falseで下書. 省略時は下書)

  var blogid = request.send().parseXML();  // 記事を投稿、記事番号が帰る
  if(blogid.faultCode ){  // 投稿できず
    MailApp.sendEmail(
      adminEmail,                     // To:
      "FC2自動投稿エラー" , // Subject
      "faultCode: " + blogid.faultCode +"\n" +
      "faultString: " + blogid.faultString +"\n"
    );
    return;  // Early exit
  }

  // カテゴリの設定
  var categoryId = fc2GetCategoryId(category); // 投稿するカテゴリ名のID番号を取得
  setCategory(categoryId, blogid);  // カテゴリをセット
}

// カテゴリのセット
function setCategory (categoryId, blogid) {
  var request = new mimic.XmlRpcRequest(G.fc2.url + '/xmlrpc.php', 'mt.setPostCategories');
  request.addParam(blogid);
  request.addParam(G.fc2.username);
  request.addParam(G.fc2.password);
  var yy = new Array({categoryId: categoryId, isPrimary: true});
  request.addParam(yy);
  var r = request.send().parseXML();  // 常にtrueが帰る
}

//カテゴリ名からカテゴリIDを取得
function fc2GetCategoryId(categoryName) {
  var categoryId = 0;
  var request = new mimic.XmlRpcRequest(G.fc2.url + '/xmlrpc.php', 'mt.getCategoryList');
  request.addParam('');
  request.addParam(G.fc2.username);
  request.addParam(G.fc2.password);
  var r = request.send().parseXML();  //

  for(var i in r){
    var name = r[i]['categoryName'];
    if(name == categoryName){
      categoryId = r[i]['categoryId']
    }
  }
  return categoryId;
}

課題

  • fc2側で改行コードが無くなってしまう。
    やタグは有効
  • テーマやユーザータグは指定できない
↓ 参考になるブログがたくさんあります!ぜひどうぞ! ↓
にほんブログ村 その他日記ブログ 日々のできごとへ

[Google Apps Script] Googleスプレッドシートを開いた時に、今日の入力セルへ自動ジャンプ

Googleスプレッドシートで、毎日データを記入しているものがある場合に、スプレッドシートを開いた時に、自動的にその日の入力セルにジャンプしてくれると便利です。

googleスプレッドシート 今日の入力セルへ自動ジャンプ

スクリプト

googleスプレッドシートの “ツール” → “スクリプトエディタ” で、以下のスクリプトを貼り付けます。

日付列(または、シートの全データ)を配列に読み込み、今日の日付と同じ行を調べ、その行と指定された列番号のセルに移動させています。
(配列に読み込まず、セルをの一つづつ調べていくと、処理がかなり遅くなってしまいます。)
日付列は、日付データであれば、シート上の表示形式は違っていても大丈夫です。


// onOpen関数はスプレッドシートが開けられる度に自動的に実行される
function onOpen() {
  goToTodayCell(1,3); // 日付列番号 A列が1 ジャンプさせるカラム番号 C
}

function goToTodayCell(dateColNo, jumpColNo ) {
  //var dateColNo = 1;   // 日付列番号 A列が1
  //var jumpColNo = 3;  // ジャンプさせるカラム番号 A列が1

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  sheet.getRange(1,1).setBackgroundColor("red");

  var maxRow = sheet.getMaxRows();//最終行を取得

  var values;
  if(false){
    values = sheet.getDataRange.getValues(); //データを配列に格納 (全データ)
  } else {
    values = sheet.getRange(1, dateColNo , maxRow).getValues();  // 対象絡カラムのみを配列に格納
  }

  var today = new Date();
  var stringToday = yyyymmdd(today);

  var matchRow = maxRow; // マッチする行が無かったら最終行へ

  for (var i = 1; i < maxRow; i++) {
    var dateValue = yyyymmdd(values[i][dateColNo-1]);
    if(stringToday == dateValue){
      matchRow = i+1; // 配列は 0から、シートは1から
    }
  }
  sheet.getRange(matchRow, jumpColNo).activate();  // セルへ移動
  sheet.getRange(1,1).setBackgroundColor("white");
  return;
}

// dateを日付のみにする
// Mon Jan 21 2013 13:37:00 GMT+0900 (JST)  ->  2012/07/05
function yyyymmdd(dateVal)
{
  var stringDate
  var date = new Date(dateVal);
  if(date.toString() == 'Invalid Date'){  //日付データでない
    stringDate = date;
  } else {
    stringDate = date.getFullYear() + "/" + ("0" + (date.getMonth()+1)).slice(-2) + "/" + ("0" + date.getDate()).slice(-2);
  }
  return stringDate;
}

トリガー設定

スプレッドシートを開いた時に onOpen() が呼ばれるようにトリガーを設定します。

”スクリプトエディタ”の”現在のプロジェクのトリガ(時計マーク)”をクリックし、下図のように
実行 → “onOpen”
イベント → “スプレッドシートから” “起動時”
を設定し、”保存” をクリックし保存します。

google apps script トリガー

↓ 参考になるブログがたくさんあります!ぜひどうぞ! ↓
にほんブログ村 その他日記ブログ 日々のできごとへ

ブラウザシェアー自分のサイトがどんなブラウザでアクセスされているか調べてみた

ブラウザ戦争。Chromeが世界ではトップに、日本はIE王国(大西宏) – BLOGOS(ブロゴス) という記事があったので、自分のサイトで確認してみました。

アクセスデータはGoogle Analyticsによるもので、PCだけでなく、スマホなど非PCからのアクセスも含みます。

<h2>一般的なコンシュマー対象のサイトのブラウザシェア</h2>

ブラウザ シェア 一般サイト

まず、一般的なコンシュマー対象のサイトから。

確かにIEが49.96%で圧倒的に多いです。次に多いのがsafari(IOS)20.46%とandroid Browser 17.29% などのスマートフォンで、chromeはわずか 7.14%にとどまります。
このサイトの場合、スマートフォンからのアクセスが1/3を占めています。

<h2>IT系コンテンツ多めサイトのブラウザシェア</h2>
ブラウザ シェア IT系サイト

IT系のコンテンツが多いサイトは、ITリテラシーがある方がアクセスして来ますので、やはりChrome率が高いようで、トップはChrome 29.46%。 IEは26.02%で2位、 3位がSafari(IOS) 19.14% 、僅差4位にFirefox18.28%となっています。

<h2>エンターテイメント系サイトのブラウザシェア</h2>

ブラウザ シェア エンターテイメントサイト

 

エンターテイメント系サイトの場合は、様相がガラッと変わります。
1位は、Android Browser 33.19%で、スマートフォンのブラウザがトップを占めています。2位は、IE 32.02%ですが、3位には再びスマートデバイスのSafari(IOS)18.27%です。
このサイトの場合、数ヶ月前から、スマートフォンなどスマートデバイスからアクセスがPCのアクセスを抜いて、過半数以上占めるようになりました。

<h2>まとめ</h2>
IEとChromeのシェアは、サイトにアクセスするユーザー層によって変わる。また、今後、スマートフォンなどからのアクセスの重要度が増してくる。

 

 

↓ 参考になるブログがたくさんあります!ぜひどうぞ! ↓
にほんブログ村 その他日記ブログ 日々のできごとへ