技術のメモ帳

気が向いたときに書いてます

Google Apps Script

[GAS]Google Apps Scriptでツイートを投稿する

今回は、Twitter REST APIを用いて、Google Apps Scriptでツイートを投稿するまでの実装を行ってみます。 ツイートを投稿するには、OAuth認証を行う必要があります。OAuth認証については、はてなウェブサービスで利用した、google-apps-oauth1ライブラリを利…

[GAS]はてなブログAtomPubを扱うライブラリ

前回に引き続き、はてなのウェブサービスを扱うライブラリをGoogle Apps Scriptで実装しました。今回は、はてなブログです。 このライブラリを利用すると、Google Apps Scriptから、ブログエントリ一覧の取得、ブログエントリの取得・作成・編集・削除、カテ…

[GAS]はてなブックマーク REST APIを扱うライブラリ

今回は、Google Apps Scriptで、はてなブックマーク REST APIを扱うライブラリを作成してみました。 当エントリでは、利用方法を簡単に説明したいと思います。 アプリケーション登録 まず、はてなアカウントを取得し、下記ページを参考に、アプリケーション…

[GAS]Google Apps Scriptは、Strictモードを認識するのか?

TIPSです。 結論から言うと、JavaScriptのインタプリタを利用しているので、Strictモードで動作します。 確認したコードは、次の通りです。 function strict() { "use strict"; var obj = { p: 1, p: 2 }; // Strictモードの場合、同一keyは代入不可 Logger.…

[GAS]doPostでログを出力する方法

今回はTIPSです。Google Apps Scriptの公開アプリケーションで、doPost()を実装するとき、Logger.log()メソッドが使えないので、ログが確認しにくい難点があります。他の方はどうやっているのか分かりませぬが、苦肉の策として、SpreadSheetを開いて書き込む…

[GAS]PivotalTrackerのアクティビティをSlackに通知する

今回は、PivotalTrackerのActivity WebHookを受けて、(Bot経由で)Slackにアクティビティを送信して通知するWebアプリケーションを、Google Apps Scriptで書いてみます。 実装手順としては次の通りです。 新規gsファイルを作成 doPost()関数を作成 Pivotal …

[GAS]シートの行列の幅と高さを変更して方眼紙化する

今回は、Google Apps Scriptを使って、表示中のシートの行列の幅と高さを変更し、いわゆる、エクセル方眼紙化する関数を実装してみます。 以下が仕様となります。 メニューから関数を実行 promptで幅を入力 すべての行列が2の幅に変更される 実装したコード …

[GAS]SpreadsheetでYouTube検索・閲覧ができるAngularJSアプリケーション

今回は前回に引き続き、YouTube Serviceを利用したGoogle Apps Scriptを書いていきます。 Spreadsheetでサイドバーから展開できるアドオンを想定して実装します。 動作サンプル 仕様は次の通りです。 メニューからサイドバーを展開 検索フォームに文字列を入…

[GAS]SpreadsheetからYouTube動画を再生する

今回は、SpreadsheetからYouTube動画を再生するコードをGoogle Apps Scriptで書いてみました。 単純に埋め込み用のiframeを表示するだけでは脳がないので、アクティブなセルからIDを取得して、表示するようにしてみました。 実装したコード 特に難しいことは…

[GAS]MarkdownからHTMLに変換するWebアプリケーション

今回は、marked.jsを使って、MarkdownからHTMLに変換するWebアプリケーションを実装します。 実装したコード Spreadsheetからサイドバーを展開して、表示するアプリケーションです。 ファイル構成は、code.gs, layout.html, stylesheet.html, script.htmlと…

[GAS]Spreadsheetでモーダルダイアログやサイドバーを表示する

今回は、SpreadsheetでUIをカスタマイズする実装をしてみます。 新規のSpreadsheetを作成して、スクリプトエディタで下記コードを貼り付けます。 HTMLをレンダリングする まず、カスタムメニューからスクリプトを実行できるよう、onOpen()とonEdit()でメニュ…

[GAS]特定キーワードの人気レシピを解析する

今回は、cookpadの人気レシピを探すスクリプトを書いてみます。 スクレイピングによる情報収集においては、以下のマナーをご覧のうえ、お試しください。 仕様は次の通りです。 Spreadsheetのメニューから、スクリプトを実行するUIを構築(キーワードの入力を…

[GAS]YQL(Yahoo Query Language)を使って、スクレイピングをする

今回は、YQL(Yahoo Query Language)を使って、スクレイピングするサンプルを実装します。 YQLとは? YQLはYahoo.comが提供している、あらゆるWeb上のリソースにアクセスすることができる開発者向けのAPIです。 YQL - Yahoo Developer Network ざっくりとメ…

[GAS]ウェブサイトをスクレイピングする

Google Apps Scriptは、HTTPの処理や定期実行ができるため、スクレイピングも簡単にできます。 実装手順としては、次の通りです。 UrlFetchAppで対象コンテンツをfetch HtmlResponseクラスのgetContentText()メソッドで文字列化 正規表現で文字列を加工 加工…

[GAS]HTML/XMLをパースする

Google Apps Scriptは、サーバサイドJavaScriptのため、DomparserクラスやjQueryを用いたDOMの操作ができません。 そのため、HTML/XMLをパースする際は、XMLServiceクラスを利用します。 XMLServiceの使い方 XML Service Service | Apps Script | Google Dev…

[GAS]SpreadsheetでTwitter/Facebook/Google等ソーシャルメディアでのシェア状況を出力する関数

donReachという海外のAPIを利用して、Spreadsheetでソーシャルメディアでのシェア状況を出力する関数を作成します。 実装する関数 UrlFetchApp()でリクエストして、JSONをパースして返す、というシンプルな関数です。 function shareCount(url, media) { try…

[GAS]Spreadsheetで入力されたURLのPinterestのPin件数を出力する関数

SpreadSheetで指定したセルの文字列(URL)の、PinterestのPin件数を出力するGoogle Apps Scriptの関数です。 今回は返り値がJSONPのみのため、String型に変換してパースする処理が入っています。 function pinterestCount(url) { try { if (!urlValidator(u…

[GAS]Spreadsheetで入力されたURLのFacebookでいいね/シェア件数を出力する関数

SpreadSheetで指定したセルの文字列(URL)の、Facebookでいいね/シェア件数を出力するGoogle Apps Scriptの関数です。 実装する関数 UrlFetchApp.fetch()を用いて、APIにGETリクエストを投げる、シンプルな実装です。 function facebookStats(url, kind) { …

[GAS]Spreadsheetで入力されたURLのLinkedInでのシェア件数を出力する関数

SpreadSheetで指定したセルの文字列(URL)の、LinkedInでのシェア件数を出力するGoogle Apps Scriptの関数です。 実装する関数 UrlFetchApp.fetch()を用いて、APIにGETリクエストを投げる、シンプルな実装です。 function linkedInShareCount(url) { try { …

[GAS]Spreadsheetで入力されたURLのFeedlyの購読者数を出力する関数

SpreadSheetで指定したセルの文字列(URL)の、Feedlyの購読者数を出力するGoogle Apps Scriptの関数です。 FeedlyのAPIについては、The feedly Cloud APIのドキュメントを参照してください。 ライブラリ 実装の手間を省くため、ライブラリを作成しました。 …

[GAS]Gmailの受信時に特定の処理を実行するライブラリ

Gmailのメール受信時に特定処理を実行するライブラリ GmailObserverを書きました。 実際は、受信時のトリガーは存在しないため、Apps Scriptのトリガーに[1分おきに実行]と登録し、メール受信をトリガーにした処理を行います。 条件にマッチしたメールのID…

[GAS]Spreadsheetで文字列の意味を英和辞書・和英辞書・ウィキペディアから検索して出力する関数

SpreadSheetで指定したセルの文字列の意味を、デ辞蔵Webサービスが提供するEJDict英和辞典・Edict和英辞典・ウィキペディア日本語版から検索して出力するGoogle Apps Scriptの関数です。 SpreadSheetでなくとも利用可能ですが、分かりやすいのでそのように書…

[GAS]Spreadsheetで入力されたURLのツイート件数を出力する関数

SpreadSheetで指定したセルの文字列(URL)の、ツイート件数を出力するGoogle Apps Scriptの関数です。 なお、こちらは非公式のAPIとなりますので、突如使えなくなることもあります。ご注意ください。 実装する関数 UrlFetchApp.fetch()を用いて、APIにGETリ…

[GAS]SpreadSheetで入力されたURLのはてなブックマークの件数を出力する関数

SpreadSheetで指定したセルの文字列(URL)の、はてなブックマークの件数を出力するGoogle Apps Scriptの関数です。 使用するAPIは、はてなブックマーク件数取得API - Hatena Developer Centerとなります。 実装する関数 非常に単純ですが、UrlFetchApp.fetc…

[GAS]複数のファイルをzip形式に圧縮する

今回は、複数のURLのリソースを取得し、zip形式に圧縮する関数を書いてみます。 function createZipFileByUrls(urls) { try { var blobs = Object.keys(urls).map(function(i){ return UrlFetchApp.fetch(urls[i]).getBlob() }), filename = new Date().getT…

[GAS]kimono APIから変更通知を受け取り、変更内容をGmailで送信する

下記にインスパイアされたエントリとなります。 こちらの記事では、SendGridではなく、Gmailを利用して実装していきます。 それでは、まずは、kimono APIの設定から。 kimonoとは? APIを提供していないウェブサイトの情報が収集できるWEBサービスです。 スク…

[GAS]はてなブックマーク Web Hookを扱うライブラリ

Google Apps Scriptで、はてなブックマーク Web Hookを扱う場合、タグのパースやコメントの抽出などの処理が必要なため、ライブラリ化しました。 過去に書いた、以下の記事を実装しやすくしたパターンとなります。 使い方 [リソース]→[ライブラリ]を選択…

[GAS]SpreadSheetで短縮URLを出力する関数(bit.ly編)

SpreadSheetで指定したセルの文字列(URL)の、bit.lyのAPIを使って、短縮URLとして出力するGoogle Apps Scriptの関数です。 以前goo.gl版を実装したので、その関数をベースに実装していきます。 SpreadSheetを新規作成し、[ツール]→[スクリプトエディタ]か…

[GAS]英文を翻訳したCSVがダウンロードできるWEBアプリケーション

今回も、Google Apps ScriptのHTML Serviceを使って、演習的なWEBアプリケーションを実装します。 アプリの要件は次の通りです。 HTMLでFormが表示/入力できる 入力された英文は、文章単位で分割される 各文章データは、選択された言語コードで翻訳される CS…

[GAS]URLのドキュメントがダウンロードできるWEBアプリケーション

今回は、Google Apps ScriptのHTML Serviceを使って、URLのドキュメントをダウンロードするだけのWEBアプリケーションを実装します。 Google Apps ScriptでWEBアプリケーションを実装するための演習です。 仕様は次の通りです。 HTMLでFormが表示できること …

[GAS]HTMLを表示するWebアプリケーション

JSONを返す処理は、何回か行っていたのですが、HTMLを返すアプリケーションは作っていなかったので、今回はHello Worldしたいと思います。 公式リファレンスのコードと殆ど同じです。 実装する関数とテンプレート まずは、code.gsから。 function doGet() { …

[GAS]URLのスクリーンショット画像をGyazoに保存する

URLからスクショ画像を作成し、GyazoにアップロードするスクリプトをGoogle Apps Scriptで書きました。 スクショの生成には、screenshotlayer APIを利用しました(要登録。100件/月が無料で利用できます)。 なお、Gyazo × Google Apps Scriptについては、過…

[GAS]Amazon S3にファイルをアップロードする

S3のCRUD操作は、S3ライブラリを利用すれば、手軽に実行できます。 ライブラリの詳細は、下記を参照してください。 Amazon S3 API Binding for Google Apps Script | Engineering | Etc ライブラリのコードも公開されているので、教材としてもなかなか良さげ…

[GAS]DataURIを送信して、GoogleDriveに保存するAPI

今回は、POSTされたDataURIから画像ファイルを作成し、Google DriveにアップロードするAPIをGoogle Apps Scriptで書きます。 以前書いたGoogleドライブにファイルをアップロードするの関数の応用となります。 Driveの有効化については、上記エントリを参照し…

[GAS]URLをPOSTしてGyazoに画像ファイルをアップロードするAPIとブックマークレット

今回は、POSTされたURLの画像ファイルをGyazoにアップロードするAPIをGoogle Apps Scriptで書きます。 以前書いたGyazoに画像ファイルをアップロードするの関数の応用となります。 アクセストークンの取得については、上記エントリを参照してください。 実装…

[Ruby]sayコマンドとffmpegで多言語音声ファイルを作成する

Mac独自のsayコマンドを触っていたら、案外面白かったので、以前Google Apps Scriptで書いたSpreadSheetでテキストを翻訳する関数を使って、外国語学習で使えそうな音声ファイルを作成するスクリプトをRubyで書いてみました。 音声サンプル 以下がスクリプト…

[GAS]住所から緯度経度を出力する関数

SpreadSheetで指定したセルの文字列(住所)の、緯度経度を出力するGoogle Apps Scriptの関数です。 SpreadSheetを新規作成し、[ツール]→[スクリプトエディタ]から、エディタを起動します。 エディタ起動後、次の関数を入力し、保存します。 function getGeo…

[GAS]SpreadSheetで郵便番号から住所を取得する関数

SpreadSheetで指定したセルの文字列(郵便番号)から、住所を取得する関数です。 SpreadSheetを新規作成し、[ツール]→[スクリプトエディタ]から、エディタを起動します。 エディタ起動後、次の関数を入力し、保存します。 function getAddressByPostalCode(p…

[GAS]SpreadSheetで短縮URLを出力する関数(goo.gl編)

SpreadSheetで指定したセルの文字列(URL)の、短縮URLを出力するGoogle Apps Scriptの関数です。 SpreadSheetを新規作成し、[ツール]→[スクリプトエディタ]から、エディタを起動します。 エディタ起動後、次の関数を入力し、保存します。 function shortenU…

[GAS]SpreadSheetでテキストを翻訳する関数

SpreadSheetで指定した文字列を、翻訳するGoogle Apps Scriptの関数です。 SpreadSheetを新規作成し、[ツール]→[スクリプトエディタ]から、エディタを起動します。 エディタ起動後、次の関数を入力し、保存します。 function translate(text, sourceLanguage…

[GAS]送信結果をJSONPで返す

JSONPとは? JSONは、JavaScript Object Notationの略で、軽量のデータ交換フォーマットです。 では、JSONPは何かと言うと、 JSONP(JSON with padding)とは、scriptタグを使用してクロスドメインなデータを取得する仕組みのことである。 HTMLのscriptタグ、…

[GAS]Googleフォームを経由せず、外部からデータを更新する

お問い合わせやフィードバック等を受け付ける場合、Googleフォームで手軽に受け入れ先を作成できますが、UIのカスタマイズに制限があり、また、外部リンクとなるため、少し不便な部分もあります。 本エントリでは、外部サイトからPOST送信し、SpreadSheetを…

[GAS]はてなブックマークのWebhook経由で、ブックマーク情報をSpreadSheetに保存する

はてなブックマークのコンテンツを追加/更新/削除のタイミングで、任意のURLにリクエストを送信するWebhookがあります。 こちらのトリガーを使って、追加コンテンツをSpreadSheetに保存してみます。 準備 スクリプトファイルを新規で作成し、以下のコードを…

[GAS]フォームの回答結果をSlackにPOSTする

Googleフォームで、フィードバックや苦情を受け付けている場合、そのメッセージをSlackにPOSTすることで、プログラマーが迅速にエンドユーザーの問題解決ができることがあります。 本エントリは、そんなケースを想定したTIPSです。 フォームの準備 今回はサ…

[GAS]Slackに任意のメッセージをPOSTする

SlackへのPostは、SlackAppというライブラリを使うと、非常に簡単に実装できます。 スケジュールに登録したり、メッセージをSpreadSheetで管理すれば、立派なBotが作れます。 アクセストークンの取得と設定 Slackにリクエストするためのトークンを取得します…

[GAS]Googleドライブにファイルをアップロードする

Googleドライブにファイルをアップロードするサンプルです。 拡張サービスの有効化 スクリプトエディタの[リソース]→[Googleの拡張サービス]を選択し、Drive APIを有効化します。 ※Google デベロッパーコンソールからも有効化する必要がありますので、そちら…

[GAS]Gyazoに画像ファイルをアップロードする

アプリケーション登録 アカウント取得後、Gyazo APIよりアプリケーションを登録します。 下記フォームより、アプリケーション名とCallbackを入力すれば、登録完了です。 今回はサンプル用途のため、コールバックは、http://localhost:8080で登録しました。 …

[GAS]HTTPでファイルをPOST送信する

下記は、殆どサンプルコードと同じです。 こちらを応用すれば、集計データを送信して、サーバー側で蓄積・加工することなどが可能になります。 function sendHttpPost() { var response = UrlFetchApp.fetch("http://example.com/image_to_download.jpg"), f…

[GAS]URLからファイルを取得し、メールに添付して送信

Google Apps Scriptで、HTTPからリソースを取得し、 メールに添付して送信するスクリプトです。 HTMLでもJPEGでも基本なんでもいけます。 function sendMailWithUrl() { var response = UrlFetchApp.fetch('http://example.com'), blob = response.getBlob()…

[GAS]テキストファイルを添付して、メールを送信

はてなブログを始めます。 とりあえず、最近、Google Apps Scriptで遊んでいるのでメモ。 CSVファイルを添付する場合も、殆ど同じ要領。 function sendMailWithPlainText() { var filename = 'hello.txt', mimetype = 'text/plain', content = 'hello, plain…