webプロダクトいんふぉ

webの気になった情報を発信中!!

Google App Scriptを使用してGmail情報をスプレッドシートに書き出す

ebookなどのダウンロード情報(お名前・メールアドレス)からメルマガ用のリストを自動で作りたくて、Gmail情報をスプレッドシートに書き出してみました。

GmailGoogleスプレッドシートを連携させたかったので、今回は手軽に実装できるGoogle App Script(GAS)を使用しました。

Googleスプレッドシートを作成します

作成後、メニューバーの「ツール > スクリプトエディタ」をクリックし、GASを書くためのエディタを起動します。

f:id:front-end-engineer:20190111211308p:plain

今回は、下記のようなメールの中から「お名前」と「メールアドレス」を取り出します。

f:id:front-end-engineer:20190111212459p:plain

次に取り出すための、コードを書いて行きます。

f:id:front-end-engineer:20190111211943p:plain

function searchContactMail() {
  
  /* Gmailから特定条件のスレッドを検索しメールを取り出す */
  var strTerms = 'from:"example.com"'; //メール検索条件
  var numMailMax = 20000; //取得するメール総数  
  var numMail = 500; //1度に取得するメール数
  var myThreads; //条件にマッチしたスレッドを取得、最大500通と決まっている
  var myMsgs; //スレッドからメールを取得する →二次元配列で格納
  var valMsgs;
 
  var i = SpreadsheetApp.getActiveSheet().getLastRow()-1;
  var wrong_email = 0;
  
  if(i<numMailMax) {  
    valMsgs = [];
    myThreads = GmailApp.search(strTerms, i, numMail); //条件にマッチしたスレッドを取得、最大500通と決まっている
    myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する →二次元配列で格納
    /* 各メールから日時、送信元、件名、内容を取り出す*/
    for(var j = 0;j < myMsgs.length;j++){
      var Body = myMsgs[j][0].getPlainBody(); 
      var name = Body.split('お名前:')[1].split('\n')[0]
      var email = Body.split('メールアドレス:')[1].split('\n')[0]
      
      if(myMsgs.length>0){
        SpreadsheetApp.getActiveSheet().getRange(j + 2, 1).setValue(name); //シートに貼り付け
        SpreadsheetApp.getActiveSheet().getRange(j + 2, 2).setValue(email);
      } 
    }
  }
}

コードの中で重要になってくるのが、どのメールを対象にするかという var strTerms = 'from:"example.com"'; //メール検索条件 の部分になります。 今回は送信者を限定して取得していますが、今回のケースでは、 var strTerms = 'subject:"ebookダウンロード"'; //メール検索条件 として件名を元にすることも可能です。

それぞれのコードに対してコメントを残してあるので、参考にしてみてください。

最後にここまで出来上がったら、コードを「command + s」windowsの方は「Ctrl + s」で保存し、メニューバーの下にある再生ボタンを押してください。 コードにエラーがでなかれば、実行中というアラートが表示され実行が終われば自動的に消えます。

実行が完了した画面が下記になります。 一行目の目次は自分で理解しやすいようにつけたので、ここに関してはお好みで大丈夫です。

f:id:front-end-engineer:20190111213427p:plain

この情報を元にメルマガツールを使用してメルマガ配信を行えば、簡単にメールマーケティングができるようになります。

メルマガツールとしては、個人的にはメール配信・メルマガ配信(月額1800円~)|Benchmark Emailが使いやすいと思っています。

Deviseのルーティング制御方法

Railsでログイン機能をつける時にはDeviseを使う時が多いと思いますが、アプリケーションによっては、新規登録はサービス管理者側で行い、誰でも会員登録ができる状態を避けたい状況もあると思います。 そこで、今回はDeviseを使用して、サービスのview側ではログインしかできない状態を作っていきます。

Deviesの初期設定は下記のようになっています。

|Prefix  |Verb  |URI Pattern  |Controller#Action  |
|---|---|---|---|
|new_user_session  |GET  |/users/sign_in(.:format)   |devise/sessions#new  |
|user_session  |POST  |/users/sign_in(.:format)  |devise/sessions#create  |
|destroy_user_session  |DELETE  |/users/sign_out(.:format)  |devise/sessions#destroy  |
|new_user_password  |GET  |/users/password/new(.:format)  |devise/passwords#new  |
|edit_user_password  |GET  |/users/password/edit(.:format)   |devise/passwords#edit  |
|user_password  |PATCH  |/users/password(.:format)  |devise/passwords#update  |
|user_password  |PUT  |/users/password(.:format)  |devise/passwords#update  |
|user_password  |POST  |/users/password(.:format)  |devise/passwords#create  |
|cancel_user_registration  |GET  |/users/cancel(.:format)  |devise/registrations#cancel  |
|new_user_registration  |GET  |/users/sign_up(.:format)  |devise/registrations#new  |
|edit_user_registration  |GET  |/users/edit(.:format)  |devise/registrations#edit  |
|user_registration  |PATCH  |/users(.:format)  |devise/registrations#update  |
|user_registration  |PUT  |/users(.:format)  |devise/registrations#update  |
|user_registration  |DELETE  |/users(.:format)  |devise/registrations#destroy  |
|user_registration  |POST  |/users(.:format)  |devise/registrations#create  |

これをログインに必要な情報だけ残すようにします。

|Prefix  |Verb  |URI Pattern  |Controller#Action  |
|---|---|---|---|
|new_user_session  |GET  |/users/sign_in(.:format)   |devise/sessions#new  |
|user_session  |POST  |/users/sign_in(.:format)  |devise/sessions#create  |
|destroy_user_session  |DELETE  |/users/sign_out(.:format)  |devise/sessions#destroy  |

それにはroutes.rbを編集していきます。

変更前

devise_for :users

変更後

devise_scope :user do
  get '/users/sign_in' => 'devise/sessions#new', as: :new_user_session
  post '/users/sign_in' => 'devise/sessions#create', as: :user_session
  delete '/users/sign_out' => 'devise/sessions#destroy', as: :destroy_user_session
end

この部分で、Deviseのマッピングを行い、skipしてルーティングの設定は行わないようにしています。 devise_for :users, skip: :all

do以下で必要なルーティングだけ記述してあげれば完成です。

一点注意が必要になります。おそらくログアウト時にルーティングエラーが出ると思います。 これは、本来Deleteメソッドで呼ぶはずが、Getメソッドで呼んでしまっているのが原因です。 そこで、ログアウトのリンクを変更してあげます。具体的にはlink_toからbutton_toに変更する必要があります。

変更前

<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>

変更後

<%= button_to "ログアウト", destroy_user_session_path, method: :delete, class: "nav-link waves-effect" %>

Unityの最新版をDLしたらAndroidビルドが出来なくなった

ビルドしようとするとUnable to list target platforms. Please make sure the android sdk path is correct. ... というメッセージが出てきて止まる

↓こんな感じ

f:id:front-end-engineer:20170531185132p:plain

まず、疑ったのがSDKのパスだがそこは問題なかった。

AndroidStudioを起動して確認済み

※確認方法

Configure>Project Default>Project Structure>Android SDK location:

同じような問題にぶつかっている人が解決方法を提示していてくれた

一部個人的に危惧していたのが、toolsフォルダを上書きしてしまうのは少し危険だと思ったので、自分はリネームしてtools_r25.2.5-windows.zipの中のtoolsを新規のものとして配置した。

いきなりビルドできなくなると焦るけれども、unityのフォーラムが優秀なので、そちらを参照すると解決する可能性が高い

answers.unity3d.com

UbuntuでChromeのインストールでハマったこと

Linuxをはじめて躓いたこと

Ubuntuだとデフォルトで、FireFoxが入ってはいるんですが、Chromeを今まで使ってきたので、今まで同じようにインストールしようとしたらできないという、まさかの事態に突入しました

WindowsMacだとChromeインストーラをDLして、「次へ(next)」をクリックして行けば終わるんですが、Ubuntuだと「インストール中」から進まずに、結果インストールできないという事態に陥ったので、Chromeのインストールまでにやったことをまとめます

1、依存するパッケージをインストール

自分はこれを行っていなかったために入りませんでした

「libappindicator1」が必要なパッケージです
sudo apt-get install libappindicator1
これで前準備が完了です

エラーが出る場合には、Chromeが中途半端に入っているかもしれないので、削除します
sudo apt-get remove google-chrome-stable

2、Chromeインストーラをダウンロード

公式サイトからインストーラをダウンロード
https://www.google.co.jp/chrome/browser/desktop/

3、インストール

2でDLしたディレクトリに移動してコマンドを実行。
sudo dpkg -i ダウンロードしたインストーラ名.deb
エラーがでなければ完了

続けて
google-chrome
を入力すれば起動します

SlideShareにアップしたら文字が消えた

keynoteで作成したスライドのテキストがSlideShare上で消える

結論から言うとフォントの種類の問題だった
macにデフォルトで入っているヒラギノフォントを使っていたから表示できていなかった

対処法

1、keynote上ではスライドを作成せずに、画像として切り出したものを使用する
2、使用してもいいフォントを使う(把握仕切れていない)

フォントにこだわりがある人は1を使用するしかない。フォントにこだわりがない人は、下のURLからmigmix-1p-20150712.zipを選んで自分のPCにインストールすれば問題ない(自分はこれで対応した)
https://ja.osdn.net/projects/mix-mplus-ipa/releases/