update.はじめに多くのプログラマーにとって、最大の関心事は主に2つです。Scriptで解決するという話です。夫婦円満の秘訣は、財布を奥さんに預けることである先人達は、後世の若者たちのために良い知恵を遺してくれました。リスクを共にする夫婦間でお金の管理をクリアーにすることが夫婦円満の秘訣ということです。我が家でも先達の知恵に倣い、お給料を全て奥さんに預けてお小遣い制を導入しています。お金の管理を不透明にするやっかいな代物があります。ネットショッピングに欠かせないクレジットカードです。10年ほど前であれば、クレジットカード利用明細が毎月カード会社から郵送されてきたので、奥さんが利用明細を見ることで出費の透明性が担保されていました。最近では利用明細は電子化されており、個人のID・パスワードが無いと見ることができません。ID・パスワードを奥さんに渡すのも嫌だし、毎月毎月PDFやCSVでダウンロードして奥さんに渡すのも激しくめんどくさいです。Scriptでクレジットカード利用明細を自動で取得する毎月のように利用明細を奥さんから督促されるので、頭にきて自動で利用明細を取得するツールを作ることにしました。ツールに要求される機能は以下の3つです。Script(以降GAS)を使うと結構簡単に実現できるみたいなので、GASの勉強がてら作って見ることにしました。Driveへのファイル保存、トリガーによる定期実行にも対応しており、機能が充実しています。おまけに無料で使えます。Driveのスクリプトエディタで新しいプロジェクトを作成します。Scriptを選択して作れます1。CSV)をダウンロードする自分のメインカードはJCBカードです。JCBカードではMyJCBという会員サイトで、利用明細をPDFかCSVでダウンロードできます。UrlFetchAppでログイン処理まずは、ログイン処理をGASで書いてみます。GASではUrlFetchAppを使うことで、HTTPリクエストを簡単に実装できます。params)を使ってサクッと書くことができます。具体的なMyJCBへのログイン処理のコードは以下のようになります。};}HTTPResponseでPDFファイル取得MyJCBにログインできたら、次は利用明細ページからPDFをダウンロードします。利用明細ページはhttps://my.jcb.co.jp/iss-pc/member/details_inquiry/detail.html?detailMonth=1&output=webという形式で、URLパラメータのdetailMonthで表示する月を指定するようになっています。detailMonthは1が当月、2が前月、以降3,4,...と過去に遡って指定するようになっており、表示したい年月を直接指定できないので、ちょっと不便です。毎月当月分のしか取得しないので、常にdetailMonth=1でよいでしょう。PDFのダウンロード用URLはhttps://my.jcb.co.jp/iss-pc/member/details_inquiry/detailDbPdf.html?detailMonth=1&output=pdfという形式2で、同じくdetailMonth=1で当月の明細を取得できます。PDFダウンロード処理のコードは以下のようになります。Driveを使うことにします。Driveに保存する際はBlob形式の方が都合がいいので、HTTPResponse.getBlob()を使ってBlob形式でPDFファイルを取得します。ちなみに、なぜかMyJCBではPDFダウンロードURLに直接アクセスしてもPDFダウンロードできません。利用明細ページに飛ばされます。事前に必ず利用明細ページを踏まないといけないようです。Refererに利用明細ページURLを設定しておいてもダメです。仕組みがよく判りません。Driveにファイルを保存するにはDriveAppを使います。保存先のFolderオブジェクトを取得し、createFile(blob)メソッドの引数にPDFファイルのBlobオブジェクトを渡します。Driveに保存したファイルであれば、共有リンクをメールに貼り付けるだけで奥さんに渡せます。permissionType)メソッドを使います。accessTypeにはDriveApp.Access.ANYONE_WITH_LINK、permissionTypeにはDriveApp.Permission.VIEWを指定します。共有リンクはgetUrl()で取得します。pdfDetail.getUrl();利用明細の電子ファイルをメール添付して送信する利用明細のPDFダウンロードができたら、次はメール送信処理を実装します。options)を使えば、ファイル添付やHTMLメールなどのリッチなメールが送信できますが、今回は共有リンクを貼り付けただけのシンプルなメール送信を実装します。"下記URLからダウンロードしてください。options)のoptionで{from:'別のメールアドレス'}とすれば指定できるらしいです3。毎月定期実行するGASのコードを定期実行するには、トリガーの設定を行います。定期実行したいコードをfunctionとして定義します。月タイマーで毎月指定の日付に実行するように設定する。毎月5日には当月の利用明細がダウンロードできるらしいので、とりあえず5日で設定。動かしてみたこんな風にメールが来る!リンクをクリックするとPDFの利用明細も見られる!奥さんも大喜び。自分も毎月の督促から開放され大喜び。我が家に再び平和が戻ったのでありました。おまけ:GASのクォータGASには便利なAPIがたくさんありますが、使用量に制限があります。https://developers.google.com/apps-script/guides/services/quotas?hl=ja例えば、MailApp.sendEmail()は100件/日、UrlFetchApp.fetch()は20,000回/日。今回みたいに1件/月みたいな軽いツールなら全く問題ないけど、毎日メールを頻繁に飛ばすようなアグレッシブなツールだと厳しいかも。追記:2015.12.12我が家で運用しているコードです。https://github.com/takeruko/gas-myjcb-detail-checkerSpreadSheetのスクリプトとかでもOKです。SpreadSheetを新規に作成し、メニューの[ツール]-[スクリプトエディタ]からGASのプロジェクトを作成できます。利用明細ページがdetail.html?output=webなので、PDFもdetail.html?output=pdfにすればいいのに、なぜかdetailDbPdf.html?output=pdfです。?教えてMyJCBの中の人。↩リファレンスにはFromを変更する方法が書いていないので、非推奨なのかも。(2代目タイガーマスク)を尊敬しているので、緑が好きです。Qiitaってブランドカラーが緑なのですごくイイですね。あと、獣神サンダー・ライガーさんにだけは頭が上がりません。upLoginユーザーは見つかりませんでした。