掲示板

【iOSショートカット】チップの履歴をまとめて表示する

チップ、今何枚贈ったかなぁ?
って数えていたのが面倒だったのでスクリプトを作ってみました。

※自己責任でお使いください。


使い方は、こんな感じ。
チップ履歴の画面を表示しておいて、共有から以下を選択すると、 

1AD00027-9E5C-424A-B78E-96CE397DC758.jpeg



このように、日付毎、名前毎の送受信数がまとめて表示されます。
(Sが贈った枚数、Rが受け取った枚数)

A7C14EE0-9A8A-40E2-B968-4C9D125AD64B.jpeg



ショートカットはこんな感じで、しるしの部分を押すとスクリプトが入れられるので、後に記載するスクリプトを入れます。

5B0942D0-F75B-40EF-B546-2E09D8B2EB50.jpeg



詳細は、共有シートに表示、共有シートタイプは、SafariのWebページをチェックします。

8ED89258-B5ED-4055-B8EB-30C592DA0E35.jpeg



スクリプトには以下を貼り付けます。
●張り付けるJavascript

ーーここからーー
var result = [];

// ページタイトル取得
var title = document.getElementsByClassName("my-2 lead font-weight-bold");

// エラー処理
if (title.length != 1) {
 result.push("エラー1:length="+title.length);
 completion(result);
}
else {
 if (title[0].innerText != "チップの履歴") {
  result.push("エラー2:text="+title[0].innerText);
  completion(result);
 }
}

// 年月取得
var month = document.getElementsByClassName("media-body text-center form-control-plaintext");
result.push(month[0].innerText);

// テーブル取得
var chip = new Object();
var elements = document.getElementsByClassName("table small mb-0");
var table = elements[0];

// テーブル集計
send_total = 0;
recv_total = 0;
for (row of table.rows) {
 c = row.cells;
 row_class_name = row.className;
 if (c[1].innerText != "日時"
  && row_class_name != "table-danger"
  && row_class_name != "table-hilight") {
  date = c[1].innerText;
  send = c[2].innerText;
  recv = c[3].innerText;
  name = c[4].innerText;

  namedate = date.replace(/[0-9]+:[0-9]+/g, '')+' '+name;
  if (send == '10MB'){
   chip[namedate] = (chip[namedate] || 0) + 10000;
   send_total++;
  }
  if (recv == '10MB'){
   chip[namedate] = (chip[namedate] || 0) + 1;
   recv_total++;
  }
 }
}

// ソート
keys = Object.keys(chip);
keys.sort();
// 結果出力
for (key of keys) {
 result.push(
  key+' : S='+Math.floor(chip[key]/10000)+', R='+chip[key]%10000
 );
}
result.push("合計 : S="+send_total+", R="+recv_total);

// completionを呼び出して終了
completion(result);
ーーここまでーー



スクリプトのインデントは、マイネ王で表示できるように全角スペースで入れています。全角で入れても、ショートカットは動くみたいです。

namedate =
の行を変更すると、名前毎で日付毎まとめ、名前毎の月合計 とかのバリエーションが作れます。ちょっと考えてみましょう!w

月を跨いだ集計はできないので、そういう場合はExcelなどにコピーして集計するしかないと思います。




ページを読んで計算しているだけなので、危害は加えないと思いますが、バグ等を見つけたらコメントください。




※ウィンドウを開く版(こちらなら、長くても省略されることはないと思います)
---
javascript:var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.arrayIteratorImpl=function(c){var a=0;return function(){return a<c.length?{done:!1,value:c[a++]}:{done:!0}}};$jscomp.arrayIterator=function(c){return{next:$jscomp.arrayIteratorImpl(c)}};$jscomp.makeIterator=function(c){var a="undefined"!=typeof Symbol&&Symbol.iterator&&c[Symbol.iterator];return a?a.call(c):$jscomp.arrayIterator(c)};
function show_chip(){var c=[],a=document.getElementsByClassName("my-2 lead font-weight-bold");if(1!=a.length)c.push("\u30a8\u30e9\u30fc1\uff1alength="+a.length),alert(c.join("\n"));else if("\u30c1\u30c3\u30d7\u306e\u5c65\u6b74"!=a[0].innerText)c.push("\u30a8\u30e9\u30fc2\uff1atext="+a[0].innerText),alert(c.join("\n"));else{a=new Date;a.getFullYear();("0"+String(Number(a.getMonth())+1)).slice(-2);("0"+String(Number(a.getDate()))).slice(-2);a=document.getElementsByClassName("media-body text-center form-control-plaintext");
c.push(a[0].innerText);a={};var d=document.getElementsByClassName("table small mb-0")[0],f=0,g=0;d=$jscomp.makeIterator(d.rows);for(var b=d.next();!b.done;b=d.next()){var e=b.value;b=e.cells;row_class_name=e.className;if("\u65e5\u6642"!=b[1].innerText&&"table-danger"!=row_class_name&&"table-hilight"!=row_class_name){e=b[2].innerText;var h=b[3].innerText,k=b[4].innerText;b=b[1].innerText.replace(/[0-9]+:[0-9]+/g,"")+" "+k;"10MB"==e&&(a[b]=(a[b]||0)+1E4,f++);"10MB"==h&&(a[b]=(a[b]||0)+1,g++)}}d=Object.keys(a);
d.sort().reverse();d=$jscomp.makeIterator(d);for(b=d.next();!b.done;b=d.next())key=b.value,c.push(key+" : S="+Math.floor(a[key]/1E4)+", R="+a[key]% 1E4);c.push("\u5408\u8a08 : S="+f+", R="+g);win=window.open("");win.document.write(c.join("<br>"))}}show_chip();
---


12 件のコメント
1 - 12 / 12
ポップアップで出てくるメンバーリストの整形も、コピーしてからショートカット呼び出ししていましたが、Javascriptで書いたほうが簡単に書けそうです。

Safariのwebを入力にしないと、Javascriptが実行できないようですが、ショートカット内で単独で動かしたりする方法はないんですかね?iOSの前のバージョンではあったようですが‥

563F7DB0-2412-4353-B2D5-6296F3EA9B4B.jpeg

月合計は、集計するキーを名前だけにしてやればよいので、
namedate = name;
にすればよいです。

04FADA37-7890-4319-9523-5407EC03DEC7.jpeg

名前順は、集計するキーを名前+日付(時刻は消す)にしてやればよいので、
namedate = name+' '+date.replace(/[0-9]+:[0-9]+/g, '');
となります。
最初はこれでやってたので、変数名が namedateなんてことになっているんですね。

まぁ、半年後に読んだら完全に忘れていることでしょう‥
ブックマークレット、AndroidのChromeでも動いたw
PCのChromeは長すぎるalertは途中で省略されたけど、iPhoneのSafariは全部見えるので、今日限定にする必要はないなぁ。
Closure CompilerもChrome Dev Toolも、googleほんとすごい。
退会済みメンバー
退会済みメンバーさん
ビギナー
ありがとうございました♪
3種類ともバッチリ動きました<(_ _)>
凄く便利です!愛用させて頂きます😊
チップエラーの行を読み飛ばすように修正。
最近、iPhoneでチップを数えるブックマークレットが動かんなぁ?と思ってまだ調べていませんでした。何が起きているんだろう?
単に、エラー対応前のを使っていた模様。

ブックマークレットだと、結果が長いと省略されてしまうので、ウィンドウを開いて出力する版を追加。
チップの履歴の表示が変更されたため、修正。
列が1つ増えたので、c[0]→c[1] のようにずらしました。
コメントするには、ログインまたはメンバー登録(無料)が必要です。