2012/09/29

Google ドライブのフォームに入力があったらメール送信するスクリプト

GoogleのForm機能は便利なのですが、そのままだとFormに入力があってもメールが配信されません。

Google Apps Scriptsを使って、入力があったらメールが配信されるようにする方法、これを以下のサイトで以前見つけて、随分と便利に使わせていただいてます。
ありがとうございます。
http://creazy.net/2011/03/google_form_mailsend.html

今回、Google docsがdriveになったこともあり画面なんかを新しくしてみました。

まずは、Googole driveから、新しいFORMを作ります。

以前はGoogle docだったものが、Google Driveになったのでここからアクセスかな。
https://drive.google.com/?tab=co&authuser=0#my-drive


作成で、フォームを選んで作ります。

FORMの画面が出てくるので、入力項目を設定していきます。
2つ目以降の項目は、新たに追加していきます。
「お名前」と「メールアドレス」の項目をその名前で作って必須としておくと
メール送信のスクリプトの変更が少なくてすみます。
 ↓
項目の入力が終わったら、保存します。(後で追加変更も可能です。)
保存名でできたスプレッドシートを開きます。
 
メールを送信するスクリプトを追加しましょう。
このスクリプトを追加すると、フォームからの登録時に管理者と登録してくれた人にメールが届きます。

「ツール」の「スクリプトマネージャー」の[新規作成...]ボタン
または
「ツール」の「スクリプトエディター」を選択


最初のスクリプトなので、「Google Apps Script」という画面が出てきます。

左の「スクリプトを作成」の中の「空のプロジェクト」を選択

 ↓
編集画面になるので
----------- 最初に入っている以下のコードを消して
function myFunction() {

}
-----------
以下のスクリプトをコピー&ペーストします。

====================スクリプトここから====
function sendMailFromForm() {
    Logger.log('sendMailFromForm() debug start');

    //------------------------------------------------------------
    // 設定エリアここから
    //------------------------------------------------------------

    // 件名、本文、フッター
    var subject = "[参加お申し込み承りました]"; 
    var body
        = "お申し込みありがとうございます。\n\n"
        + "以下の内容で受付させていただきました。\n";
        + "------------------------------------------------------------\n";
    var footer
        = "------------------------------------------------------------\n\n"
        + "訂正など有りましたら、・・・・までご連絡ください。\n";
        + "当日のお越しをお待ちしております。";

    // 入力カラム名の指定
    var NAME_COL_NAME = 'お名前';
    var MAIL_COL_NAME = 'メールアドレス';
    var SUBJ_COL_NAME = '';

    // メール送信先
    var admin = "××××@gmail.com";
    var cc    = "";    // Cc:
    var bcc   = admin; // Bcc:
    var reply = admin; // Reply-To:
    var to    = "";    // To: (入力者のアドレスが自動で入ります)

    //------------------------------------------------------------
    // 設定エリアここまで
    //------------------------------------------------------------

    try{
        // スプレッドシートの操作
        var sh   = SpreadsheetApp.getActiveSheet();
        var rows = sh.getLastRow();
        var cols = sh.getLastColumn();
        var rg   = sh.getDataRange();
        Logger.log("rows="+rows+" cols="+cols);

        // メール件名・本文作成と送信先メールアドレス取得
        for (var j = 1; j <= cols; j++ ) {
            var col_name  = rg.getCell(1, j).getValue();    // カラム名
            var col_value = rg.getCell(rows, j).getValue(); // 入力値
            body += "【"+col_name+"】\n";
            body += col_value + "\n\n";
            if ( col_name === NAME_COL_NAME ) {
                body = col_value+" 様\n\n"+body;
            }
            if ( col_name === MAIL_COL_NAME ) {
                to = col_value;
            }
            if ( col_name === SUBJ_COL_NAME ) {
                subject += col_value;
            }
        }
        body += footer;

        // 送信先オプション
        var options = {};
        if ( cc )    options.cc      = cc;
        if ( bcc )   options.bcc     = bcc;
        if ( reply ) options.replyTo = reply;

        // メール送信
        if ( to ) {
            MailApp.sendEmail(to, subject, body, options);
        }else{
            MailApp.sendEmail(admin, "【失敗】Googleフォームにメールアドレスが指定されていません", body);
        }
    }catch(e){
        MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message);
    } 
}
====================スクリプトここまで=====

その後、内容に応じて以下を変更
1)メールアドレスはお使いのアドレス(自分自身のアドレス)を入力してください。
  必要に応じてcc等を設定してください。
  admin となっているのは作成している人のgmailアカウントになります。
2)フォームで使っている「お名前」と「メールアドレス」の質問のタイトル(=項目名)が
違っている場合はスクリプトかフォーム変更してください。
  「お名前」は、メールの最初に xx様 という表記が入る
  「メールアドレス」フォームを入力してくれた人のアドレス。ここに返信される。
3)subjectや body、footerとなっている箇所の文章を必要に応じて変更
そしてその後保存してください。
名前はsendMailFromForm 等としておくと良いでしょう。

そして保存をしておきます。
次にスクリプトの実行のタイミングを設定します。

スクリプトの編集画面の「リソース」の「現在のスクリプトのトリガー」を選ぶと
スクリプト実行のタイミングの設定ポップアップが出てきます。



 ↓
formの入力があったときに実行したいので
イベントとして、「スプレッドシートから」「on form submit」(フォーム送信時)に
スクリプトが動作するよう選択します。

 ↓
これを初めて保存しようとすると、承認せよという画面が現れます。
ので承認をします。



もう一度保存とするとやっと保存ができます。
これで、登録したときに、メールが送信される設定になります。

フォーム画面から入力してテストしてみましょう。

入力するフォーム画面を出すには、スプレッドシートの「フォーム」の「ライブフォームを開く」から立ち上げることができます。

テストしてみてうまくいかないようであれば、フォーム用スプレッドシートの
「ツール」の「スクリプトマネージャー」または「スクリプトエディタ」から選んで編集してみましょう。

google driveのスプレッドシートにフォームからの入力が自動的に入るので、一緒のプロジェクトメンバと共有しやすいし途中で項目の増減があっても勝手に反映してくれるので管理が楽です。

2012/08/09

[Memo] Gmailで使用可能な別名アドレス(エイリアス) - Gmailの使い方

gmail のアカウントを取ると、こんなバリエーションのアドレスも同様につかえる。

まず、よく知られたところでは、+なんちゃら というユーザ名も使える。


watashinonamae@gmai.com
watashinonamae+shigoto@gmail.com
watashinonamae+ouchi@gmail.com

どれも watashinonamae@gmai.com に届く。

受け取ったときにフィルタしやすいから、目的ごと使い分けると便利かも。


それから、 . は名前の中に入れられるし、大文字小文字の区別はない

例  以下はみんな同じ所に届く
watashinonamae@gmai.com
WatashiNoNamae@gmai.com
WATASHINONAMAE@gmail.com
watashi.no.namae@gmai.com
wa.ta.shi.no.na.ma.e@gmai.com

どれも watashinonamae@gmai.com に届く

@の前の . や .. と続けるのは駄目と書いてあるのもあったけど
特に問題なくとどきます。

例  以下も同様に同じ所に届く
watashinonamae.@gmai.com
.watashinonamae@gmai.com
watashi..nonamae@gmai.com

こちらに解説在りました
http://support.google.com/mail/bin/answer.py?hl=ja&hlrm=en&answer=10313&ctx=mail

「これらのアドレスはいずれもあなたのものなのでご安心ください。」だそうです(^。^)

そしてドメインも別のが使える!
watashinonamae@gmai.com
watashinonamae@googlemail.com



ちなみに Google Apps だと、ユーザ名に +xxx の追加は使えるけど、 . を入れるのは使えまへんでした。 (上記ヘルプにもありますが。)

設定していないアドレスは管理者に届くようにしてあるのにそれにも届かない。
どこへ行ってしまったのだろう?まあいいか。


Google Appsではエイリアスドメインは使えますね。

Skype のIMログを編集 : 時間表記を消す

スカイプのログの時間を削除


ログの編集は、Windowsの時には秀丸かNoEditorを使ってます。
(正規表現ができないと日付け消せないので。ノートパッドだとできないと思う)





当日に編集するのなら、新規にスカイプからログをコピペして

「検索」-> 「置換」 で 『正規表現』にチェックを入れる。


検索に  \[[0-9]{2}:[0-9]{2}:[0-9]{2}\]   を入れる

置換を空欄にしておく。

「全置換」を押す。   ・・・いじょ。




もし、昨日以前のログを編集するのなら(全日以前のモノを編集)
スカイプからログをコピペして
「検索」-> 「置換」 で 『正規表現』にチェックを入れる。(上と同じ)

検索に  \[[0-9]{4}/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}\] を入れる
置換を空欄にしておく。

「全置換」を押す。


こんな感じ。簡単です。



同様に、タブやスペースだけの行を削除の時は検索に以下を入れてやればOK
^[ \t]*\n




秀丸エディタ(有料)
http://hide.maruo.co.jp/software/hidemaru.html

NoEditor(無料)
http://www.yokkasoft.net/
(download の NoEditor から、UnEditor でも多分OK)


どちらもほとんど同じ使い勝手です。








Joomla: PHP Fatal error: Class ‘JCache’ not found… | FlexPlex

Fatal error: Class 'JCache' not found in
/xxxx/public_html/example.com/libraries/joomla/factory.php on line 208
が出てしまった。
サーバー障害が発生したあとに出た。

Joomla 1.5シリーズのサーバーにて。

http://flex-plex.ru/?p=47
よめまへん・・・しかし何となくわかった。

/libraries/joomla/cache/cache.php
がない、ってことかな。


今回は障害中別のサーバーで稼働させていたのでそちらからコピーして無事復旧。

どうやら、cache.phpのみならず、ほかのフォルダやファイルも無い模様・・・
フォルダ以下のファイルを全部コピーしてみて完了

でもなぜこのフォルダ以下だけなくなってしまうのかな?

このときはディスク障害だったのだが、実はそのあとに別のサーバでも同じ現象が・・・
こちらはJoomla2.5シリーズ

なくなってしまう原因は追及してません。

IE9のデバッグ

FirefoxやChromeだと、Firebugが使えるのですが、IEって使えないのかな?
以前はInternet Explorer Developer Toolbar というものがあったらしいのですが、IE9 からかどこからか、今では見つからない・・・

でも、既に組み込まれているもよう

F12でデバッガーが起動してくれる。こんな画面がポップアップする。
IE8、7 対応のデバッグも出来るもよう。

とりあえずデバッグしなきゃ。

2012/07/15

WordPress とfacebookを連動してみました Open Graph Pro と facebook plugin で画像も(たぶん)連携


次に、記事を投稿したらfacebookに流す仕組みを、@猫乃手舎.com でやってみようかと奮闘。


まず、facebook 側でアプリの設定が必要。
自分のアカウントにログインした状態で
https://developers.facebook.com/apps

右上の「Create New app」から以下の画面に入力

App nameと namespace (オプションになってるけど、OGPを使ってサムネイルを出したいので入れる必要あり)を入力する。
とApp ID/API Key と App secret と言うものが発行されるので(._.) φ メモメモ しておく。

それから
http://graph.facebook.com/xxxxx <--- xxxxx に自分のfacebookIDを入れる
(自分のページにアクセスしたときの https://www.facebook.com/xxxxx <---の部分)
===========
{
   "id": "695339317",   <--- ここの数字を(._.) φ メモメモ
   "name": "\u524d\u7530 \u5eb7\u5b50",
   "first_name": "\u5eb7\u5b50",
   "last_name": "\u524d\u7530",
   "username": "junior.maeda",
   "gender": "female",
   "locale": "en_GB"
}
================

それから投稿を許可するには、facebook アプリ側の設定追加が必要
https://developers.facebook.com/wordpress/ こちらを参考に

"Open Graph" の設定にpublishの許可を追加。
たぶんこれでいいのかな。

Open Graph がアクティベートされていない場合はそちらもやらねばです。
(Open Graphの設定にnamespaceが必要)


(2) OGPの設定 -> 「Open Graph Pro」 pluginをwordpressに導入

WP-OGPというプラグインもあるようなのですが面倒みたいなので止めました。

Wordpressのダッシュボード、pluginから「Open Graph Pro」を検索してインストール

Open Graph Pro の設定画面から、先ほどのuser IDとApplicationID を入力


保存してみる。

こちらで確認 ↓ 

いや〜、Parser Mismatched Metadata の warningがでるんだけど、解決は・・・・
ま、ちょっとほっときますか。

(3) facebook のpluginをwordpressにインストール

以下からダウンロード ↓

実は、1.0.1で設定したところ、うまくいかず一時断念

2012年7月13日にupdateされた1.0.2になって状況が改善。
変更内容にある、これ ↓ ですね。良かった。二晩ほど泣きそうだったけど。 
・Removed the need to create PHP sessions, relying on user meta/transients now.
http://wordpress.org/extend/plugins/facebook/changelog/

一応、wordpressではエラーが出なくなりました。

記事が完了したら送られるように設定・・・したつもり。
facebook plugin の設定で、「Social Publisher」をonにする。
保存を押すと、馴染みの「連携して良いですか」ダイアログが出るので、確認して良かったら連携する。
たぶん、これで良いと思うのだけど、今晩のバッチでうまく動くと良いな。(テストしない・・・・(`◇´)ゞ・・・)


likeボタンもウィジェットからサイドバーに追加してみた。
(記事毎のlikeボタンは・・・別のつかっちゃってるんだよな)

そちらは動作すること確認、テストに反応したお友達もいて・・・(`◇´)ゞ 失礼しましたm(_ _)m


その他いろいろな機能があり、Facebook Pageに投稿できたり、まあいろいろあるようです。
それはのちのち。

これで毎日猫写真がfacebookに連動するかな〜、するといいな〜。

2012/03/11

Wordpress plugin のメモ

猫乃手舎.com に使ったものたち

Wordpress
さすが最近少しばかり慣れてきました。

毎日メールで写真を投稿するサイトに使ったプラグイン達
忘れないうちに(._.) φ メモメモ

=========================
画像を添付した,メールでの投稿
http://wppluginsj.sourceforge.jp/ktai_entry/
Wordpressのメール投稿機能を自動的に動かすプラグイン。
添付画像が使えるところが便利。
Ktai Style というpluginも必要みたいです。
今回は、毎日深夜に送られるメールを自動的に投稿処理。

注意事項
(1)最初に投稿しようとしたらエラー
「There is 1 message(s).
Fatal error: Call to undefined method KtaiEntry_Post::log_error() in
/xxx/xxx/wp-content/plugins/ktai-entry/inc/post.php on line 801」

こんなエラーが出ていたので、以下を参考にして
http://wppluginsj.sourceforge.jp/ktai_entry/qa/

セーフモードで動いている環境だったので
wp-contents/upload のフォルダのパーミッションを変えてみたところ、うまくいきました。
または、.htaccessでの設定でもいいかも。


(2) 添付ファイルのMIME TYPEは、ファイルの拡張子とあわせないと登録されませんよ〜。

メールプログラム自作だったので、MIME type間違えてました・・・

※ タグが使えたり、投稿の下が聞きも出来たり、投稿時刻指定が出来たりと
機能が盛りだくさんです。
http://wppluginsj.sourceforge.jp/ktai_entry/
あとは画像のタイトル付けたいな〜。

=========================
lightboxみたいに画像を表示させるプラグイン
http://www.4mj.it/lightbox-js-v20-wordpress/
日本語
http://shinonon-web.net/wordpress-plugins/lightbox-2-wordpress-plugin-japanese/

インストールをして、設定をするだけの簡単なプラグイン。
既に投稿されている画像にも利用できるので便利。
ブラウザのキャッシュが残っていると、lightbox様の表示にならないみたい。

=======================
スマフォ用のプラグイン wptouch 
http://wordpress.org/extend/plugins/wptouch/

とても簡単、pluginとしてインストールするだけ


画像が表示されないので一番上の記事のサムネイルが表示されるように変更。
こちらの記事を参考に

http://knk-n.com/2011/06/27/wptouch-top/

wp-content/plugins/wptouch/themes/default 配下の
function.php に以下を追加。 
 (参考サイトの "<" とが "&lt;"とかで表示されるので注意)


fnction new_catch_that_image() {
    global $post, $posts;
    $first_img = '';
    ob_start();
    ob_end_clean();
    $output = preg_match_all('/<img.*.src=[\'"]([^\'"]+)[\'"].alt.*>/i', $post->post_content, $matches);
$first_img = $matches [1] [0];
if(empty($first_img)){ //Defines a default image
        $first_img = "http://knk-n.com/Default.jpg";
    }
    return $first_img;
}

----------

そして同じ所のindex.php の、<div class="post-author"> あたりに以下を挿入
(大きさを参考サイトからちょっと変えました)


<a href="<?php the_permalink(); ?>" >
<img class="aligncenter" src="<?php echo catch_that_image(); ?>" alt="" width="215" height="auto" />
</a>

無事イメージを表示♪

=============================

WordTwit

もいれてみました。
設定は簡単。

========================

WP Social Bookmarking Light

もいれてみました。


以上